mon premier plugin : un peu de PHP pour boucle sur plusieurs 'article IDs'

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] mon premier plugin : un peu de PHP pour boucle sur plusieurs 'article IDs'

    Bonjour à tous,

    Bon après quelques années d'overrides et d'alternate layouts, je saute le pas : je suis en train de coder mon premier plugin

    (en fait, c'est un plugin qui va lire des custom fields pour les transformer en Meta Data dans le <head> du site)

    Ma question est plutôt PHP en fait.
    Le custom field en question peut contenir plusieurs valeurs qui sont des IDs d'articles liés (le custom field "Articles Field" de Regular Labs, pour ceux que ça intéresse).
    S'il n'y a qu'un seul article lié, ça marche (j'affiche bien le Titre de l'article sur base de l'ID).
    Mais dès que j'en ai plusieurs, je ne sais pas trop comment faire la boucle pour rendre tous les Titres d'articles.

    Voici mon bout de code actuel :

    Code PHP:
     //!!! works if the Custom Field only contains one Article ID (like 8) but not if there are multiple Article IDs (like 8,9)
    //!!! therefore, I made a quick temporary workaround that only takes the first value... but all have to be taken into account
    //!!! also, here made it only for Custom Field 24 but we need to concatenate Custom Fields 24 and 25
    $article JTable::getInstance("content");
    $articleidsexplode','$row->jcfields[24]->rawvalue );
    $article->load($articleids[0]);
    $dublincoremeta ='<meta name="DC.creator" content="' $article->get("title") .'" />';
    $document->addCustomTag($dublincoremeta);

    // !!! this is a test to loop through articles, but it breaks
    //$articleids = $row->jcfields[24]->rawvalue;
    //for each ($articleids as $value) {
    // $article = JTable::getInstance("content");
    // $article->load($value);
    // $articletitles = $article->get("title");
    //}
    //$dublincoremeta ='<meta name="DC.creator" content="' . $articletitles .'" />';
    //$document->addCustomTag($dublincoremeta); 
    Merci
    wabaw aime ceci.
    Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

    Un message d’erreur sur votre site Joomla... ayez le reflexe de consulter la base de connaissance : https://kb.joomla.fr

    Ce forum, vous l'aimez ? Il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ, l'Association Francophone des Utilisateurs de Joomla : https://www.joomla.fr/association/adherer

  • #2
    Bonsoir Marc

    Envoyé par woluweb Voir le message
    Bon après quelques années d'overrides et d'alternate layouts, je saute le pas : je suis en train de coder mon premier plugin
    Mais où t'arrêteras-tu ? Dans quelques mois core developer pour J4 ? ;-)

    De ce que je lis de ton côde $articlesids est donc un array:

    Code PHP:
    $idsexplode','$row->jcfields[24]->rawvalue ); 
    Du coup, syntaxiquement, le code ci-dessous devrait être correct pour la boucle que tu cherches:

    Code PHP:
    $idsexplode','$row->jcfields[24]->rawvalue );

    foreach (
    $ids as $id)
    {
         
    $article->load($id);

         
    $document->addCustomTag(
             
    '<meta name="DC.creator" content="' $article->get("title") .'" />'
         
    );

    Tu avais écris "for each" en deux mots alors que c'est un seul.

    Le code ci-dessus est non testé mais logiquement, cela devrait le faire.

    J'ai allégé le code en supprimant une variable et en écrivant le meta immédiatement dans la fonction en prenant soin de passer à la ligne : la lisibilité du code est améliorée.

    Bonne soirée.
    Dernière édition par cavo789 à 03/04/2020, 19h05
    wabaw et woluweb aiment ceci.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
    Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

    Commentaire


    • #3
      Merci Christophe (pour le msg ci-dessus et l'échange en off)

      Pour la postérité, voici le code final toiletté

      Code PHP:
      $ids $row->jcfields[24]->rawvalue;

      if (!
      is_array($ids))
      {
      $ids = [$ids]; // we transform it into an array. So we can simplify the code instead of having to manage a value if one ID and an array if multiple IDs
      }

      $articletitles '';

      $article JTable::getInstance("content");

      foreach (
      $ids as $id) {
      $article->load($id);
      $articletitles .= $article->get("title") . ' | ';
      }

      $dublincoremeta ='<meta name="DC.creator" content="' rtrim($articletitles' |') . '" />';
      $document->addCustomTag($dublincoremeta); 
      wabaw et cavo789 aiment ceci.
      Présentations : slides.woluweb.be | Coordonnées complètes : www.woluweb.be

      Un message d’erreur sur votre site Joomla... ayez le reflexe de consulter la base de connaissance : https://kb.joomla.fr

      Ce forum, vous l'aimez ? Il vous a sauvé la vie ? Vous y apprenez régulièrement ? Alors adhérer à l'AFUJ, l'Association Francophone des Utilisateurs de Joomla : https://www.joomla.fr/association/adherer

      Commentaire

      Annonce

      Réduire
      Aucune annonce pour le moment.

      Partenaire de l'association

      Réduire

      Hébergeur Web PlanetHoster
      Travaille ...
      X