We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 13739
    • 10 Posts
    bonjour à tous,

    je suis nouveau sous modx (et ravi par la bête) et novice en tout ce qui regarde la programmation...
    Le titre de mon poste est assez explicite : mon site aura plusieurs catégories et chacune de ces catégories plusieurs documents.
    Je veux n’utiliser qu’un template.
    Je veux que chaque document hérite de l’image de son dossier/catégorie parent.
    Et je ne sais pas comment faire ! La souplesse de modX me semble offrir mille et une façons mais je ne sais ni laquelle choisir ni comment la mettre en oeuvre.
    Voilà ce que j’imagine : dans le template je fais appel à une TV ou un snippet, celui-ci regarde l’id du document et affiche l’image "img-x.jpg" où x est l’id du document.
    Est-ce faisable ? et si oui comment ? (même un début de piste me mettrait sur la voie !)
      • 11975
      • 2,542 Posts
      Salut,

      comme tu le dis il y a plusieurs façon de faire.
      Le plus simple est de créer une TV avec Default value => @INHERIT puis de l’associer aux templates impliquées.
      De cette façon tous les enfants du document/parent héritent de la valeur de cette TV si aucune valeur ne leur a été affectée.


      :-)

      EDIT:
      Pour développer un peu l’idée et un peu plus de clarté, on va prendre un exemple.

      Arborescence du projet:

      /root(0)

      --/Dossier1(folder)
      --/-Document1.1
      --/-Document1.N

      --/Dossier2(folder)
      --/-Document2.1
      --/-Document2.N


      Une TV [*imgCategorie*] (pour le type on peut envisager différents scénarios, ici je ne m’intéresse qu’à l’héritage)

      Si tu donnes une valeur à [*imgCategorie*] pour le --/Dossier1(folder), tous ces enfants en héritent sauf si tu attribues une valeur particulière à la [*imgCategorie*] lors del’édition d’un enfant de "Dossier1".

      Ainsi lorsque tu afficheras en front --/-Document1.N, la valeur de Document1.N.[*imgCategorie*] sera Dossier1.[*imgCategorie*]



        Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
        • 6726
        • 7,075 Posts
        Je n’aurai pas dit mieux grin
        Je me demande s’il ne faudrait pas ranger ce post dans la section tuto... ou alors le dupliquer en tant que tutoriel...

        Enfin, sinon j’en profite pour te souhaiter la bienvenue, jbl !
          .: COO - Commerce Guys - Community Driven Innovation :.


          MODx est l'outil id
          • 13739
          • 10 Posts
          Ok, merci pour la réponse rapide et l’accueil chaleureux !

          la puissance et la simplicité de modX sont : bluffantes shocked

          Je suis tout disposé à transformer ce topic en tuto (d’autant que découvrir les fonctionnalités de modX à partir d’un besoin précis et, en l’occurence, assez courant constitue sans doute la meilleure des entrées en matière smiley)
          mais il me reste encore une fonctionnalité à mettre en oeuvre :

          les images des documents sont du contenu (elles seraient passés en background-image sinon) et la balise alt="" est donc fondamentale, pour les robots comme pour les navigateurs textuels.

          - dans Ressources/Manage ressources/Template variable, je choisis : New Template Variable;
          - je l’appelle "imgCategorie";
          - dans "input type", je choisis "image";
          - dans "default value", je donne comme valeur : @INHERIT;
          - dans "template access", je coche mon template;
          - j’enregistre.

          - dans Ressources/Manage ressources/Templates, je choisis mon template;
          - j’y remplace la ligne en dur <img etc... /> par l’appel à la TV : [*imgCategory*];
          - j’enregistre.

          -dans l’arbre des documents, je choisis ma première catégorie (le dossier ou document parent) et je l’édite
          -dans "template variable", je vois apparaître imgCategory smiley, je clique sur insert, j’arrive dans le dossier des images (assets/images), je choisis mon image et hop
          - l’image apparaît sur toutes les pages de la catégorie !
          - je répète l’opération pour toutes mes catégories : nickel

          mais l’attribut alt="" est vide

          -je retourne donc édite ma TV, dans "widget", je sélectionne "image"
          - dans les "widget properties" qui apparaissent, je suis ravi de voir le champ "alternate text" (ma balise alt="")
          - mais comment faire pour que la valeur que je lui donne change en même temps que l’image ??

          je veux que la balise alt ait pour valeur le nom de la catégorie (soit le ’pagetitle’ du document parent),
          comment faire cela ?

          [--EDIT--]
          je me rends compte que je peux mettre [*pagetitle*] dans le champ alternate text : ça me paraît un début de piste ! d’autant plus que je vois dans les Document-specific template variables [*parent*] qui renvoie l’ID du document parent... je voudrais un mix des deux : quelquechose qui me renvoie le page title du document parent...
            • 11975
            • 2,542 Posts
            Salut,

            pour la balise alt c’est une faiblesse de Modx et à ce jour je n’ai pas trouvé de solution satisfaisante.

            Tu peux par exemple renseigner la balise en appelant une propriété du document objet, [*pagetitle*],[*description*][*introtext*] etc...
            Le hic c’est que la valeur sera celle du document en cours de consultation.

            C’est à dire que dans notre exemple:
            Si  Dossier1 contient un appel à ditto pour lister les documents qu’il contient et que dans la liste on affiche pour chaque document son [*imgCategories*] la valeur de alt sera celle de Dossier1[*proprieteDocObjectPourAlt*] et non celle du document auquel l’image est associée.
            Donc si tu présentes une image différente pour chaque item présent dans la liste, elles auront toutes la même valeur pour alt.

            Pour y pallier, on peut corriger la chose en gérant soit-même l’output de TV[* imgCategorie*] grace à une snippet.
            Dans ce cas, il faut désactiver la widget(pour que modx retourne la valeur "nue" de TV[* imgCategorie*] ) et écrire selon ses besoins la balise <img>



            :-)
              Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
              • 13739
              • 10 Posts
              OK,

              je reprends pour mettre les choses au clair dans ma tête brouillonne :

              - il faudrait que, dans le champ alternate text, je puisse faire appel à un snippet (est-ce possible ?);
              - si c’est possible, il faut que je crée un snippet qui ressemble à ça (je n’y connais à peu près rien en code, c’est donc juste schématique) :
              -> SI la page est un document (un article) ALORS récupérer le ’pagetitle’ du document parent (qui sera le dossier/catégorie)
              -> SINON la page est un dossier (donc la catégorie) ALORS récupérer son ’pagetitle’

              C’est le moment où je fais un grand sourire embarrassed et où je demande : est-ce possible ? est-ce logique ? est-ce réalisable ? à quoi ressemblerait le code ? smiley
              Je vais quand même farfouiller dans les snippets, voir si j’arrive à quelquechose tout seul comme un grand
                • 11975
                • 2,542 Posts
                Pas tout à fait grin

                Le snippet doit être appelé depuis le chunk ou le template pour générer la balise <img> qui sera inscrite dans le source du document.
                Il y a des exemples dans le forum mais la recherche pose problème.

                :-)
                  Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
                  • 13739
                  • 10 Posts
                  Heliotrope,

                  merci pour tes réponses quasi instantanées !
                  j’ai suivi le fil de mes réflexions, et mon précédent post faisait abusivement l’impasse sur ta proposition (un peu effrayante :’().
                  est-ce à dire que ma solution est décidément irréalisable ? parce qu’elle me permettrait de tirer parti des propriétés du widget image, et que ça me paraît plus réalisable (dans la limite de mes capacités actuelles) que le snippet que tu évoques et qui opérerait en amont.

                  Je me tourne à nouveau vers toi puisque, comme tu l’as remarqué, la recherche est en rade sad
                    • 11975
                    • 2,542 Posts
                    En fait il suffit d’un snippet tout simple pour construire la balse img

                    //les parametres que l'on passe au snippet proviennent de doc Objet 
                    // [[imgTag?  &imgCategorie=`[*imgCategorie*]` & altText=[*description*] ]]
                    //depuis un chunk
                    //[[imgTag?  &imgCategorie=`[+imgCategorie*]` & altText=[+description+] ]]
                    
                    //la source de l'image de type /images/mon_img.jpg
                    //pour ca on desactive le widget image de TV[*imgCategorie*]
                    
                    $srcImg = isset($imgCategorie)? $imgCategorie : false;
                    $altImg = isset($altText)? $altText : "alt par defaut";
                    
                    //on crée la balise si il y a une valeur pour [*imgCategorie*]
                    
                    if($srcImg && !empty($srcImg) ){
                    $output = "<img src=\"".$srcImg."\" alt=\"".$altImg."\" />";
                    return $output;
                    }
                    
                    


                    Bon j’ai pas testé mais tu vois l’idée ;-)
                      Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
                      • 13739
                      • 10 Posts
                      Ok, je crois avoir compris la logique (au moins de input/output et des widgets) !

                      - j’ai désactivé le widget ’image’ dans ma tv [imgCategorie];
                      - j’ai créé le snippet [[imgTag]];
                      - j’ai collé le code que tu as proposé (en remplaçant [*description*] par [*pagetitle*] et j’ai enregistré;
                      - j’ai remplacé dans mon template l’appel à [*imgCategorie*] par un appel à [[imgTag? &imgCategorie=`[*imgCategorie*]` & altText=`[*pagetitle*]` ]]
                      ET
                      - j’arrive exactement au même résultat qu’avec le widget !
                      les images s’affichent comme il faut selon la catégorie, mais la balise alt est partout remplie avec "alt par défaut".

                      Conclusion : J’ai dû louper un épisode avec altText...