test conditionnel catégorie d'articles

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

  • [RÉGLÉ] test conditionnel catégorie d'articles

    Bonjour,
    J'aurai besoin pour terminer mon site assos de la clause X pour afficher le contenu d'un article joomla avec des custom fields uniquement si l'article fait partie de la catégorie X
    Il s'agit d'une surcharge d'un fichier se trouvant sous "templates/shaper_helixultimate/html/com_content/article"
    Code PHP:
     // if (X ?) {
     
    $citation3='[blockquote"]' .$this->item->jcfields[18]->value .'[/blockquote]'; echo JHtml::_('content.prepare'$citation3);

    Merci
    Faciliter l'adoption du meilleur du Libre auprès du grand public https://clibre.eu/ - Connaissez-vous des communicants ... pour promouvoir joomla ? https://forum.joomla.fr/forum/th%C3%...mouvoir-joomla

  • #2
    Salut Hervé,
    il ne faut pas garder le nom de fichier d'origine (pcq alors c'est un override et ça remplace la vue pour TOUS les articles) mais il faut donner un autre nom au même fichier (c'est ce qu'on appelle un Alternate Layout)... et alors on peut choisir ce layout dans l'élément de menu (Articles > Blog p ex) qui appelle cette catégorie d'articles
    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


    • #3
      Salut,
      Envoyé par woluweb Voir le message
      il ne faut pas garder le nom de fichier d'origine (pcq alors c'est un override et ça remplace la vue pour TOUS les articles) mais il faut donner un autre nom au même fichier (c'est ce qu'on appelle un Alternate Layout)... et alors on peut choisir ce layout dans l'élément de menu (Articles > Blog p ex) qui appelle cette catégorie d'articles
      Désolé c'est moi qui ne comprend plus là
      Dans mon message, je n'ai pas donné le nom du fichier qui a un autre nom! je n'ai pas non plus donner tout le code pour juste faire ce test sur l'affichage d'un champ. S itu penses à autre chose, pourrais-tu le reformuler ?
      @+
      Dernière édition par herve à 16/06/2019, 22h10
      Faciliter l'adoption du meilleur du Libre auprès du grand public https://clibre.eu/ - Connaissez-vous des communicants ... pour promouvoir joomla ? https://forum.joomla.fr/forum/th%C3%...mouvoir-joomla

      Commentaire


      • #4
        Bonjour,
        Bon je pense que j'ai trouvé pour Joomla 3, une méthode de remplacement à l'ancienne méthode ($catid = JRequest::getInt('catid'). J'espère que cela ne sera pas plus difficile avec Joomla 4
        Bonne journée
        Code PHP:
        $app Jfactory::getApplication();
            
        $input=$app->input;
            if (
        $input->getCmd('option')=='com_content' && $input->getCmd('view')=='article' ){
                
        $cmodel JModelLegacy::getInstance('Article''ContentModel');
                
        $catid $cmodel->getItem($app->input->get('id'))->catid;
            }
            if (
        $catid == ) {
                  
        $citation3='[blockquote"]' .$this->item->jcfields[18]->value .'[/blockquote]'; echo JHtml::_('content.prepare'$citation3);
              } 
        Faciliter l'adoption du meilleur du Libre auprès du grand public https://clibre.eu/ - Connaissez-vous des communicants ... pour promouvoir joomla ? https://forum.joomla.fr/forum/th%C3%...mouvoir-joomla

        Commentaire


        • #5
          Envoyé par herve Voir le message
          Bonjour,
          Bon je pense que j'ai trouvé pour Joomla 3, une méthode de remplacement à l'ancienne méthode ($catid = JRequest::getInt('catid'). J'espère que cela ne sera pas plus difficile avec Joomla 4
          ...
          Non le principe et les methodes getitem ne devraient pas changer sous J4.

          Toutefois je suis assez surpris que tu doives aller à la "pèche" du catid en appelant le model.

          Tu es dans quelle vue pour faire ton affichage ?
          ...car normalement si tu es dans la vue "article", le getItem du model a déjà été appelé en ligne 42 par cette méthode de la vue :
          Code PHP:
          $this->item  $this->get('Item'); 
          et comme tu peux le voir, le contenu stocké dans $this->item

          Donc tu devrais y avoir accès dans ton template de vue, tout simplement et sans rien faire en utilisant la propriété $this->item->catid

          Autre chose que je ne comprend pas, pourquoi gérer la condition de l'affichage ainsi (en informatique on aime pas trop traiter les cas particuliers ainsi en "dur" dans le code). Si ton custom field est limité à certaines catégories d'article, il ne devrait pas s'afficher dans les autres catégories.

          Et s'il est réservé à certains membres ou administrateurs par exemple il faut "jouer" sur le "niveau d'accès" qui gère l'affichage.
          Dernière édition par roland_d_alsace à 17/06/2019, 09h20
          A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
          Rejoignez le Joomla Users Groupe Alsace...
          roland_d_alsace va-t-il devenir roland_du_grand_est ?

          Commentaire


          • #6
            Bonjour roland
            Merci pour cette réponse encore argumentée
            Tu as compris que le dev. n'est plus trop mon point fort. Du coup je ne sais pas trop te répondre sur la vue car suite à d'autres aides ces dernière semaines, je suis parti sur une surcharge. J'ai copié le fichier initial en le renommant "templates/shaper_helixultimate/html/com_content/article"

            Je suis ensuite aller incruster mes custom fields dont je veux gérer l'affichage sous la partie
            Code PHP:
            <?php // DEBUT ARTICLE ?>

            <div class="body-blog" itemprop="articleBody">

              <div class="art-intro row">
                  <?php // bloc auteur et intro-chapo ?>
                  <div class="author col-sm-4">

                    <span class="blog-avatar">
                        <?php // le champ est obligatoire - on ne le teste donc pas ?>
                        <?php echo $this->item->jcfields[1]->value?>
                    </span>

                    <span class="blog-author">
                        <?php echo $this->item->jcfields[2]->value?>
                    </span>

                    <?php // on teste si le contenu du champ est non vide ?>
                    <?php if (!empty($this->item->jcfields[17]->value)): ?>
                      <span class="link-author">
                        <?php // on insere la rawvalue pour construire nous-meme le lien - on aura donc uniquement la valeur href ?>
                        <a href="<?php echo $this->item->jcfields[17]->rawvalue?>" rel="nofollow noopener noreferrer" target="_blank">
                          <?php // on se sert du label du champ comme support du lien ?>
                        <?php echo $this->item->jcfields[17]->label?>
                      </a>
                      </span>
                    <?php endif; ?>

                  </div>

                  <div class="chapo col-sm-8">
                    <p>
                     <?php echo $this->item->jcfields[3]->value ?>
                    </p>
                  </div>

                  <div class="chapo col-sm-8">
                    <p>
            Les catégories comprennent un mixte de champs obligatoires, champs communs et champs spécifiques .
            Il s'agit d'un blog de l'ensemble des catégories ou je mettrai en place un filtre sur le côté droit ultérieurement. j'espère que cela répond à ta question sur pourquoi un test, cela me permet d'avoir un seul fichier pour quelques tests conditionnels

            En tout les cas merci pour m'avoir permis de simplifier mon code
            Code PHP:
            if ($this->item->catid== ) {
                      
            $citation3='[blockquote"]' .$this->item->jcfields[18]->value .'[/blockquote]'; echo JHtml::_('content.prepare'$citation3);
                  } 
            Surpris que "$catid = JRequest::getInt('catid'" fonctionne. j'ai donc mal lue , je croyais que c'était déprécié.
            En espérant que ce code fonctionne aussi avec Joomla 4 qui a l'air de changer pas mal de choses aussi!
            @+
            Dernière édition par herve à 17/06/2019, 14h17
            Faciliter l'adoption du meilleur du Libre auprès du grand public https://clibre.eu/ - Connaissez-vous des communicants ... pour promouvoir joomla ? https://forum.joomla.fr/forum/th%C3%...mouvoir-joomla

            Commentaire


            • #7
              Envoyé par herve Voir le message
              .. je suis parti sur une surcharge. J'ai copié le fichier initial en le renommant "templates/shaper_helixultimate/html/com_content/article"
              Oui c'est très bien ainsi, cela te permet d’éviter que ton template d'affichage soit perdu lors des maj de Joomla

              Envoyé par herve Voir le message
              Surpris que "$catid = JRequest::getInt('catid'" fonctionne. j'ai donc mal lue , je croyais que c'était déprécié.
              En espérant que ce code fonctionne aussi avec Joomla 4 qui a l'air de changer pas mal de choses aussi!
              @+
              Oui ça c'est déprécié, c'est pour chercher les variables soit dans le formulaire, soit dans l'url.
              Maintenant il faut utiliser les méthodes de Jinput.
              Mais ce n'est pas l'objet ici.

              Donc comme tu es dans le template de la vue article (ovveridé ou non), toutes les informations liées à l'article en cours sont déjà à ta disposition dans la classe $this->item.

              Ceci car la vue a déjà appelée la méthode getItem du model ceci avant de chercher le template d'affichage à utiliser (donc ovveridé ou non).
              Pas besoin de rechercher ces informations une 2ème fois (et ce n'est pas le boulot à faire par un template d'affichage dans le cadre d'une architecture de code MVC utilisée par Joomla qui sépare l'affichage de la recherche ou du calcul des informations).

              Si tu veux t'en convaincre fait un
              Code PHP:
              var_dump($this->item); 
              quelque part dans ton code ci-dessus et tu verras tout ce que tu as à ta disposition en $this->item->xxxx
              Dernière édition par roland_d_alsace à 17/06/2019, 14h11
              A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
              Rejoignez le Joomla Users Groupe Alsace...
              roland_d_alsace va-t-il devenir roland_du_grand_est ?

              Commentaire

              Annonce

              Réduire
              Aucune annonce pour le moment.

              Partenaire de l'association

              Réduire

              Hébergeur Web PlanetHoster
              Travaille ...
              X