'Icon fontawesome' dans le titre de certains articles

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

  • #31
    la j ai fait la surcharge du composant tags pour afficher l'icone apres le titre des liens. J ai du ruser et procéder comme ci dessous:
    jai crée une susbstitution du composant tags > tags
    Dans ce fichier il y a une boucle $item qui contient les informations relatives a chaque article devant être affiché. Cette boucle est à la ligne 72 du fichier à modifier
    Code:
     <?php foreach ($this->items as $i => $item) : ?>
    $item->content_id contient l'id de l'article correspondant.

    J'ai été cherché la valeur du champ directement dans la table #__fields_values. Cette table contient 3 champs (l'item_id du champ, l'item_id de l'item correspondant (article, utilisateur....) et la valeur de celui ci.

    Pour créer l'objet requete sql, j ai ajouté la classe factory au debut du fichier.

    Pour créer l'objet db, j ai eu recours à cette ligne $db = Factory::getContainer()->get('DatabaseDriver'); qui crée une connexion à la base de données car le contexte (composant tags) ne permet pas l'utilisation de la procédure standard, à savoir : $db = $this->getDatabase(); . $this contient les informations concernant les tags et non les articles.. De plus, nous ne sommes pas dans un modele .

    Sur ce point la documentation est ici https://manual.joomla.org/docs/gener...e/select-data/

    Etj ai fait remonter une liste d'objet. J ai associé la valeur remontée avec la variable iconClass . Et je l ais affichée.
    Ce code est executé pour chaque item de la liste.

    Le fichier à modifier est html > com_tags >tag > default_items.php

    A la ligne 18, j ai ajoté la ligne ci dessous:
    Code:
    use Joomla\CMS\Factory;
    Ensuite , j ai ajouté le code ci dessous après la ligne 77:
    Code:
    <?php
    $db = Factory::getContainer()->get('DatabaseDriver');
    $query = $db->getQuery(true);
    $query->select($db->quoteName(['field_id', 'item_id','value']));
    $query->from($db->quoteName('#__fields_values'));
    $query->where(('item_id = ' . $item->content_item_id) and ('field_id = 1'));
    $db->setQuery($query);
    $results = $db->loadObjectList(); // retourne un tableau d'objet: foreach obligatoire même si un seul résultat
    if ($results) { // Vérification si $results n'est pas vide
    foreach ($results as $r) {
    // ligne de verification à decommenter pour voir ce qui remontes de la base de données
    // echo "item id: " . $r->item_id . " Valeur: " . $r->value . "<br>";
    $iconClass = $r->value;
    }
    }
    ?>​
    Ety enfin, j ai affiché l'icone en ajoutant les lignes ci dessous après la ligne 107 du fichier:
    Code:
    <?php if (isset($iconClass) && !empty($iconClass)) { ?>
    <span class="<?php echo $iconClass; ?>" aria-hidden="true"></span>
    <?php } ?>​
    Dernière édition par lefabdu51 à 20/02/2025, 15h53

    Commentaire


    • #32
      Simplification du code ci dessus: A la place de loadObjectList, j ai utilisé loadRow, qui me fait remonter un tableau contenant une ligne de 3 valeurs, ce qui est plus simple.
      La modification de code porte sur la ligne $results et celle en dessous:. Ill faut remplacer ces lignes par :
      Code:
        $results = $db->loadRow();
                                if (isset($results[2]) && !empty($results[2])) {
                                   $iconClass = $results[2];
                                 } else {
                               $iconClass = '';
                             }​

      Commentaire

      Annonce

      Réduire
      Aucune annonce pour le moment.

      Partenaire de l'association

      Réduire

      Hébergeur Web PlanetHoster
      Travaille ...
      X