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

    voici une version modifiée de DropMenu qui combine le hack de Lammikko(activeTreeOnly), intégré dans DropMenu par Cino, sur le forum anglophone et un complément que j’ai ajouté pour associer une class ou une id au balise li de DropMenu

    Je poste uniquement le code ce soir et compléterai par une illustration de son utilisation dans le cadre de plusieurs menus basés sur les techniques de remplacement de texte par des images en recourant aux css.

    Exemples d’appel:
    Avant tout vous devez créer une TV [*IdCssMenu*] (type: Text)

    Pour associer une .class à toutes les balises li dont la TV IDCssMenu est !=’’
    [!DropMenuImageIdCss?
    &idcss=1 //cherche la valeur de la TV IdCssMenu
    &activeTreeOnly=1 // ne deploie que la branche active
    !]

    Pour associer une #id à toutes les balises li dont la TV IDCssMenu est !=’’
    [!DropMenuImageIdCss?
    &idcss=1 //cherche la valeur de la TV IdCssMenu
    &tagCss=`id` !] //on souhaite associer une #id css aux balises li dont TV IdCssMenu !=’’

    Si vous omettez &idcss=1
    DropMenu fonctionne comme à l’accoutumé

    //Limitations actuelles
    J’ai désactivé le paramètre $selfAsLink
    //Limitations permanente
    Pour que vos CSS soient valides et éviter des conflits d’#ID, le paramètre &tagCss=’id’ ne doit être utilisé qu’une fois dans la page si le snippet est appelé plusieurs fois pour travailler sur la même branche de l’arbre de contenu.

    // ###########################################
    // DropMenu                                  #
    // ###########################################
    // Configurable menu / navigation builder using UL tags
    // Offers optional DIV wrappers for top level and nested menus (useful for hover zones)
    // as well as configurable classes for the DIV, UL, and LI elements.  It even
    // marks ancestors of and the current element with a Class (indicating you are here
    // and in this area of the site).  Also applies .last CSS class to final LI in each UL.
    //
    // Developed by Vertexworks.com and Opengeek.com
    // Feel free to use if you keep this header and credits in place
    //
    // Inspired by List Site Map by Jaredc, SimpleList by Bravado,
    // and ListMenuX by OpenGeek
    //
    // Configuration parameters:
    //
    // &menuName        - name of a placeholder for placing the output in the layout
    // &topnavClass     - CSS class for styling the class assigned to the outermost UL
    //
    // TO DO: configuration parameters above, more usage examples, CSS examples, output indenting
    
    // ###########################################
    // Usage Examples                            #
    // ###########################################
    // Creates menu with wrapping DIV with id=myMenu, starting at the site root, two levels deep,
    // with descriptions next to the links, and nested UL elements with class=nestedLinks; output
    // of menu can be placed in layout using placeholder named myMenu ( e.g. [ +myMenu+ ] )
    // [[DropMenu? &menuName=`myMenu` &startDoc=`0` &levelLimit=`2` &topdiv=`true` &showDescription=`true` &subnavClass=`nestedLinks`]]
    //
    // Creates topMenu from site root, including only 1 level, with class=topMenubar applied to the top level UL
    // and class=activeLink applied to current page LI
    // [[DropMenu? &menuName=`topMenu` &startDoc=`0` &levelLimit=`1` &topnavClass=`topMenubar` &here=`activeLink`]]
    //
    // Creates dropmenu 3 levels deep, with DIV wrappers around all nested lists styled with class=hoverZone
    // and currentPage LI styled with class=currentPage
    // [[DropMenu? &levelLimit=3 &subdiv=true &subdivClass=hoverZone &subnavClass=menuZone &here=currentPage]]
    //
    // Creates dropmenu of infinite levels, ordered by menutitle in descending order
    // [[DropMenu?orderBy=menutitle&orderDesc=true]]
    
    // ###########################################
    // Configuration parameters                  #
    // ###########################################
    
    // $phMode [ true | false ]
    // Whether you want it to output a [+placeholder+] or simply return the output.
    // Defaults to false.
    $phMode = false;
    
    // $menuName [ string ]
    // Sets the name of the menu, placeholder, and top level DIV id (if topdiv
    // option is true). Set to "dropmenu" by default.
    $phName = (!isset($phName)) ? 'dropmenu' : "$phName";
    
    // $siteMapRoot [int]
    // The parent ID of your root. Default 0. Can be set in
    // snippet call with startDoc (to doc id 10 for example):
    // [[DropMenu?startDoc=10]]
    $siteMapRoot = 0;
    
    // $removeNewLines [ true | false ]
    // If you want new lines removed from code, set to true. This is generally
    // better for IE when lists are styled vertically.
    $removeNewLines = (!isset($removeNewLines)) ? false : ($removeNewLines==true);
    
    // $maxLevels [ int ]
    // Maximum number of levels to include. The default 0 will allow all
    // levels. Also settable with snippet variable levelLimit:
    // [[DropMenu?levelLimit=2]]
    $maxLevels = 0;
    
    
    // $textOfLinks [ string ]
    // What database field do you want the actual link text to be?
    // The default is pagetitle because it is always a valid (not empty)
    // value, but if you prefer it can be any of the following:
    // menutitle, id, pagetitle, description, parent, alias, longtitle, introtext
    // TO DO: set text to be first non-empty of an array of options
    $textOfLinks = (!isset($textOfLinks)) ? 'menutitle' : "$textOfLinks";
    
    // $titleOfLinks [ string ]
    // What database field do you want the title of your links to be?
    // The default is pagetitle because it is always a valid (not empty)
    // value, but if you prefer it can be any of the following:
    // menutitle, id, pagetitle, description, parent, alias, longtitle, introtext
    $titleOfLinks = (!isset($titleOfLinks)) ? 'description' : "$titleOfLinks";
    
    // $pre [ string ]
    // Text to append before links inside of LIs
    $pre = (!isset($pre)) ? '' : "$pre";
    
    // $post [ string ]
    // Text to append before links inside of LIs
    $post = (!isset($post)) ? '' : "$post";
    
    // $selfAsLink [ true | false ]
    // Define if the current page should be a link (true) or not (false)
    $selfAsLink = (!isset($selfAsLink)) ? false : ($selfAsLink==true);
    
    // $hereClass [ string ]
    // CSS Class for LI and A when they are the currently selected page, as well
    // as any ancestors of the current page (YOU ARE HERE)
    $hereClass = (!isset($hereClass)) ? 'here' : $hereClass;
    
    
    
    // $showDescription [true | false]
    // Specify if you would like to include the description
    // with the page title link.
    $showDescription = (!isset($showDescription)) ? false : ($showDescription==true);
    
    // $descriptionField [ string ]
    // What database field do you want the description to be?
    // The default is description. If you specify a field, it will attempt to use it
    // first then fall back until it finds a non-empty field in description, introtext,
    // then longtitle so it really tries not be empty. It can be any of the following:
    // menutitle, id, pagetitle, description, parent, alias, longtitle, introtext
    // TO DO: set description to the first non-empty of an array of options
    $descriptionField = (!isset($descriptionField)) ? 'description' : "$descriptionField";
    
    
    // $topdiv [ true | false ]
    // Indicates if the top level UL is wrapped by a containing DIV block
    $topdiv = (!isset($topdiv)) ? false : ($topdiv==true);
    
    // $topdivClass [ string ]
    // CSS Class for DIV wrapping top level UL
    $topdivClass = (!isset($topdivClass)) ? 'topdiv' : "$topdivClass";
    
    // $topnavClass [ string ]
    // CSS Class for the top-level (root) UL
    $topnavClass = (!isset($topnavClass)) ? 'topnav' : "$topnavClass";
    
    
    
    // $useCategoryFolders [ true | false ]
    // If you want folders without any content to render without a link to be used
    // as "category" pages (defaults to true). In order to use Category Folders,
    // the template must be set to (blank) or it won't work properly.
    $useCategoryFolders = (!isset($useCategoryFolders)) ? true : "$useCategoryFolders";
    
    // $categoryClass [ string ]
    // CSS Class for folders with no content (e.g., category folders)
    $categoryClass = (!isset($categoryClass)) ? 'category' : "$categoryClass";
    
    
    
    // $subdiv [ true | false ]
    // Indicates if nested UL's should be wrapped by containing DIV blocks
    // This is useful for creating "hover zones"
    // (see http://positioniseverything.net/css-dropdowns.html for a demo)
    // TO CONSIDER: Setting a subdiv class at all turns on hover DIVs?
    $subdiv = (!isset($subdiv)) ? false : ($subdiv==true);
    
    // $subdivClass [ string ]
    // CSS Class for DIV blocks wrapping nested UL elements
    $subdivClass = (!isset($subdivClass)) ? 'subdiv' : "$subdivClass";
    
    
    
    // $orderBy [ string ]
    // Document field to sort menu by
    $orderBy = (!isset($orderBy)) ? 'menuindex' : "$orderBy";
    
    // $orderDesc [true | false]
    // Order results in descending order?  default is false
    $orderDesc = (!isset($orderDesc)) ? false : ($orderDesc==true);
    
    
    // HACK: activeTreeOnly
    // $activeTreeOnly [ true | false ]
    // Define if the menutree should show all menuitems or only those in active menutree branch
    $activeTreeOnly = (!isset($activeTreeOnly)) ? false : ($activeTreeOnly==true);
    
    //hack idcss pour ajouter une id specifique a une balise
    //add idcssmenu
    $idcss = (!isset($idcss)) ? false : true;
    
    //complement hack id specifique pour choisir une id ou class à la balise li
    $tagCss = (!isset($tagCss)) ? 'class' : $tagCss;
    
    // ###########################################
    // End config, the rest takes care of itself #
    // ###########################################
    
    $debugMode = false;
    
    // Initialize
    $MakeMap = "";
    $siteMapRoot = (isset($startDoc)) ? $startDoc : $siteMapRoot;
    $maxLevels = (isset($levelLimit)) ? $levelLimit : $maxLevels;
    $ie = ($removeNewLines) ? '' : "\n";
    //Added by Remon: (undefined variables php notice)
    $activeLinkIDs = array();
    $subnavClass = '';
    
    // Overcome single use limitation on functions
    global $MakeMap_Defined;
    
    if (!isset ($MakeMap_Defined)) {
      function filterHidden($var) {
        return (!$var['hidemenu']==1);
      }
      function filterEmpty($var) {
          return (!empty($var));
      }
      function MakeMap($modx, $listParent, $listLevel, $description, $titleOfLinks, $maxLevels, $inside, $pre, $post, $selfAsLink, $ie, $activeLinkIDs, $topdiv, $topdivClass, $topnavClass, $subdiv, $subdivClass, $subnavClass, $hereClass, $useCategoryFolders, $categoryClass, $showDescription, $descriptionField, $textOfLinks, $orderBy, $orderDesc, $activeTreeOnly, $debugMode, $idcss, $tagCss) {
        // Added by Remon. Define this variable _here_ ;-)
        $output = '';
    
        $children = $modx->getActiveChildren($listParent, $orderBy, (!$orderDesc) ? 'ASC' : 'DESC', 'id, pagetitle, description, isfolder, parent, alias, longtitle, menutitle, hidemenu, introtext, content_dispo, contentType, type, template');
        // filter out the content that is set to be hidden from menu snippets
        $children = array_filter($children, "filterHidden");
        $numChildren = count($children);
    
        if (is_array($children) && !empty($children)) {
    
          // determine if it's a top category or not
          $toplevel = !$inside;
    
          // build the output
          $topdivcls = (!empty($topdivClass)) ? ' class="'.$topdivClass.'"' : '';
          $topdivblk = ($topdiv) ? "<div$topdivcls>" : '';
          $topnavcls = (!empty($topnavClass)) ? ' class="'.$topnavClass.'"' : '';
          $subdivcls = (!empty($subdivClass)) ? ' class="'.$subdivClass.'"' : '';
          $subdivblk = ($subdiv) ? "<div$subdivcls>$ie" : '';
          $subnavcls = (!empty($subnavClass)) ? ' class="'.$subnavClass.'"' : '';
          $output = ($toplevel) ? "$topdivblk<ul$topnavcls>$ie" : "$ie$subdivblk<ul$subnavcls>$ie";
    
          //loop through and process subchildren
          foreach ($children as $child) {
            // figure out if it's a containing category folder or not
            $numChildren --;
            $isFolder = $child['isfolder'];
              $itsEmpty = ($isFolder && ($child['template'] == '0'));
            $itm = "";
            
                //changes idcss
                $myTv =  $modx->getTemplateVar('IdCssMenu',$fields='*',$child['id']);
    		    (($idcss) && ($myTv['value'] !='' ))? $cssSpecific = $myTv['value'] : $cssSpecific = '';
    
                    // if menutitle is blank fall back to pagetitle for menu link
                    $textOfLinks = (empty($child['menutitle'])) ? 'pagetitle' : "$textOfLinks";
    
              // If at the top level
            if (!$inside)
            {
              //$itm .= ((!$selfAsLink && ($child['id'] == $modx->documentIdentifier)) || ($itsEmpty && $useCategoryFolders)) ?
              $itm .= (($child['id'] == $modx->documentIdentifier) || ($itsEmpty && $useCategoryFolders)) ?
                      '<a href="[~'.$child['id'].'~]" title="'.$child[$titleOfLinks].'">'.$pre.$child[$textOfLinks].$post .'</a>'. (($debugMode) ? ' self|cat' : '') :
                      '<a href="[~'.$child['id'].'~]" title="'.$child[$titleOfLinks].'">'.$pre.$child[$textOfLinks].$post.'</a>';
              $itm .= ($debugMode) ? ' top' : '';
            }
    
            // it's a folder and it's below the top level
            elseif ($isFolder && $inside)
            {
    
              $itm .= ($itsEmpty && $useCategoryFolders) ?
                      $pre.$child[$textOfLinks].$post . (($debugMode) ? 'subfolder T': '') :
                      '<a href="[~'.$child['id'].'~]" title="'.$child[$titleOfLinks].'">'.$pre.$child[$textOfLinks].$post.'</a>'. (($debugMode) ? ' subfolder F' :'');
            }
    
            // it's a document inside a folder
            else
            {
              $itm .= ($child['alias'] > '0' && !$selfAsLink && ($child['id'] == $modx->documentIdentifier)) ? $child[$textOfLinks] : '<a href="[~'.$child['id'].'~]" title="'.$child[$titleOfLinks].'">'.$child[$textOfLinks].'</a>';
              $itm .= ($debugMode) ? ' doc' : '';
            }
            $itm .= ($debugMode)? "$useCategoryFolders $isFolder $itsEmpty" : '';
    
            // BEGIN HACK: activeTreeOnly
            // loop back through if the doc is a folder and has not reached the max levels
            if ($isFolder && (($maxLevels == 0) || ($maxLevels > $listLevel +1))) {
              // activeTreeOnly TRUE
              if ($activeTreeOnly)
              {
              	$makeMapYes = FALSE;
                if (is_array($activeLinkIDs))
                {
                  if ($child['id'] == $modx->documentIdentifier || in_array($child['id'], $activeLinkIDs)) 
                  {
                  	$makeMapYes = TRUE;
                  }
                }
              }
              // activeTreeOnly FALSE or child is in active tree
              if (!$activeTreeOnly || $makeMapYes)
              {
                $itm .= MakeMap($modx, $child['id'], $listLevel +1, $description, $titleOfLinks, $maxLevels, true, $pre, $post, $selfAsLink, $ie, $activeLinkIDs, $topdiv, $topdivClass, $topnavClass, $subdiv, $subdivClass, $subnavClass, $hereClass, $useCategoryFolders, $categoryClass, $showDescription, $descriptionField, $textOfLinks, $orderBy, $orderDesc, $activeTreeOnly, $debugMode, $idcss, $tagCss);
              }
            }
            // END HACK: activeTreeOnly
    
            //HACK TagCSS
                            //changes add id css and tag css
                    if (isset($tagCss) && $tagCss =='id') {
                    $addIdCss = ' id="'.$cssSpecific.'"';
                    $addClassCss = '';
                    }elseif(isset($tagCss) && $tagCss =='class'){
                    $addIdCss = '';
                    (!empty($cssSpecific)) ? $addClassCss = $cssSpecific.' ' : $addClassCss='';                
                    }else{// tagCss non specifie
                    (!empty($cssSpecific)) ? $addClassCss = $cssSpecific.' ' : $addClassCss=''; 
                    }
             ///
             
                    
            ///if ($itm && !$selfAsLink && ($child['id'] == $modx->documentIdentifier)) {///to get selfaslink working
            if ($itm && ($child['id'] == $modx->documentIdentifier)) {
              //$output .= "    <li class=\"$hereClass". ($numChildren == 0 ? ' last' : '')."\">$itm</li>$ie";
              
                    
                    //
              $output .= "<li $addIdCss class=\"$addClassCss$hereClass". ($numChildren == 0 ? ' last' : '')."\">$itm</li>$ie";
            }
            elseif ($itm) {
              // Added by Remon
              // define it here:
              $class = $addClassCss; // add pour le hack tagCss
              if ($numChildren == 0) {
                $class .= 'last'; ///modifier pour tagCss
              }
              if (is_array($activeLinkIDs)) {
                if (in_array($child['id'], $activeLinkIDs)) {
                  $class .= ($class ? ' ' : '').$hereClass;
                }
              }
              // it's an empty folder and using Category Folders
              if ($useCategoryFolders && $itsEmpty) {
                $class .= ($class ? ' ' : '').$categoryClass;
              }
              if ($class) {
                $class = ' class="'.$class.'"';
              }
    
              // TO DO: set description to the first non-empty of an array of options
              if ($showDescription && (!empty($child['$descriptionField']))) {
                  $desc = " – ".$child['$descriptionField'];
              } elseif ($showDescription && (!empty($child['description']))) {
                  $desc = ' – ' . $child['description'];
              } elseif ($showDescription && (!empty($child['introtext']))) {
                  $desc = ' – ' . $child['introtext'];
              } elseif ($showDescription && (!empty($child['longtitle']))) {
                  $desc = ' – ' . $child['longtitle'];
              } else {
                  $desc = '';
              }
    
                        //added idcss
    					$output .= "<li$addIdCss$class>$itm$desc</li>$ie";
    					$class = '';
    
            }
          }
          $output .= "</ul>$ie";
          $output .= ($toplevel) ? (($topdiv) ? "</div>$ie" : "") : (($subdiv) ? "</div>$ie" : "");
        }
        return $output;
      }
      $MakeMap_Defined = true;
    }
    
    $currentID = $modx->documentIdentifier;
    $parentID = $currentID;
    
    // find the parent docs of the current "you-are-here" doc
    // used in the logic to mark parents as such also
    while ($parentID != $siteMapRoot && $parentID != 0) {
      $parent = $modx->getParent($parentID, 0);
      if ($parent) {
        $parentID = $parent['id'];
        $activeLinkIDs[] = $parentID;
      } else {
        $parentID = 0;
      }
    }
    
    if ($phMode) {
        // output to a [+placeholder+]
        $modx->setPlaceholder($phName, MakeMap($modx, $siteMapRoot, 0, $showDescription, $titleOfLinks, $maxLevels, false, $pre, $post, $selfAsLink, $ie, $activeLinkIDs, $topdiv, $topdivClass, $topnavClass, $subdiv, $subdivClass, $subnavClass, $hereClass, $useCategoryFolders, $categoryClass, $showDescription, $descriptionField, $textOfLinks, $orderBy, $orderDesc, $activeTreeOnly, $debugMode, $idcss, $tagCss));
    
    } else {
        // return the output a "usual"
        return MakeMap($modx, $siteMapRoot, 0, $showDescription, $titleOfLinks, $maxLevels, false, $pre, $post, $selfAsLink, $ie, $activeLinkIDs, $topdiv, $topdivClass, $topnavClass, $subdiv, $subdivClass, $subnavClass, $hereClass, $useCategoryFolders, $categoryClass, $showDescription, $descriptionField, $textOfLinks, $orderBy, $orderDesc, $activeTreeOnly, $debugMode, $idcss, $tagCss);
    
    }
    
      Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
      • 6726
      • 7,075 Posts
      Je testerai ça, j’avais essayé le hack de Cino, mais je le trouve un peu complexe...

      Merci pour la contrib en tout cas, on a bien besoin de ça pour avoir un degré de contrôle suffisant pour le stylage via CSS smiley
        .: COO - Commerce Guys - Community Driven Innovation :.


        MODx est l&#39;outil id
        • 11975
        • 2,542 Posts
        grin J’ai un doute sur l’auteur du hack activeTreeOnly

        Je pense avoir intégré celui de cino mais lorsque j’ai fait la recherche sur le forum je suis tombé sur le poste de lammiko ...

        :-)
          Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
          • 6726
          • 7,075 Posts
          C’est bien Lammiko qui est l’auteur du ActiveTreeOnly, c’est Cino qui a intégré son hack a sa version de DropMenu parcequ’il en avait besoin...
            .: COO - Commerce Guys - Community Driven Innovation :.


            MODx est l&#39;outil id
            • 11975
            • 2,542 Posts
            Merci d’avoir clarifiée la paternité du mod ActiveTreeOnly  grin

            ceci dit ce qui est dommage concernant ce hack c’est qu’il renvoie également les collatéraux de la branche active et pas seulement la ligne directe.

            Je m’explique:

            /root
            --/folder1
            ---/subfolder1
            --->doc1-1
            --->doc1-N1
            ---/subfolder2
            --->doc2-1
            --->docN2-2
            ---/subfolderN

            Ainsi si on est dans le docN1-1
            on devrait avoir

            --/folder1
            ---/subfolder1
            --->doc1-1
            --->doc1-N1

            mais on obtient avec activeTreeOnly (du moins c’est ce que j’ai constaté)
            --/folder1(here)
            ---/subfolder1(here)
            --->doc1-1
            --->doc1-N1(here)
            ---/subfolder2
            ---/subfolderN


            Ce qui contraint à utiliser les css pour mettre à display:none les branches (---/subfolder) dont  la class!=here
              Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
              • 6726
              • 7,075 Posts
              Je trouve que c’est mieux comme c’est, la continuité de la navigation est assurée : si je veux aller à subfolder2 ou N directement, j’ai un lien alors que sinon je dois retourner un niveau au dessus puis redescendre... non ?
                .: COO - Commerce Guys - Community Driven Innovation :.


                MODx est l&#39;outil id
                • 12055
                • 2 Posts
                Quote from: heliotrope at Jun 20, 2006, 05:36 PM

                [...]
                Exemples d’appel:
                Avant tout vous devez créer une TV [*IdCssMenu*] (type: Text)

                Pour associer une .class à toutes les balises li dont la TV IDCssMenu est !=’’
                [!DropMenuImageIdCss?
                &idcss=1 //cherche la valeur de la TV IdCssMenu
                &activeTreeOnly=1 // ne deploie que la branche active
                !]

                Pour associer une #id à toutes les balises li dont la TV IDCssMenu est !=’’
                [!DropMenuImageIdCss?
                &idcss=1 //cherche la valeur de la TV IdCssMenu
                &tagCss=`id` !] //on souhaite associer une #id css aux balises li dont TV IdCssMenu !=’’

                Si vous omettez &idcss=1
                DropMenu fonctionne comme à l’accoutumé

                //Limitations actuelles
                J’ai désactivé le paramètre $selfAsLink
                //Limitations permanente
                Pour que vos CSS soient valides et éviter des conflits d’#ID, le paramètre &tagCss=’id’ ne doit être utilisé qu’une fois dans la page si le snippet est appelé plusieurs fois pour travailler sur la même branche de l’arbre de contenu.
                [...]
                Bonjour/Bonsoir,
                je débute sous modx, j’aimerai pouvoir utiliser le code proposé ici pour personnaliser via id ou class mes menus... mais je bloque "bêtement" à la 1ère étape des explications...
                Pour l’instant, j’ai compris que TV et "variable de modèle" c’est la même chose (surtout si je me gourre dites-moi hein grin) mais je comprends pas ce qu’il faut mettre dans les champs du formulaire de création d’une tv...
                Prenons l’exemple sus-cité :
                /root
                --/folder1
                ---/subfolder1
                --->doc1-1
                --->doc1-N1
                ---/subfolder2
                --->doc2-1
                --->docN2-2
                ---/subfolderN
                Pourriez-vous me donner une illustration concrête pour créer une tv pour attribuer une class au niveau ---/subfolder en précisant pour chaque champ "obligatoire" :

                • Nom de variable:
                • Légende:

                • Description:

                • Type d’entrée:

                • Valeurs optionnelles d’entrée:
                • Valeur par défaut:

                • Widget:

                • Ordre de tri:
                Je pense que ça me permettrait de comprendre comment les tv fonctionnent embarrassed
                Et pas que moi à mon avis vu le nombre de messages lus pendant mes recherches, de gens qui comprennent pas trop comment ça se goupille cette histoire de TV shocked

                Merci d’avance à celui ou celle qui se dévouera wink
                  "Soyons d
                  • 11975
                  • 2,542 Posts
                  Salut,

                  alors les TV (variables de  modeles) permettent d’etendre les proprietes de l’objet document en rajoutant selon ses besoins des champs personnalisés.
                  Donc si une TV est associée au template du document, on pourra lors de l’edition du document specifier les valeurs des TV.

                  dans ton gestionnaire> variable de modele > nouveau

                  Nom de variable: IdCssMenu
                  Légende: IdCssMenu
                  Description:   class ou id css utilisée dans dropmenu modifé
                  Type d’entrée:   text
                  Valeurs optionnelles d’entrée:  
                  Valeur par défaut:  
                  Widget:     
                  Ordre de tri:

                  Ensuite tu coches les templates (gabarits ou modeles de presntation) auxquels tu veux associer la TV
                  De cette façon, un document dont le template a été associé à la TV IdCssMenu, aura une propriété supplémetaire IdCssMenu.
                  Si cette dernière est renseignée et que la case "visible dans le menu" (de memoire) est cochée, on retrouvera dans le code html de sortie de dropmenu pour le lien menant à cette page class=valeurIdCssMenu qui a été saisie lors de l’édition du document.

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