We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 28173
    • 409 Posts
    Hello,

    Bon j’ai bien cherché dans les modules/snippets existant pour voir s’il y existait déjà un module répondant à mon besoin.
    Je suis tombé sur UltimateParent et getParent. Ce dernier ne semble plus être supporté par la dernière version de MODx, pourtant c’est celui qui semblait le mieux répondre à mon besoin.

    Voici donc ce que je cherche à faire.
    J’ai un menu comme ceci :
    Menu 1
     - sous-menu 1
     - sous-menu 2
     - sous-menu 3
    Menu 2
     - sous-menu 1
     - sous-menu 2
     - sous-menu 3

    Je cherche à afficher, dans le contenu de la page "Menu 1", le nom de la page courante (Menu 1) et uniquement celui-ci. Jusque là pas de soucis, un [*pagetitle*] fait l’affaire.

    Dans la page "Menu 1 > sous-menu 2", je cherche à afficher le nom de la page courante, mais aussi le nom de la page parente.

    Et c’est là que ça se complique...
    UltimateParent ne me donne que le n° de parent -non pas immédiat, mais absolu- et non son titre.

    J’ai aussi cherché à utiliser un "trailler" comme breadcrumbs et à l’en épurer pour obtenir ce que je veux. Il n’est malheureusement pas assez souple au niveau des templates undecided

    Serais-je passé à côté du module miracle ?
      • 11975
      • 2,542 Posts
      Serais-je passé à côté du module miracle ?

      Au risque de te faire de la peine OUI grin

      regarde du côté des snippets getField ou getParent.


      :-)
        Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
        • 28173
        • 409 Posts
        getField je ne connais pas encore, mais getParent j’ai essayé, sans succès. J’obtiens une erreur dans MODx à cause d’un fichier inexistant... bref si je ne m’en sort pas avec getField je reviendrais ici avec mon pb que j’ai rencontré avec getParent smiley
          • 28173
          • 409 Posts
          C’est bien getField qui me fallait* wink
          Par contre je pense qu’il me faudrait l’adapter pour que lorsque je suis sur la page "Menu 1", je ne me retrouve pas avec 2 fois
          "Menu 1" "Menu 1"

          Voici l’appel du chunk que j’ai utilisé :
          [!GetField?field=`pagetitle` &parent=`1` &parentLevel=`1` &topid=`2`!]


          Comment effectuer un test du style "Si l’id de la page curante est le même que celui du topid, alors ne rien afficher" ?

          Merci


          * : question bonus : existe-t-il une méthodologie particulière pour trouver un snippet correspondant à un besoin particulier ? Je pose cette question car en tant que débutant sous MODx, je me vois souvent demander si c’est possible de faire ça ou ça...
          Pour avoir creusé un peu la question, je n’ai pas trouvé de réponse satisfaisante :
          - le nuage de tags dispo sur la page Resources est pas mal, mais parfois il n’est pas toujours efficace (par exemple, je n’ai pas pensé à chercher avec le tag "field" pour getField!!)
          - le moteur de recherche du site de Resources, il est super qd on sait précisément ce que l’on cherche... sinon...
          - les essayer tous ! Oui mais bon laugh
            • 11975
            • 2,542 Posts
            Pour ta condition regarde le plugins PHx

            Sinon pour les ressources tu peux essayer une recherche sur le forum avec tes mots clefs et voir dans les threads si on mentionne une snippet.
            Chacune d’entre elles a un fil de support.


            :-)
              Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
              • 28173
              • 409 Posts
              Je viens d’installer PHx et je tente de comprendre la doc.
              J’y ai trouvé ceci :
              [+phx:if=`[+this+]`:is=`[+that+]`:then=`do this`:else=`do that`+]


              Par contre il me manque une notion pour aller plus loin : qu’est-ce qu’un "placeholder" ?
                • 11975
                • 2,542 Posts
                Un des avantages de MODx c’est de permettre une separation stricte des donnees et de leur presentation.
                Pour se faire on utilise des microtemplates => chunks.
                Dans les chunks on utilise des placeholders pour signifier au snippet qui utilisera ce chunk comme gabarit de presentation où placer les données obtenues lors de l’execution du snippet.
                La syntaxe est [+placeholder+].

                :-)
                  Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
                  • 28173
                  • 409 Posts
                  OK...
                  Mais comment puis-je l’utiliser, notamment dans le cadre de ma problématique ?

                  [!GetField?field=`pagetitle` &parent=`1` &parentLevel=`1` &topid=`2`!]

                  "Si l’ID de la page courante est le même que celui du &topid, alors ne rien afficher"
                  [+phx:if=`[+this+]`:is=`[+that+]`:then=`do this`:else=`do that`+]


                    • 11975
                    • 2,542 Posts
                    Je vais presumer que ton topID est un folder/container situé au premier niveau de ton arbre (un enfant de root)

                    Ta condition est donc si id du document en consultation est != topID (soit ultimateParent)

                    Ce qui donne

                    [+phx:if=`[*id*]`:is=`[[Ultimateparent]]`:then=``:else=`[!GetField?field=`pagetitle` &parent=`1` &parentLevel=`1` &topid=`2`!]`+]

                    UltimateParent est un snippet (fourni dans la distrib) qui renvoie le parent le plus haut(donc enfant de root).
                    Je ne connais pas par coeur la syntaxe de PHx donc c’est sans garantie.

                    :-)

                    PS: c’est quoi topid ? dans getField
                      Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
                      • 28173
                      • 409 Posts
                      en fait topid est un paramètre rentré dans getField.

                      Sinon ton exemple m’a bien inspiré. Je comprend mieux cette histoire de placeholder.

                      Partant de ton code, comme [[UltimateParent]] ne correspondait pas à cause de l’arborescence qui est au dessus du menu que j’ai mis en exemple, je l’ai adapté comme suis :
                      [+phx:if=`[*id*]`:is=`[!GetField?field=`id` &parent=`1` &parentLevel=`1` &topid=`2`!]`:then=``:else=`[!GetField?field=`pagetitle` &parent=`1` &parentLevel=`1` &topid=`2`!]`+]

                      Et étrangement, ça ne fonctionne pas ! L’instruction du else est exécutée !
                      J’ai pourtant fait qques tests. Imaginons le menu suivant avec entre parenthèse l’ID du document :

                      Menu 1 (7)
                      - sous-menu 1 (8)
                      - sous-menu 2 (9)


                      J’ai fait s’afficher les variables suivantes :
                      - ID du document parent : [!GetField?field=`id` &parent=`1` &parentLevel=`1` &topid=`2`!]
                      - ID du document actif : [*id*]

                      Sur la page "Menu 1", j’obtiens :
                      - ID du document parent : 7
                      - ID du document actif : 7

                      Sur la page "Sous-menu 2", j’obtiens :
                      - ID du document parent : 7
                      - ID du document actif : 9

                      Les variables sont donc correctes.

                      Pourquoi donc le test via PHx ne fonctionne-t-il pas ?