Substitutions template Protostar Joomla 3.9.16

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

  • Substitutions template Protostar Joomla 3.9.16

    Bonjour,
    Sur Joomla 3.9.16 et avec le template "protostar" j'essaie de créer une substitution sur "/html/com_content/article/Recettes.php" . Je suis un tuto de "https://slides.woluweb.be/cf/cf.reveal#/2/51" et pour personnaliser le rendu de l'article je modifie le fichier dans com_content/article/default.php que j'ai renommé Recettes.php avec les infos suivantes :

    "Dans ce fichier nous cherchons la ligne

    <?php echo $this->item->text; ?>,

    que nous remplaçons par

    <div class="row-fluid">
    <div class="span4"></div>
    <div class="span8">
    <?php echo $this->item->text; ?>
    </div>
    </div>
    "
    Je ne connais pas la version de Bootstrap de protostar installé, alors j'ai essayé avec span4 et col-md-4 et col-4, mais rie ne fonctionne.
    Alors j'en appel à vous pour me sortir de cette impasse.
    Merci d'avance

  • #2
    Bonjour,

    Quelque soit l'article, le fichier qui sera appelé est le fichier default.php. Le fait de renommer le fichier default.php en recettes.php ou tout autre chose ne fera rien.

    Si vous souhaitez qu'un article ait son propre rendu, il faudra dupliquer votre template et créer une surcharge sur le fichier default.php dans html/com_content/article. Ensuite, au niveau du menu appelant cet article, il faudra lui mettre la copie de votre template (qui appellera le fichier default.php de votre nouvelle copie)

    Pascal
    Dernière édition par pmleconte à 21/05/2020, 17h41
    If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

    Commentaire


    • #3
      D'autre part, nous sommes en Joomla 3.9.18 depuis 21/04 et nous serons en 3.9.19 le 2 juin. Pensez à faire la mise à jour.

      Pascal
      If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

      Commentaire


      • #4
        Merci Pascal pour vos réponses.
        Je suis novice dans l'utilisation de Joomla et je ne demande qu'à comprendre mes actions et c'est pour cela que je manipule le CMS avec des tutos.
        Pour ce qui est du fichier "default.php" de Protostar, j'ai bien suivi la manipulation nécessaire à la substitution ; j'ai modifié le fichier substitué et je l'ai renommé. Je peux utiliser le fichier renommé "Recettes.php" dans un article car dans les paramètres des articles on a la possibilité de choisir "par défaut ou Recettes" de Protostar.
        La vraie question que je me pose est de savoir pourquoi mes modifications apportées ne sont pas visibles à l'écran ? lors de consultation sur internet, on parle de version de Bootstrap dans Protostar ; peut-être une piste ? comment connaître cette version de Bootstrap ?
        Je tourne en rond et je persiste car je n'aime pas ne pas comprendre.
        Merci pour les réponses
        A vous lire

        Commentaire


        • #5
          Pascal,
          J'ai dupliqué Protostar et je l'ai affecté. La substitution ne se fait que sur le template d'origine et pas sur le template dupliqué qui n'apparaît pas dans la liste des templates mais uniquement dans les styles.

          Commentaire


          • #6
            Bonjour,

            Il semblerait donc que c'est le style qui a été dupliqué et pas le template.
            "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
            MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

            Commentaire


            • #7
              Hello,
              Il ne me semble pas possible de dupliquer le template. Enfin moi je ne sais pas et si c'est vraiment ce qu'il faut pour me sortir de cette impasse ?

              Commentaire


              • #8
                Tu vas dans l'onglet "templates" où tu vois les différents templates, et non les styles, et dans cette page, en allant à la gestion des détails et fichiers, tu peux dupliquer en changeant le nom du template, ce qui protégera tes modifications.
                Depuis cette page aussi, une fois sur la copie du template, en passant à la gestion des fichiers, tu pourras créer les substitutions des fichiers comme celui qui t'intéresse, ainsi que l'a expliqué Pascal, et appliquer les conseils du site de Woluweb.
                "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                Commentaire


                • #9
                  Merci Robert de m'avoir aidé à trouver la solution pour copier le template et non le style. Le fait d'avoir dupliqué le template et renommé me mettra à l'abri lors de la prochaine màj de Joomla.
                  En suivant le tuto de Woluweb, je n'arrive pas à mes fins en insérant le code :
                  "Dans ce fichier nous cherchons la ligne :
                  <?php echo $this->item->text; ?>,
                  que nous remplaçons par :
                  <div class="row-fluid">
                  <div class="span4"></div>
                  <div class="span8">
                  <?php echo $this->item->text; ?>
                  </div>
                  </div>
                  "
                  Dans la doc, il parle de version de Bootstrap ? Comment trouver cette version ? et remplacer span4 et 8 par col-4 et 8 ou col-md-4 et 8
                  J'ai fais toutes les possibilités et je n'ai aucun effet sur mon article.
                  Je souhaite arriver à un affichage identique à celui de Woluweb
                  Fichiers joints

                  Commentaire


                  • #10
                    @pmlecomte: la tu fait une grossière erreur le fichier recette.php correspond à une mise en page alternative.

                    Pour utiliser ce fichier, il suffit d'aller dans le lien de menu correspondant et de changer le style du template si touts les articles de cette catégorie sont des recettes... Ce mécanisme est tout sauf récent. il date de J 2.5. https://docs.joomla.org/J2.5:Layout_...s_in_Joomla/fr

                    La surcharge permet de modifier le comportement par défaut,c 'est different car ce n est pas forcement souhaitable que toutes les catégories d articles soient des recettes.

                    tu peux souhaiter que les autres catégories d'articles aient la mise en page par défaut, et d'autre encore une troisieme mise en page....
                    tu peux en crée autant que tu en as besoin. Il suffit d'un nom different à chaque fois.

                    Les fichier default.php permet de modifier le comportement par défaut de joomla, en renommant ce fichier, tu peux choisir ou l'appliquer. C'est le même principe pour les modules.
                    Dans certains, tu as deux mise en page, une nommée liste et une nommée blog.....

                    Pour un article dans une catégorie, tu peux aussi aller directement dans les paramètres d'un article pour choisir ta mise en page altèrnative. L'onglet est l'onglet paramètres et le paramètre est le premier "type de mie en page". Il suffit de choisir recette et hop c'est ce fichier qui est utilisé à la place du fichier default.

                    PS: tu peux aussi la créer en copiant sous un autre nom le fichiers dans le dossier /component/com_content/tmpl/article. La la mise en page apparaitra comme une mise en page du composant.
                    Cela fonctionnes aussi Mais si la communauté sort un fichier du meme nom, le tien sauteras direct.

                    Si ce mécanisme n'existait pas, ce serait impossible de modifier la mise en page d'une catégorie d'éléments spécifiquement...

                    Tu peux en créer une et changer directement son nom. Tu choisit ou l'appliquer et pour le reste des catégories , ce sera le contenu du dossier tmpl du composant/module qui sera utilisé.

                    https://magazine.joomla.org/all-issu...es-and-modules
                    https://cinnk.com/joomla/3/tutoriels/utiliser-des-types-de-mise-en-page-alternatives-layouts-pour-personnaliser-vos-articles-et-modules-joomla


                    Protostar est sur une version 2.3 de bootstrap.
                    Donc c est ce code qui est bon
                    Code:
                    <div class="row-fluid">
                    <div class="span4"></div>
                    <div class="span8">
                    <?php echo $this->item->text; ?>
                    </div>
                    </div>
                    et le fichier default.php doit contenir le code ci dessous: La ligne indiquée est la ligne 102.

                    Une question, tu met quoi dans ton span4 ?
                    Il est juste la pour décaler ton texte ou tu veux y mettre qqchose?

                    Pour info:

                    Pas besoin de copier le template si tu ne touches pas aux fichiers déja présent (autres que ceux du dossier html) et que tu utilise un fichier user.js, user.css et que tu crées tes substitutions avec le gestionnaire de Joomla.
                    Ces fichiers ne sont pas modifiés lors des mises à jour du template.
                    La copie est à faire si tu modifies le fichier index.php, component.php, error.php par exemple. Ceux ci peuvent être mis à jour par la communauté.
                    Dernière édition par lefabdu51 à 23/05/2020, 22h11

                    Commentaire


                    • #11
                      Code:
                      <?php
                      /**
                      * @package Joomla.Site
                      * @subpackage com_content
                      *
                      * [USER="64686"]Copyright[/USER] Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.
                      * @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;
                      
                      // Create shortcuts to some parameters.
                      $params = $this->item->params;
                      $images = json_decode($this->item->images);
                      $urls = json_decode($this->item->urls);
                      $canEdit = $params->get('access-edit');
                      $user = Factory::getUser();
                      $info = $params->get('info_block_position', 0);
                      
                      // Check if associations are implemented. If they are, define the parameter.
                      $assocParam = (Associations::isEnabled() && $params->get('show_associations'));
                      ?>
                      <div class="com-content-article item-page<?php echo $this->pageclass_sfx; ?>" itemscope itemtype="https://schema.org/Article">
                      <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->pagination && !$this->item->paginationposition && $this->item->paginationrelative)
                      {
                      echo $this->item->pagination;
                      }
                      ?>
                      
                      <?php // Todo Not that elegant would be nice to group the params ?>
                      <?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">
                      <h2 itemprop="headline">
                      <?php echo $this->escape($this->item->title); ?>
                      </h2>
                      <?php if ($this->item->condition == ContentComponent::CONDITION_UNPUBLISHED) : ?>
                      <span class="badge badge-warning"><?php echo Text::_('JUNPUBLISHED'); ?></span>
                      <?php endif; ?>
                      <?php if (strtotime($this->item->publish_up) > strtotime(Factory::getDate())) : ?>
                      <span class="badge badge-warning"><?php echo Text::_('JNOTPUBLISHEDYET'); ?></span>
                      <?php endif; ?>
                      <?php if (!is_null($this->item->publish_down) && (strtotime($this->item->publish_down) < strtotime(Factory::getDate()))) : ?>
                      <span class="badge badge-warning"><?php echo Text::_('JEXPIRED'); ?></span>
                      <?php endif; ?>
                      </div>
                      <?php endif; ?>
                      <?php if ($canEdit) : ?>
                      <?php echo LayoutHelper::render('joomla.content.icons', array('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', array('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 (isset($urls) && ((!empty($urls->urls_position) && ($urls->urls_position == '0')) || ($params->get('urls_position') == '0' && empty($urls->urls_position)))
                      || (empty($urls->urls_position) && (!$params->get('urls_position')))) : ?>
                      <?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->pagination && !$this->item->paginationposition && !$this->item->paginationrelative) :
                      echo $this->item->pagination;
                      endif;
                      ?>
                      <?php if (isset ($this->item->toc)) :
                      echo $this->item->toc;
                      endif; ?>
                      <div itemprop="articleBody" class="com-content-article__body">
                      <div class="row-fluid">
                      <div class="span4"></div>
                      <div class="span8">
                      <?php echo $this->item->text; ?>
                      </div>
                      </div>
                      </div>
                      
                      <?php if ($info == 1 || $info == 2) : ?>
                      <?php if ($useDefList) : ?>
                      <?php echo LayoutHelper::render('joomla.content.info_block', array('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->pagination && $this->item->paginationposition && !$this->item->paginationrelative) :
                      echo $this->item->pagination;
                      ?>
                      <?php endif; ?>
                      <?php if (isset($urls) && ((!empty($urls->urls_position) && ($urls->urls_position == '1')) || ($params->get('urls_position') == '1'))) : ?>
                      <?php echo $this->loadTemplate('links'); ?>
                      <?php endif; ?>
                      <?php // Optional teaser intro text for guests ?>
                      <?php elseif ($params->get('show_noauth') == true && $user->get('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))); ?>
                      <p class="com-content-article__readmore readmore">
                      <a href="<?php echo $link; ?>" class="register">
                      <?php $attribs = json_decode($this->item->attribs); ?>
                      <?php
                      if ($attribs->alternative_readmore == null) :
                      echo Text::_('COM_CONTENT_REGISTER_TO_READ_MORE');
                      elseif ($readmore = $attribs->alternative_readmore) :
                      echo $readmore;
                      if ($params->get('show_readmore_title', 0) != 0) :
                      echo HTMLHelper::_('string.truncate', $this->item->title, $params->get('readmore_limit'));
                      endif;
                      elseif ($params->get('show_readmore_title', 0) == 0) :
                      echo Text::sprintf('COM_CONTENT_READ_MORE_TITLE');
                      else :
                      echo Text::_('COM_CONTENT_READ_MORE');
                      echo HTMLHelper::_('string.truncate', $this->item->title, $params->get('readmore_limit'));
                      endif; ?>
                      </a>
                      </p>
                      <?php endif; ?>
                      <?php endif; ?>
                      <?php
                      if (!empty($this->item->pagination) && $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


                      • #12
                        pour confirmer:

                        Ce lien te montres touts les éléments ou cette technique peut s'appliquer (quasiment partout en fait)....
                        Tu peux même les utiliser directement sous formes d 'éléments de menu supplémentaires.
                        En choisissant ces liens de menus, tu as directement la mise en page alternative qui s applique.
                        Et tu peux aussi créer des paramètres supplémentaires que tu peux utiliser directement dans ta mise en page altèrnative.
                        C'est tres simple, voir trop......

                        Le fichier ne doit pas avoir d'underscores dans le nom.
                        Et il n'est utilisé que si tu modifies le paramètre du module /composant ou lien de menu.
                        Si tu ne le spécifies pas, alors c est le fichier default.php qui est utilisé
                        Certains plugins ont aussi un dossier tmpl et peuvent aussi être surchargés .....
                        Dernière édition par lefabdu51 à 23/05/2020, 21h54

                        Commentaire


                        • #13
                          Bonjour lefabdu51,

                          Merci beaucoup pour la formation à la surcharge. Maintenant j'ai bien pigé le principe et c'est ce que j'avais réalisé au départ, mais je n'arrivais pas à retrouvé le rendu décrit dans le tuto de Woluweb.
                          Dans les paramètres des articles, je spécifie bien l'option "recettes" et ce pour tous les articles, car je créé un sous/domaine pour un livre de recettes que j'essaie de développer mais avec de grosses difficultés, surtout que je suis un autodidacte de Joomla.

                          Dans le span4 y figure le texte des ingrédients

                          <div itemprop="articleBody" class="com-content-article__body">
                          <div class="row-fluid">
                          <div class="span4">
                          <?php if (isset($this->item->jcfields[5])): ?>
                          <?php echo FieldsHelper::render('com_content.article', 'field.render', array('field' => $this->item->jcfields[5])); ?>
                          <?php endif; ?>
                          <?php if (isset($this->item->jcfields[7])): ?>
                          <?php echo FieldsHelper::render('com_content.article', 'field.render', array('field' => $this->item->jcfields[7])); ?>
                          <?php endif; ?>
                          </div>
                          <div class="col-md-8">
                          <?php echo $this->item->text; ?>
                          </div>
                          </div>
                          </div>

                          Mais je n'ai toujours pas cette modification à l'écran.

                          Comme je suis au début de la conception, mon souhait pour l'affichage de la recette sur une page est le suivant :

                          - Titre de la recette
                          - Détails (écrit par, catégorie, publication...)
                          - La photo de la recette (format fixe 100x100) - liste des champs (temps préparation, cuisson ...) 2 colonnes
                          - Présentation de la recette (texte)
                          - Liste des ingrédients - Recette (descriptif et déroulement de la préparation) 2 colonnes
                          - Source (url de la recette)

                          Merci encore pour votre aide précieuse.

                          Commentaire


                          • #14
                            Ceci n'est pas bon
                            <div class="col-md-8"> cela doit etre <div class="span8">

                            De plus, a la lecture de ton besoin, j ai pensé à une autre manière de faire qui sera surement plus simple pour toi.
                            Mais la j'ai pas encore pris le temps de tester.

                            Si j'ai bien compris, les champs personnalisés contiennent les ingrédients ?
                            Tuas un lien vers la page en cours de construction ? ou une capture du résultat actuel ?

                            Commentaire


                            • #15
                              bon, Cela ne marche que pour les liens de menu blog ou liste d'une catégorie, et pas pour les sous catégories.Donc j ai recrée un lien de menu pour chaque sous catégorie en y assignant la mise en page Recettes et la cela marches. Maintenant, ce n'est quasi plus que des CSS.
                              Encore plus con, pour une mise en page altèrnatives, les majuscules sont aussi à proscrire. J ai recrée une mise en page recette, et la cela a marché de suite.

                              voila ou j'en suis :
                              Cliquez sur l'image pour l'afficher en taille normale  Nom : fiche-recettes.png  Affichages : 0  Taille : 171,8 Ko  ID : 2017992
                              Fichiers joints
                              Dernière édition par lefabdu51 à 02/06/2020, 19h11

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X