Скину мысли по горячим следам (авось кому пригодится) - потом вообще забуду как что делал ))
1. Качаем
отсюда архив.
2. Код шаблона:
<script type="text/javascript" src="assets/templates/шаблон/dtree.js"></script>
<link rel="stylesheet" href="assets/templates/шаблон/dtree.css" type="text/css"/>
<div class="dtree">
<p><a href="javascript: d.openAll();">Раскрыть</a> | <a href="javascript: d.closeAll();">Свернуть</a></p>
<script type="text/javascript">
<!--
d = new dTree('d');
d.add(0,-1,'НазваниеДрева');
[[Wayfinder? &startId=`0` &level=`0` &hereTpl=`TR.hereTpl` &innerHereTpl=`TR.inner.HereTpl`
&activeParentRowTpl=`TR.activeParentRowTpl` &rowTpl=`TR.rowTpl`
&innerRowTpl=`TR.inner.rowTpl` &outerTpl=`TR.outer`]]
document.write(d);
//-->
</script>
</div>
3. Чанки:
TR.inner.rowTpl
d.add([+wf.docid+],[[UltParent?id=`[+wf.docid+]`]],’[+wf.linktext+]’,’[+wf.link+]’);[+wf.wrapper+]
TR.outer
[+wf.wrapper+]
TR.rowTpl
d.add([+wf.docid+],0,’[+wf.linktext+] [[+wf.subitemcount+]]’,’[+wf.link+]’);[+wf.wrapper+]
TR.hereTpl
d.add([+wf.docid+],0,’<font color=#800>[+wf.linktext+] [[+wf.subitemcount+]]</font>’,’[+wf.link+]’);[+wf.wrapper+]
TR.inner.HereTpl
d.add([+wf.docid+],[[UltParent?id=`[+wf.docid+]`]],’<font color=#800>[+wf.linktext+]</font>’,’[+wf.link+]’);[+wf.wrapper+]
TR.activeParentRowTpl
d.add([+wf.docid+],0,’<font color=#008>[+wf.linktext+] [[+wf.subitemcount+]]</font>’,’[+wf.link+]’);[+wf.wrapper+]
4. Код сниппета
UltParent:
<?php
if ($id == '') { $id= isset ($id) && intval($id) ? intval($id) : $modx->documentIdentifier; }
$parentIds= $modx->getParent($id,1,'id');
$pid= array_pop($parentIds);
$id= $pid;
return $id;
?>
P.S.
1. Пример работы дерева см. в архиве
example01.html
2. Если нужно сделать дерево с возможностью индексации ссылок поисковиками - лучше брать реализованные на структуре:
<ul>
<li>
<ul>
<li>
и т. д. Примеры скриптов можно найти
здесь. Возможно что-то упустил (в голове каша, но потом бы вообще это не написал) - спрашивайте, отвечу как буду на форуме.