'Icon fontawesome' dans le titre de certains articles

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

  • #16
    Envoyé par lefabdu51 Voir le message
    et tu le veux apres?
    Oui, étant donné que l'intention est de remplacer "(vidéo)" écrit en fin de titre.
    Ca change le code ?

    Mais je me rends compte que si je dois modifier le fichier du module du main_menu pour aussi afficher l'icône dans les titres des éléments taggés, ça se complique grave car c'est un méga-menu ajouté en extension : djmegamenu et il y a plein de code… J'ai déjà fait une substitution du module mod_djmegamenu, dans l'éditeur un dossier du même nom s'est créé sous le dossier html, j'ai regardé le fichier default.php (je suppose que c'est celui-là à modifier) et pffff… galère
    Dernière édition par elchecmoi à 13/02/2025, 19h40

    Commentaire


    • #17
      donc laisse ton code ou ill est et déplacel la ligne de code ci dessous uniquement 4 lignes plus bas après le second echo <<htag>>. Le second <<htag>> est celui qui ferme le titre comme cela tu l auras après.

      Code:
      <span class="<?php echo $iconClass; ?>" aria-hidden="true"></span>
      Question tu affiche tes tags comment? via quel module ?
      Dernière édition par lefabdu51 à 14/02/2025, 09h44

      Commentaire


      • #18
        Pour les liens de menu, dans le lien en lui meme , tu as une option pour y mettre une classe. lien de menu > type de lien > classe d icone de lien. Tu peux aussi associer une image qui sera affichée à gauche du lien en question. Normalement elle devrais appraitre a la place de la puce de liste sur ton site.

        La teste en mettant une classe de lien nommée video dedans. Je regarderais alors ton site pour voir comment elle apparait, vu que ce n est pas un module de menu standard.

        Est ce que tu peux me reposter les lignes que tu a modifié pour les articles, vu que le code php s affiche, il doit etre positionné entre des balises html. Donc ajoutes <?php devant $jcfields = $displayData->jcfields; et ?> apres rawvalue);​ ​. Et la le code sera éxécuté
        Dernière édition par lefabdu51 à 14/02/2025, 09h55

        Commentaire


        • #19
          Merci lefabdu51 ! hélas, ça ne fonctionne toujours pas.
          J'ai tenté d'ajouter <?php devant $jcfiels = $displayData->jcfields; et ?> après rawvalue); mais cela me produit une erreur, les articles ne sont plus accessibles.
          Et même en déplaçant le code entre les span de 4 lignes, je vois que le code affiché est toujours devant le titre ??? Je ne connais pas php, snif !

          Je te mets le code entier du fichier default.php des articles, si tu arrives à voir d'où peut venir l'erreur ?

          Code:
          <?php
          
          /**
          * @package Joomla.Site
          * @subpackage com_content
          *
          * [USER="64686"]Copyright[/USER] (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
          * @license GNU General Public License version 2 or later; see LICENSE.txt
          */
          
          defined('_JEXEC') or die;
          
          use Joomla\CMS\Factory;
          use Joomla\CMS\HTML\HTMLHelper;
          use Joomla\CMS\Language\Associations;
          use Joomla\CMS\Language\Text;
          use Joomla\CMS\Layout\FileLayout;
          use Joomla\CMS\Layout\LayoutHelper;
          use Joomla\CMS\Router\Route;
          use Joomla\CMS\Uri\Uri;
          use Joomla\Component\Content\Administrator\Extension\C ontentComponent;
          use Joomla\Component\Content\Site\Helper\RouteHelper;
          
          /** @var \Joomla\Component\Content\Site\View\Article\HtmlVi ew $this */
          // Create shortcuts to some parameters.
          $params = $this->item->params;
          $canEdit = $params->get('access-edit');
          $user = $this->getCurrentUser();
          $info = $params->get('info_block_position', 0);
          $htag = $this->params->get('show_page_heading') ? 'h2' : 'h1';
          
          // Check if associations are implemented. If they are, define the parameter.
          $assocParam = (Associations::isEnabled() && $params->get('show_associations'));
          $currentDate = Factory::getDate()->format('Y-m-d H:i:s');
          $isNotPublishedYet = $this->item->publish_up > $currentDate;
          $isExpired = !is_null($this->item->publish_down) && $this->item->publish_down < $currentDate;
          ?>
          <div class="com-content-article item-page<?php echo $this->pageclass_sfx; ?>">
          <meta itemprop="inLanguage" content="<?php echo ($this->item->language === '*') ? Factory::getApplication()->get('language') : $this->item->language; ?>">
          <?php if ($this->params->get('show_page_heading')) : ?>
          <div class="page-header">
          <h1> <?php echo $this->escape($this->params->get('page_heading')); ?> </h1>
          </div>
          <?php endif;
          if (!empty($this->item->pagination) && !$this->item->paginationposition && $this->item->paginationrelative) {
          echo $this->item->pagination;
          }
          ?>
          
          <?php $useDefList = $params->get('show_modify_date') || $params->get('show_publish_date') || $params->get('show_create_date')
          || $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category') || $params->get('show_author') || $assocParam; ?>
          
          <?php if ($params->get('show_title')) : ?>
          <div class="page-header">
          $jcfields = $displayData->jcfields;
          foreach($jcfields as $jcfield) {
          $jcfields[$jcfield->name] = $jcfield;
          }
          $iconClass = implode(',', $jcfields['icon']->rawvalue);
          <?php if(!empty($iconClass)) : ?>
          <?php endif; ?>​
          <<?php echo $htag; ?>>
          <?php echo $this->escape($this->item->title); ?>
          </<?php echo $htag; ?>>
          <span class="<?php echo $iconClass; ?>" aria-hidden="true"></span>
          <?php if ($this->item->state == ContentComponent::CONDITION_UNPUBLISHED) : ?>
          <span class="badge bg-warning text-light"><?php echo Text::_('JUNPUBLISHED'); ?></span>
          <?php endif; ?>
          <?php if ($isNotPublishedYet) : ?>
          <span class="badge bg-warning text-light"><?php echo Text::_('JNOTPUBLISHEDYET'); ?></span>
          <?php endif; ?>
          <?php if ($isExpired) : ?>
          <span class="badge bg-warning text-light"><?php echo Text::_('JEXPIRED'); ?></span>
          <?php endif; ?>
          </div>​
          <?php endif; ?>
          <?php if ($canEdit) : ?>
          <?php echo LayoutHelper::render('joomla.content.icons', ['params' => $params, 'item' => $this->item]); ?>
          <?php endif; ?>
          
          <?php // Content is generated by content plugin event "onContentAfterTitle" ?>
          <?php echo $this->item->event->afterDisplayTitle; ?>
          
          <?php if ($useDefList && ($info == 0 || $info == 2)) : ?>
          <?php echo LayoutHelper::render('joomla.content.info_block', ['item' => $this->item, 'params' => $params, 'position' => 'above']); ?>
          <?php endif; ?>
          
          <?php if ($info == 0 && $params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
          <?php $this->item->tagLayout = new FileLayout('joomla.content.tags'); ?>
          
          <?php echo $this->item->tagLayout->render($this->item->tags->itemTags); ?>
          <?php endif; ?>
          
          <?php // Content is generated by content plugin event "onContentBeforeDisplay" ?>
          <?php echo $this->item->event->beforeDisplayContent; ?>
          
          <?php if ((int) $params->get('urls_position', 0) === 0) : ?>
          <?php echo $this->loadTemplate('links'); ?>
          <?php endif; ?>
          <?php if ($params->get('access-view')) : ?>
          <?php echo LayoutHelper::render('joomla.content.full_image', $this->item); ?>
          <?php
          if (!empty($this->item->pagination) && !$this->item->paginationposition && !$this->item->paginationrelative) :
          echo $this->item->pagination;
          endif;
          ?>
          <?php if (isset($this->item->toc)) :
          echo $this->item->toc;
          endif; ?>
          <div class="com-content-article__body">
          <?php echo $this->item->text; ?>
          </div>
          
          <?php if ($info == 1 || $info == 2) : ?>
          <?php if ($useDefList) : ?>
          <?php echo LayoutHelper::render('joomla.content.info_block', ['item' => $this->item, 'params' => $params, 'position' => 'below']); ?>
          <?php endif; ?>
          <?php if ($params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
          <?php $this->item->tagLayout = new FileLayout('joomla.content.tags'); ?>
          <?php echo $this->item->tagLayout->render($this->item->tags->itemTags); ?>
          <?php endif; ?>
          <?php endif; ?>
          
          <?php
          if (!empty($this->item->pagination) && $this->item->paginationposition && !$this->item->paginationrelative) :
          echo $this->item->pagination;
          ?>
          <?php endif; ?>
          <?php if ((int) $params->get('urls_position', 0) === 1) : ?>
          <?php echo $this->loadTemplate('links'); ?>
          <?php endif; ?>
          <?php // Optional teaser intro text for guests ?>
          <?php elseif ($params->get('show_noauth') == true && $user->guest) : ?>
          <?php echo LayoutHelper::render('joomla.content.intro_image', $this->item); ?>
          <?php echo HTMLHelper::_('content.prepare', $this->item->introtext); ?>
          <?php // Optional link to let them register to see the whole article. ?>
          <?php if ($params->get('show_readmore') && $this->item->fulltext != null) : ?>
          <?php $menu = Factory::getApplication()->getMenu(); ?>
          <?php $active = $menu->getActive(); ?>
          <?php $itemId = $active->id; ?>
          <?php $link = new Uri(Route::_('index.php?option=com_users&view=logi n&Itemid=' . $itemId, false)); ?>
          <?php $link->setVar('return', base64_encode(RouteHelper::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language))); ?>
          <?php echo LayoutHelper::render('joomla.content.readmore', ['item' => $this->item, 'params' => $params, 'link' => $link]); ?>
          <?php endif; ?>
          <?php endif; ?>
          <?php
          if (!empty($this->item->pagination) && $this->item->paginationposition && $this->item->paginationrelative) :
          echo $this->item->pagination;
          ?>
          <?php endif; ?>
          <?php // Content is generated by content plugin event "onContentAfterDisplay" ?>
          <?php echo $this->item->event->afterDisplayContent; ?>
          </div>
          ​

          Commentaire


          • #20
            bon, on vas faire encore plus simple, supprimes le code au dessus et en dessous du second <<?php echo $htag; ?>>, tu doit avoir la structure ci dessous (avec les bonnes modifications des noms de champs):
            Code:
            <<?php echo $htag; ?>>
            <?php $jcfields = $displayData->jcfields;
            foreach($jcfields as $jcfield) {
            $jcfields[$jcfield->name] = $jcfield;
            }
            $iconClass = implode(',', $jcfields['icon']->rawvalue);
            if(!empty($iconClass)) : ?>
            <span class="<?php echo $iconClass; ?>" aria-hidden="true"></span>
            <?php endif; ?>

            Commentaire


            • #21
              Envoyé par lefabdu51 Voir le message
              bon, on vas faire encore plus simple, supprimes le code au dessus et en dessous du second <<?php echo $htag; ?>>, tu doit avoir la structure ci dessous (avec les bonnes modifications des noms de champs):
              Code:
              <<?php echo $htag; ?>>
              <?php $jcfields = $displayData->jcfields;
              foreach($jcfields as $jcfield) {
              $jcfields[$jcfield->name] = $jcfield;
              }
              $iconClass = implode(',', $jcfields['icon']->rawvalue);
              if(!empty($iconClass)) : ?>
              <span class="<?php echo $iconClass; ?>" aria-hidden="true"></span>
              <?php endif; ?>
              Cela me produit toujours une erreur sur l'affichage de l'article, je te mets une capture d'écran lorsque je mets ton code.
              J'ai essayé différents emplacements dans ce header mais les résultats provoquent toujours la même erreur avec disparition du header du site…
              Fichiers joints

              Commentaire


              • #22
                Code:
                <?php if ($params->get('show_title')) : ?> <div class="page-header"> <?php $jcfields = $displayData->jcfields; foreach($jcfields as $jcfield) { $jcfields[$jcfield->name] = $jcfield; } $iconClass = isset($jcfields['icon']) ? implode(',', $jcfields['icon']->rawvalue) : ''; // Handle potential missing 'icon' ?> <<?php echo $htag; ?>> <?php echo $this->escape($this->item->title); ?> <?php if(!empty($iconClass)) : ?> <span class="<?php echo $iconClass; ?>" aria-hidden="true"></span> <?php endif; ?> </<?php echo $htag; ?>> </div> <?php endif; ?>​

                Commentaire


                • #23
                  Envoyé par lefabdu51 Voir le message
                  Code:
                  <?php if ($params->get('show_title')) : ?> <div class="page-header"> <?php $jcfields = $displayData->jcfields; foreach($jcfields as $jcfield) { $jcfields[$jcfield->name] = $jcfield; } $iconClass = isset($jcfields['icon']) ? implode(',', $jcfields['icon']->rawvalue) : ''; // Handle potential missing 'icon' ?> <<?php echo $htag; ?>> <?php echo $this->escape($this->item->title); ?> <?php if(!empty($iconClass)) : ?> <span class="<?php echo $iconClass; ?>" aria-hidden="true"></span> <?php endif; ?> </<?php echo $htag; ?>> </div> <?php endif; ?>​
                  Encore un grand MERCI lefabdu51 ! Toujours la même erreur 0 en résultat.
                  Je suis sur le point d'abandonner pour les articles en entier…

                  En tous cas, merci mille fois pour toutes ces tentatives !!!!
                  Dernière édition par elchecmoi à 17/02/2025, 11h05

                  Commentaire


                  • #24
                    À propos des listes d'éléments taggés où j'aimerais également faire apparaitre l'icône dans les titres d'articles, voilà un exemple de page :
                    https://moultipass.passagers-du-mond...ques/usa?types[0]=1

                    Ces pages sont appelées à partir de liens de menus d'éléments taggés.

                    Commentaire


                    • #25
                      Le code a utiliser pour la vue d'un article. Il faut que je trouves comment valider la valeur choisie et j ai du ruser pour l'avoir...
                      Comme les objets sont protégés, j ai du passer par un registre de données pour y avoir accès.
                      J en refournirais une meilleur version.
                      Code:
                        <?php
                              $jcfields = FieldsHelper::getFields('com_content.article', $this->item, true);
                              foreach($jcfields as $jcfield) {
                                $registry = new Registry();
                              $data = $registry->loadObject($jcfield);
                          
                      $iconClass = $data['rawvalue'][0];
                      }
                          ?>
                                  <?php echo $this->escape($this->item->title); ?>
                                <span class="<?php echo $iconClass; ?>" aria-hidden="true"></span>​
                      Il y a deux choix possible comme indiqué dans le tuto . soit aucune icone, soit une icone video.
                      Si on le laisse vide rien ne s affiche.
                      On peux ajouter un troisieme choix sans soucis.

                      On peut ajouter une boucle qui verifies l'id du champ et agir en conséquence.
                      Dernière édition par lefabdu51 à 17/02/2025, 19h39

                      Commentaire


                      • #26
                        Envoyé par lefabdu51 Voir le message
                        Le code a utiliser pour la vue d'un article. Il faut que je trouves comment valider la valeur choisie et j ai du ruser pour l'avoir...
                        Comme les objets sont protégés, j ai du passer par un registre de données pour y avoir accès.
                        J en refournirais une meilleur version.
                        Code:
                        <?php
                        $jcfields = FieldsHelper::getFields('com_content.article', $this->item, true);
                        foreach($jcfields as $jcfield) {
                        $registry = new Registry();
                        $data = $registry->loadObject($jcfield);
                        //les données sont dans le registre data options
                        $iconClass = $registry['fieldparams']->data->options->options0->value;
                        }
                        ?>
                        
                        <?php echo $this->escape($this->item->title); ?>
                        <span class="<?php echo $iconClass; ?>" aria-hidden="true"></span>​
                        Ohhhhh bravo bravo bravo… bravo; ça fonctionne sur les articles !!! Tu es trop fort

                        Commentaire


                        • #27
                          Nous approchons du but escompté, lefabdu51, encore bravo tu es trop fort car cela me semblait être une tâche bien ardue, et bien au-delà de mes compétences !!

                          Maintenant, as-tu une idée de comment on pourrait également faire apparaître ces icones de vidéo sur les titres des listes d'articles d'éléments taggés ?
                          Un exemple : https://moultipass.passagers-du-mond...eriques/alaska

                          Mais là je dois m'absenter et je crois que tu mérites une bonne pause car sacrée bataille, bluffée, encore bravo !!

                          Commentaire


                          • #28
                            Plutôt que de faire un override, ce que j'ai déjà fait dans pareil cas c'est p.ex. taper [[icon-video]] là où je veux l'icône... et avec une extension comme ReReplacer je remplace à la volée par le code html fontawesome ou autre de l'icône voulue...
                            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


                            • #29
                              Envoyé par woluweb Voir le message
                              Plutôt que de faire un override, ce que j'ai déjà fait dans pareil cas c'est p.ex. taper [[icon-video]] là où je veux l'icône... et avec une extension comme ReReplacer je remplace à la volée par le code html fontawesome ou autre de l'icône voulue...
                              Et cela fonctionnerait aussi dans les titres ?
                              Car le problème est que le html est écrasé dans les titres, et ça j'ai l'impression que c'est nouveau ou est-ce parce que j'utilisais des page-builder ????
                              Je ne connaissais pas cette extension de RegularLabs, merci pour l'info Woluweb !

                              Dans tous les cas, il me semble que l'override est la solution la plus simple pour la personne qui mettra à jour le site, non ?
                              Dernière édition par elchecmoi à 18/02/2025, 12h10

                              Commentaire


                              • #30
                                Mon code finalisé pour la vue d'un article:
                                Le fichier a été crée en utilisant une susbtitution du com_content_article et se nomme html > com_content > article > default.php
                                juste en dessous de la ligne
                                Code:
                                defined('_JEXEC') or die;
                                j'ai ajouté les appels aux librairies dont j ai besoin:
                                Code:
                                use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;
                                use Joomla\Registry\Registry;
                                A la ligne 57 juste en dessous de
                                Code:
                                <<?php echo $htag; ?>>
                                J'ai ajouté le code ci dessous qui permet de récupérer les champs personnalisés et qui permet de mettre la valeur dans la variable $iconClass.
                                J'ai fait une boucle if qui verifies le nom du champ pour éviter la pollution de $iconClass par des valeurs parasite en cas de champ supplémentaires et qui est invisible si aucune icone est choisie.
                                la balise span n apparait pas.
                                Code:
                                   <?php
                                        $jcfields = FieldsHelper::getFields('com_content.article', $this->item, true);
                                        foreach($jcfields as $jcfield) {
                                          $registry = new Registry();
                                        $data = $registry->loadObject($jcfield);
                                if (($data['name']) == 'icon') {
                                $iconClass = $data['rawvalue'][0];
                                }
                                }
                                    ?>
                                ensuite j'ai utilisé la variable juste en dessous de la ligne 67 qui affiche le titre
                                ligne 67:
                                Code:
                                            <?php echo $this->escape($this->item->title);
                                L'affichage de l'icone se fait via ce code:
                                Code:
                                 if (isset($iconClass) && !empty($iconClass)) { ?>
                                          <span class="<?php echo $iconClass; ?>" aria-hidden="true"></span>
                                php } ?>
                                Ce qui donnes le code complet ci dessous:
                                Code:
                                       <<?php echo $htag; ?>>
                                                   <?php
                                        $jcfields = FieldsHelper::getFields('com_content.article', $this->item, true);
                                        foreach($jcfields as $jcfield) {
                                          $registry = new Registry();
                                        $data = $registry->loadObject($jcfield);
                                if (($data['name']) == 'icon') {
                                $iconClass = $data['rawvalue'][0];
                                }
                                }
                                    ?>
                                            <?php echo $this->escape($this->item->title); ?>
                                      <?php    if (isset($iconClass) && !empty($iconClass)) { ?>
                                          <span class="<?php echo $iconClass; ?>" aria-hidden="true"></span>
                                <?php } ?>
                                        </<?php echo $htag; ?>>

                                Ce code peut être étendu asseaz facilement:
                                au lieu d'une icone on peut choisir une image en créant un champ supplementaire et en mettant l'action voulue dans une boucle if verifiant le nom et en modifiant le code html souhaité.
                                elchecmoi aime ceci.

                                Commentaire

                                Annonce

                                Réduire
                                Aucune annonce pour le moment.

                                Partenaire de l'association

                                Réduire

                                Hébergeur Web PlanetHoster
                                Travaille ...
                                X