We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 23050
    • 1,842 Posts
    Bonjour tout le monde,

    Je transfère enfin mon savoir sur MODx ! (Un grand merci à Heliotrope et mrcou qui m’ont beaucoup aidé pour réaliser ce snippet wink )

    Objectif du Snippet : Dans une architecture contenant Dossier 1 > Document A, récupérer le contenu d’une tv de Dossier 1alors que l’on affiche le Document A



    Etape 1 : Créer le snippet
    1- Aller à Ressources > Gestion des Ressources > Snippet > Nouveau snippet
    2- Nom du Snippet : GetParentTitle (mais vous pouvez choisir ce que vous souhaitez)
    3- Description : Affiche une tv du document Parent
    4 - Copier/Coller le code ci-dessous dans le Contenu du Snippet :
    $id=(!isset($id)) ? $modx->documentObject['id'] : $id;
    if($id==0)return;
    $target=(!isset($target)) ? 'pagetitle' : $target;
    $parent = $modx->getParent($id,1,$target);
    $parent = $parent[$target];
    return $parent;

    Grâce à la 3ème ligne, on définit que par défaut, on souhaitera afficher le [*pagetitle*]. Nous verrons ensuite comment appeler une autre tv.
    5- Enregistrer

    Etape 2 : Insérer le Snippet dans un template ou un chunck
    1- Sélectionner le template (ou le chunck) dans lequel vous souhaitez afficher le titre du document en cours.
    2- Insérer à l’endroit souhaité le code suivant :
    [!GetParentTitle? &target=`tv_a_afficher` &id=`[*id*]`!]


    Explication du code : Remplacer tv_a_afficher par la tv que vous voulez : pagetitle, introtext...
    [*id*] permet de récupérer l’id du document en cours. Le snippet se charge ensuite de calculer l’id du document parent et d’aller charger la tv de ce document.

    Info : En appelant uniquement [!GetParentTitle!], le snippet récupère automatiquement l’id du document en cours et le pagetitle du document parent.

    Etape 3 : Laisser bosser MODx laugh



    Pour aller plus loin - exemple 1
    Vous souhaitez faire un lien pour accéder au document parent ? Facile :
    1- Insérer le code ci-dessous à l’endroit souhaité :
    <a href="[~[*parent*]~]">[!GetParentTitle? &id=`[*id*]`!]</a>


    Explication du code : dans la balise <a>, [*parent*] permet de récupérer l’id du document parent. [~xxx~] permet d’afficher un lien vers le document xxx donc il suffit de remplacer xxx par [*parent*] pour afficher un lien vers le document parent... Pas bête ! wink
      • 6726
      • 7,075 Posts
      Merci Perrine pour ce snippet et aussi pour tes explications grin

      J’ai effectivement déplacé le sujet dans "Module, plugin, snippet", mais ça n’empêche pas de poster un tutoriel avec un exemple concret d’utilisation du snippet (celui qui t’a conduit à créer ce snippet serait pas mal smiley )

      Aussi, penser à poster en anglais ton snippet et l’ajouter au Repository, surtout que la bibliothèque de module, plugin, snippet en ligne (Repository) est pour bientôt smiley
      Fini le thread sans fin qui liste les modules, plugins et snippets !
        .: COO - Commerce Guys - Community Driven Innovation :.


        MODx est l&#39;outil id
        • 23050
        • 1,842 Posts
        Ayé smiley j’ai écourté les explications en anglais laugh

        Ok pour le tuto, mais je pense attendre que le site en question soit fini pour bien montrer le fonctionnement... quoi que le tuto risque d’arriver un peu tard si j’attends :p
          • 20394
          • 134 Posts
          Bonjour Perrine,
          à la vue des snippets existants j’ai eu l’impression qu’il était bon de définir dans le snippet toutes les variables utilisées.
          Ainsi pour la variable $id :

          $id=(!isset($id)) ? 0 : $id;

          ensuite avant le code de ton snippet :
          if($id==0)return;


          Ensuite au lieu de changer le code de ton snippet si tu veux le résumé à la place du titre, tu utilises une nouvelle variable :
          $target=(!isset($target)) ? 'pagetitle' : $target

          puis dans le corps de ton snippet :
          $parent = $parent[$target];
            • 23050
            • 1,842 Posts
            Oula mrcou, j’avoue que là, ça va devenir un peu dur pour moi laugh

            Je mets ça où et dans quel ordre ?
              • 20394
              • 134 Posts
              Je n’arête pas de modifier mes posts undecided
              J’espère que cette fois c’est la bonne.


              Voici le snippet complet :
              $id=(!isset($id)) ? 0 : $id;
              if($id==0)return;
              $target=(!isset($target)) ? 'pagetitle' : $target;
              $parent = $modx->getParent($id,1,$target);
              $parent = $parent[$target];
              


              J’espère que cette fois c’est bon wink
                • 20394
                • 134 Posts
                Pour utiliser ce snippet tu peux taper :
                [!GetTitleParent!]

                qui ne donne strictement rien.
                Ou bien :
                [!GetTitleParent? &target='description' &id=`[*id*]`!]!]

                pour avoir la description du parent.
                Ou encore
                [!GetTitleParent? &id=`[*parentid*]`!]

                pour avoir le titre du grand-père.
                  • 23050
                  • 1,842 Posts
                  J’ai testé, ça marche aussi laugh

                  La 1ère ligne, c’est du vrai chinois
                  La 2ème : je suppose que c’est si id = 0, alors, on ne renvoie rien
                  La 3ème : comme la 1ère mais finalement, je devine que c’est que ce que tu appelles la "définition des variables " ?

                  Il faut initialiser les variables avant de les utiliser et c’est ce que tu fais smiley J’ai bon ?

                  Edit : Ah mince, ma réponse est sensée s’intercaller entre ton dernier post, et ton avant-dernier :p

                  Pour ton dernier post, je comprends ! En fait, grâce à la variable &target, je peux choisir n’importe quelle tv à afficher ? C’est fort ça aussi ! Et si je ne spécifie pas de target, alors pas défaut c’est le titre... j’ai encore bon ?
                    • 20394
                    • 134 Posts
                    Pour la variable $id, mettre plutôt :
                    $id=(!isset($id)) ? $modx->documentObject['id'] : $id;

                    Ne pas oublier comme moi le $ devant modx wink
                      • 20394
                      • 134 Posts
                      Effectivement la variable $target permet de spécifier le champ affiché. Par défaut il s’agit de ’pagetitle’.
                      Initialiser la variable $id avant de l’utiliser est important car rien ne garantit que l’utilisateur entrera la syntaxe correcte pour ton snippet.
                      Il faut que le snippet ne génère aucune erreur quel que soit les paramètres entrés (ou non-entrés).