'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
    elchecmoi aime ceci.

    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 = '';
                             }​
      elchecmoi aime ceci.

      Commentaire


      • #33
        Pour les résultats de recherche, le fichier a surcharger est le suivant html > com_finder >search > defaullt_result.php

        A la ligne 21, on ajoutes ce code
        Code:
        use Joomla\CMS\Factory;
        Ensuite le resultat est affiché à partir de la ligne 72.
        En dessous de la ligne 85, on ajoutes le code ci dessous
        Code:
        <p class="result__title">
        <?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 = ' . $this->result->id));
        $db->setQuery($query);
        $resultats = $db->loadRow();
        if (isset($resultats[2]) && !empty($resultats[2])) {
        $iconClass = $resultats[2];
        } else {
        $iconClass = '';
        }
        ?>​
        Pour l'affichage de l'icone, elle est directement dans le titre
        Jai modifié la ligne 103 comme ci dessous
        Code:
        Route::_($this->result->route),
        '<span class="result__title-text">' . $this->result->title . $icon . '<span class="' . $iconClass . '" aria-hidden="true"></span></span>' . $show_url,​
        elchecmoi aime ceci.

        Commentaire


        • #34
          Un immense merci lefabdu51 ! Tu as réglé tous les soucis d'icônes dans le titre ! C'est juste parfait par rapport à mon problème initial, même au-delà !
          Sans toi je n'aurais jamais réussi à créer les icônes dans les titres des articles quelque soient les différents affichages : Blog de catégorie, articles, listes d'éléments d'articles taggés ET listes d'articles d'éléments de recherche ! Je te fais une belle révérence pour ces exploits !

          Commentaire

          Annonce

          Réduire
          Aucune annonce pour le moment.

          Partenaire de l'association

          Réduire

          Hébergeur Web PlanetHoster
          Travaille ...
          X