Afficher l'option des différentes mise en page des articles en FRONT END

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

  • [RÉGLÉ] Afficher l'option des différentes mise en page des articles en FRONT END

    Bonjour,

    j'utilise différentes mise en page pour mes articles, mais quand je suis amené à modifier un article depuis le FRONT, celui ci revient automatiquement avec sa mise en page par défaut, ce qui est problématique.

    comment faire pour que la mise en page sélectionnée pour cet article reste en cas de modification depuis le front ?

    je vous remercie d'avance

    Benjamin

  • #2
    bsr
    vous pouvez expliquer ce que vous voulez dire exactement par "j'utilise différentes mise en page pour mes 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
      Bonjour,
      merci pour votre réponse

      dans l'interface d'administration du site, dans "Contenus / Articles", quand vous cliquez sur les paramètres des articles, onglet "Articles", il y a une option avec un menu déroulant qui s'appelle "Mise en page"

      Cliquez sur l'image pour l'afficher en taille normale

Nom : 1.png 
Affichages : 81 
Taille : 8,6 Ko 
ID : 2016537

      Cliquez sur l'image pour l'afficher en taille normale

Nom : 2.png 
Affichages : 61 
Taille : 10,9 Ko 
ID : 2016538

      je me sert de cette option pour créer plusieurs mises en page pour des articles différents, car vous pouvez ensuite retrouver cette option en cliquant sur un article, onglet "Paramètres", puis "Type de mise en page", pour retrouver une mise en page personnalisée que l'on peut créer dans : /templates/nom_du_template/html/com_content/article

      Cliquez sur l'image pour l'afficher en taille normale

Nom : 3.png 
Affichages : 61 
Taille : 17,7 Ko 
ID : 2016539

      Le problème étant que cette option n'est pas visible quand l'on modifie l'article directement depuis le site (FRONT) et malheureusement si l'on modifie l'article, cette option revient par défaut, ce qui est problématique car il faudrait à chaque fois retourner sur l'interface d'administration pour remettre ce paramètre dans l'article...

      comment faire pour conserver ce paramètre car 99% de mes articles seront modifiés depuis le FRONT et non le BACK ?

      je vous remercie pour votre aide précieuse

      Benjamin
      Fichiers joints

      Commentaire


      • #4
        Hello.

        J'ai un peu regardé dans le code.

        Ce champ n'est effectivement pas prévu du tout en front.

        le champ "attribs" de #__content où est sotcké en json "article_layout" n'est même pas rendu sous forme de tableau par le model.

        Dans l'override du template "edit" de la vue "article", il faut donc le décoder json vers array, l'afficher en html (car il n'est pas prévu dans le xml de la form, et on ne peut pas overrider un xml de form, sauf à utiliser un plugin).

        Mais je n'ai pas poussé plus loin, je ne suis pas sur que le model l'enregistrerait dans la DB au retour du formulaire.

        A mon avis c'est jouable, mais pas tout tout simple quand même.

        Il faut que j'approfondisse encore un peu...


        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


        • #5
          Bon après avoir approfondi, il n'est pas possible de rajouter des rubriques dans le xml du formulaire au niveau de la vue (ou de l'override de son template), car Joomla est hyper sécurisé.

          Les rubriques reçues en retour du formulaire html sont comparées avec les rubriques définies dans le xml du formulaire source généré par la méthode loadForm de FormModel.
          On ne peut donc pas jouer sur l'overide du layout pour rajouter des champs si l'on utilise JForm.

          Pour régler ton problème, il faut donc installer un plugin qui permet de rajouter des définitions au formulaire natif.

          Malheureusement je n’ai pas trouvé un plugin d’override de xml qui fonctionnait, l’ordre des dossiers où l'on cherche le fichier xml faisant que l’on charge toujours le formulaire natif de com_content.


          Il faut donc se le faire ce plugin !


          1) En voici le contenu :

          Code PHP:
          <?php
          /**
          * @version 1.0
          */

          // no direct access
          defined('_JEXEC') or die('Restricted index access');

          use 
          Joomla\Registry\Registry;
          use 
          Joomla\CMS\Factory as JFactory;
          use 
          Joomla\CMS\Plugin\CMSPlugin as JPlugin;
          use 
          Joomla\CMS\Form\Form as JForm;

          class 
          plgSystemSite_form_override extends JPlugin {

          public function 
          onContentPrepareForm(JForm $form$data){
          $app JFactory::getApplication();

          if (!
          $app->isClient('site')){
          return;
          }
          // Check if the field form is calling us
          if (strpos($form->getName(), 'com_content.article') !== 0)
          {
          return;
          }
          $file JPATH_SITE.'/templates/'.$app->getTemplate().'/forms/com_content/article.adds.xml';
          if(!
          file_exists($file)) return;
          $form->loadFile($file); // charge la descriptions de champs suppelmentaires en /template/montemplate/html/com_content/form/article.adds.xml
          if(!is_array($data->attribs)){
          $registry = new Registry($data->attribs);
          $data->attribs $registry->toArray();
          }

          return;
          }
          }
          2) créer un fichier xml en /templates/ton_template/forms/com_contents/article.adds.xml avec ce contenu :

          Code:
          [FONT=Calibri][FONT=Consolas][COLOR=teal]<?[/COLOR][/FONT][FONT=Consolas][COLOR=#3f7f7f]xml[/COLOR][/FONT][FONT=Consolas] [COLOR=#7f007f]version[/COLOR][COLOR=black]=[/COLOR][I][COLOR=#2a00ff]"1.0"[/COLOR][/I] [COLOR=#7f007f]encoding[/COLOR][COLOR=black]=[/COLOR][I][COLOR=#2a00ff]"utf-8"[/COLOR][/I][COLOR=teal]?>[/COLOR][/FONT][/FONT]
          [FONT=Calibri][FONT=Consolas][COLOR=teal]<[/COLOR][/FONT][FONT=Consolas][COLOR=#3f7f7f]form[/COLOR][/FONT][FONT=Consolas][COLOR=teal]>[/COLOR][/FONT][/FONT]
          [FONT=Calibri][FONT=Consolas][COLOR=teal]<[/COLOR][/FONT][FONT=Consolas][COLOR=#3f7f7f]fields[/COLOR][/FONT][FONT=Consolas] [COLOR=#7f007f]name[/COLOR][COLOR=black]=[/COLOR][I][COLOR=#2a00ff]"attribs"[/COLOR][/I] [COLOR=#7f007f]label[/COLOR][COLOR=black]=[/COLOR][I][COLOR=#2a00ff]"COM_CONTENT_ATTRIBS_FIELDSET_LABEL"[/COLOR][/I][COLOR=teal]>[/COLOR][/FONT][/FONT]
          [FONT=Calibri][FONT=Consolas][COLOR=teal]<[/COLOR][/FONT][FONT=Consolas][COLOR=#3f7f7f]fieldset[/COLOR][/FONT][FONT=Consolas] [COLOR=#7f007f]name[/COLOR][COLOR=black]=[/COLOR][I][COLOR=#2a00ff]"basic"[/COLOR][/I] [COLOR=#7f007f]label[/COLOR][COLOR=black]=[/COLOR][I][COLOR=#2a00ff]"COM_CONTENT_ATTRIBS_FIELDSET_LABEL"[/COLOR][/I][COLOR=teal]>[/COLOR][/FONT][/FONT]
          
          [FONT=Calibri][FONT=Consolas][COLOR=teal]<[/COLOR][/FONT][FONT=Consolas][COLOR=#3f7f7f]field[/COLOR][/FONT][/FONT]
          [FONT=Calibri][FONT=Consolas][COLOR=#7f007f]name[/COLOR][COLOR=black]=[/COLOR][I][COLOR=#2a00ff]"article_layout"[/COLOR][/I] [/FONT][/FONT]
          [FONT=Calibri][FONT=Consolas][COLOR=#7f007f]type[/COLOR][COLOR=black]=[/COLOR][I][COLOR=#2a00ff]"componentlayout"[/COLOR][/I][/FONT][/FONT]
          [FONT=Calibri][FONT=Consolas][COLOR=#7f007f]label[/COLOR][COLOR=black]=[/COLOR][I][COLOR=#2a00ff]"JFIELD_ALT_LAYOUT_LABEL"[/COLOR][/I][/FONT][/FONT]
          [FONT=Calibri][FONT=Consolas][COLOR=#7f007f]description[/COLOR][COLOR=black]=[/COLOR][I][COLOR=#2a00ff]"JFIELD_ALT_COMPONENT_LAYOUT_DESC"[/COLOR][/I][/FONT][/FONT]
          [FONT=Calibri][FONT=Consolas][COLOR=#7f007f]useglobal[/COLOR][COLOR=black]=[/COLOR][I][COLOR=#2a00ff]"true"[/COLOR][/I][/FONT][/FONT]
          [FONT=Calibri][FONT=Consolas][COLOR=#7f007f]extension[/COLOR][COLOR=black]=[/COLOR][I][COLOR=#2a00ff]"com_content"[/COLOR][/I] [/FONT][/FONT]
          [FONT=Calibri][FONT=Consolas][COLOR=#7f007f]view[/COLOR][COLOR=black]=[/COLOR][I][COLOR=#2a00ff]"article"[/COLOR][/I][/FONT][/FONT]
          [FONT=Calibri][FONT=Consolas][COLOR=teal]/>[/COLOR][/FONT][/FONT]
          [FONT=Calibri][FONT=Consolas][COLOR=teal]</[/COLOR][/FONT][FONT=Consolas][COLOR=#3f7f7f]fieldset[/COLOR][/FONT][FONT=Consolas][COLOR=teal]>[/COLOR][/FONT][/FONT]
          [FONT=Calibri][FONT=Consolas][COLOR=teal]</[/COLOR][/FONT][FONT=Consolas][COLOR=#3f7f7f]fields[/COLOR][/FONT][FONT=Consolas][COLOR=teal]>[/COLOR][/FONT][/FONT]
          [FONT=Calibri][FONT=Consolas][COLOR=teal]</[/COLOR][/FONT][FONT=Consolas][COLOR=#3f7f7f]form[/COLOR][/FONT][FONT=Consolas][COLOR=teal]>[/COLOR][/FONT][/FONT]
          3) créer un override de template « edit » de la vue « form » (front) : copier /component/com_content/view/form/tmpl/edit.php en /templates/ton_template /html/com_content/form/edit.php

          4) éditer ce fichier pour rajouter au début ceci pour charger le fichier de langue de l’admin après les use (ligne 11 environ):
          Code PHP:
          JFactory::getLanguage()->load(''JPATH_ADMINISTRATOR); // charger le fichier des langues de l'administration (les clés de langue JFIELD_ALT_LAYOUT_LABEL, JOPTION_FROM_STANDARD, JOPTION_FROM_COMPONENT n'existant pas en front) 
          5) Si tu veux que le champ soit sous la catégorie par exemple rajouter après :
          Code PHP:
          <?php echo $this->form->renderField('catid'); ?>
          (donc en ligne 114 environ) rajouter ceci
          Code PHP:
          <?php echo $this->form->renderField('article_layout','attribs'); ?>
          Et mettre en commentaire ceci (ligne 110 environ)


          Code PHP:
          <?php // echo JLayoutHelper::render('joomla.edit.params', $this); ?>
          Le 5) c'est optionnel, c'est juste pour éviter d’avoir un "vilain" onglet avec que le champ que pour ce champ "type de mise en page".

          Si tu butes sur le plugin, dis le, je le ferais à l'occasion.




          Dernière édition par roland_d_alsace à 23/04/2020, 16h16
          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
            whoww, grand merci d'avoir pris le temps de regarder tout ca, c'est très sympa merci

            je vais tenter sur le champs et reviens vers toi, même si petite appréhension car tout cela dépasse mes compétences ! ;-)

            Commentaire


            • #7
              pardon, le premier code php je dois l'intégrer à quel endroit ?

              3) créer un override de template « edit » de la vue « form » (front) : copier /component/com_content/view/form/tmpl/edit.php en /templates/ton_template /html/com_content/form/edit.php
              -----> il y a déjà un fichier edit.php de mon template, est ce que je 'lécrase ou je procède la manip sur celui ci ?


              merci pour ton temps
              Dernière édition par bengre à 23/04/2020, 16h33

              Commentaire


              • #8
                Salut, c est la seconde option. tu édites l'existant car il a été modifié par les devs du template. Donc fait attention aux lignes de code.

                Commentaire


                • #9
                  ok merci et son premier code php, j'ai pas compris où ça allait ?
                  merci

                  Commentaire


                  • #10
                    Hello.

                    Pour l'override lefabdu51 t'as donné la réponse.

                    Pour les le point 1), le code php, c'est un plugin qu'il faut faire, installer et activer.

                    Si tu as la patience d'attendre un peu, je te le fais dès que possible et ajouterai le fichier à installer sur ce fil.

                    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


                    • #11
                      Outre l'option de roland_d_alsace , on peut peut-être contourner le problème.

                      Un exemple live sur https://www.moisdudoc.be/documentair...-bains-publics où tous les articles sont édités en front-end.
                      En fait, ce n'est pas au niveau de chaque article que j'assigne l'Alternate Layout "film"... mais j'ai créé un menu (caché dans mon cas pcq c'est pas le but de l'afficher sur le site) de type Articles>Blog, où là dans les Paramètres je choisis l'Alternate Layout... qui s'applique alors à TOUS les articles de la catégorie choisie.

                      Et du coup, même qd on édite en front-end, pas de problème
                      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


                      • #12
                        Envoyé par woluweb Voir le message
                        Outre l'option de roland_d_alsace , on peut peut-être contourner le problème.

                        Un exemple live sur https://www.moisdudoc.be/documentair...-bains-publics où tous les articles sont édités en front-end.
                        En fait, ce n'est pas au niveau de chaque article que j'assigne l'Alternate Layout "film"... mais j'ai créé un menu (caché dans mon cas pcq c'est pas le but de l'afficher sur le site) de type Articles>Blog, où là dans les Paramètres je choisis l'Alternate Layout... qui s'applique alors à TOUS les articles de la catégorie choisie.

                        Et du coup, même qd on édite en front-end, pas de problème
                        Si la mise en page est liée à la catégorie de l'article, c'est sûr que c'est LA formule à utiliser, car l'auteur n'a plus a se préoccuper de la sélection et tout est uniforme à coup sûr.

                        Attendons la réponse de bengre
                        Dernière édition par roland_d_alsace à 24/04/2020, 09h22
                        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


                        • #13
                          whooooow c'est que ce j'appelle la méthode du canard en plastique!

                          j'avais pourtant essayé cette option d'affichage de mise en page depuis la catégorie blog du menu, mais sans succès et là je viens de réessayer et ça marche parfaitement

                          un grand merci à tous et spécialement à Roland d'avoir pris le soin de m'écrire ce code, mais je vais rester avec l'option du menu car les mises en page sont les effectivement les mêmes pour chaque catégorie

                          encore merci pour votre temps
                          très belle journée :-)
                          Benjamin

                          Commentaire

                          Annonce

                          Réduire
                          Aucune annonce pour le moment.

                          Partenaire de l'association

                          Réduire

                          Hébergeur Web PlanetHoster
                          Travaille ...
                          X