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

    dans le snippet DropMenu, je me suis penché sur startFromParent. J’ai ajouté (à mon niveau) un petit contrôle sur son comportement, en spécifiant la "remontée" par rapport au parent ultime, ainsi que la descente par raport au document considéré.
    J’ajoute pour la configuration :
    $levelDown=(!isset($levelDown)) ? 20 : $levelDown;
    $levelUp=(!isset($levelUp)) ? 0 :$levelUp;

    puis je reprend la portion startFromParent :
    if($startFromParent==true)
    {
    	// document id
    	$cid = $modx->documentObject['id'];
    	// document parent
    	$pid = $modx->getParent($cid,1,"id");
    
    	$ptarr=array();
    	$ptarr[]=$cid;
            $i=0;
            while ($parent=$modx->getPageInfo($pid['id'])) 
    	{
    		$ptarr[]=$parent['id'];
    	   $pid = $modx->getParent($parent['id'],1,"id");
               $i++;
               if ($levelDown<=$i) break;
            }
            $ptarr = array_reverse($ptarr);
            $indstart=($i<=$levelUp)?0:$levelUp;
    	$startDoc=$ptarr[$indstart];
    }

      • 33175
      • 711 Posts
      Merci pour cette contribution smiley mais pourrais tu nous expliquer le but de tes modifications (je ne vois pas trop à quoi ça sert et je n’ai pas regardé le code php :p) ?

      Merci
        Sorry for my english. I&#39;m french... My dictionary is near me, but it&#39;s only a dictionary !
        • 20394
        • 134 Posts
        Le paramètre levelUp permet de redescendre le long de l’arbre et de ne pas démarrer nécessairement du parent ultime mais de son fils, ou petit-fils ...
        Cela permet sur mon site d’avoir un menu moins grand, et qui ne varie pas lorsque l’on clique sur des pages de ce menu (si levelDown n’est pas spécifié).

        Quant à levelDown, il spécifie de combien de niveau on remonte par rapport au document courant. Cela permet d’afficher les frères avec levelDown=1, le parent, oncle et cousins avec levelDown=2. Couplé avec par exemple levelLimit=3, cela permet d’avoir d’avoir un menu sur les niveaux juste au-dessus et juste en-dessous, en gardant un taille raisonnable (avec mon site) pour ce menu.

        Pour résumé, ces deux paramètres me permettent de mieux contrôler le document de départ pour le menu, ce document étant trouvé dynamiquement par rapport au document affiché.


        Petite remarque : la valeur finale de $i correspond à la profondeur du document affiché. Cela pourrait être utilisé par exemple pour faire varier la valeur de levelLimit ou autre ...
          • 33175
          • 711 Posts
          Merci beaucoup pour ces précisions smiley c’est beaucoup plus clair pour moi grin
            Sorry for my english. I&#39;m french... My dictionary is near me, but it&#39;s only a dictionary !
            • 20394
            • 134 Posts
            J’ajoute maintenant le paramètre levelMin, qui permet de spécifié à partir de quel niveau dans l’arborescence nous voulons afficher le menu :
            $levelMin=(!isset($levelMin)) ? 0:$levelMin;
            

            puis :
            if($startFromParent==true)
            {
            	// document id
            	$cid = $modx->documentObject['id'];
            	// document parent
            	$pid = $modx->getParent($cid,1,"id");
            
            	$ptarr=array();
            	$ptarr[]=$cid;
                    $i=0;
                    while ($parent=$modx->getPageInfo($pid['id'])) 
            	{
            		$ptarr[]=$parent['id'];
            	   $pid = $modx->getParent($parent['id'],1,"id");
                       $i++;
                    }
                    $ptarr = array_slice($ptarr,0,$levelDown);
                    $ptarr = array_reverse($ptarr);
                    $indstart=($i<=$levelUp)?0:$levelUp;
            	$startDoc=$ptarr[$indstart];
                    if(($i<$levelMin)&&($levelMin!=0)) return "";
            }