Salut.
En résumé, voici un comparatif des 2 aproches :
1. le code de [[UltimateParent]] :
// UltimateParent - MODx snippet
// recursively searches the document tree
// and determines the "ultimate" parent
// (the one whose parent is 0)
// of the given document
//
// created 02 Nov 2005 by [email protected]
// released to the public domain
//
// Usage:
// [!Menusnippet?folderid =`[[UltimateParent]]`!]
// [!...!] form must be used so the inner snippet
// is parsed properly.
//
$id = $modx->documentIdentifier;
$pid = $modx->getParent($id,1,"id");
if($pid['id'] == 0) { return $id; }
while ($pid['id'] != 0) {
$id = $pid['id'];
$pid = $modx->getParent($id,1,"id");
}
return $id;
2. le code du hack à la fonction DropMenu proposé par dernier_recours :
if($startFromParent==true)
{
// document id
$cid = $modx->documentObject['id'];
// document parent
$pid = $modx->getParent($cid,1,"id");
$ptarr=array();
$ptarr[]=$cid;
while ($parent=$modx->getPageInfo($pid['id']))
{
$ptarr[]=$parent['id'];
$pid = $modx->getParent($parent['id'],1,"id");
}
$ptarr = array_reverse($ptarr);
$startDoc=$ptarr[0];
}
Résultats des courses (Corrigez moi si je me trompe) ils font pratiquement la meme chose, avec 2 approches légérement différentes.
Personelement je préferre utiliser un snippet [[UltimateParent]], pour ne pas "hacker" ou modifier une fonction existante et bien consolidée.
Par contre une autre question me vient à l’esprit : on me conseille d’insérer le snippet [[!UltimateParent!]] avec les points d’exclamation.
J’en déduit que la fonction sera appelée toujours, indépendament du cache ??
Je perd tous les avantages du cache quand j’utilise une fonction avec les points d’exclamation ??
A+