On March 26, 2019 we launched new MODX Forums. Please join us at the new MODX Community Forums.
Subscribe: RSS
  • Скину мысли по горячим следам (авось кому пригодится) - потом вообще забуду как что делал ))

    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+] &#91;[+wf.subitemcount+]&#93;’,’[+wf.link+]’);[+wf.wrapper+]
    TR.hereTpl
    d.add([+wf.docid+],0,’<font color=#800>[+wf.linktext+] &#91;[+wf.subitemcount+]&#93;</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+] &#91;[+wf.subitemcount+]&#93;</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>
    и т. д. Примеры скриптов можно найти здесь. Возможно что-то упустил (в голове каша, но потом бы вообще это не написал) - спрашивайте, отвечу как буду на форуме.
    • жж0шь!
      пихай в подпись ссылку.
        [img]http://jurist-info.ru/pic/rrr.jpg[/img]

        Безжалостный пияр!
        Artima -- неуч!
        Осторожно: преступная локализация -- modx-cms.ru
        Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

        Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun
      • Исполнено smiley
        Обновил первый пост:
        1. Так как оказалось, что дерево уже работает с любой вложенностью - вмочил в примере 2 нуля, тобишь "искать от корня" и "до глубины души". Кто захочет сие ограничить - читайте доки по Wayfinder или подбирайте цифры в &startId=`0` и &level=`0`.
        2. Добавил в вызов (и соотв. чанки) определение местонахождения - теперь папка активного документа и сам документ подсвечиваются цветом.
        • Это меню для админки?
          • Нет, для навигации по сайту простыми смертными smiley При желании можно и в админку засунуть, только зачем?
            • Если заменить содержимое чанков:
              TR.inner.HereTpl
              d.add([+wf.docid+],[[UltParent?id=`[+wf.docid+]`]],’<font color=#800>[+wf.linktext+]</font>’,’[+wf.link+]’,’’,’’,’[[IcoFol?docid=`[+wf.docid+]`]]’);[+wf.wrapper+]
              TR.inner.rowTpl
              d.add([+wf.docid+],[[UltParent?id=`[+wf.docid+]`]],’[+wf.linktext+]’,’[+wf.link+]’,’’,’’,’[[IcoFol?docid=`[+wf.docid+]`]]’);[+wf.wrapper+]
              А в сниппете IcoFol написать:
              <?php
              $d = isset($depth) ? $depth : 0;
              $fs = isset($fields) ? $fields: 0;
              $da = $modx->getChildIds($docid, $d);
              $df = $modx->getDocuments($da,$fields=($fs));
              $cnt = (count($da) - count($df));

              if ($cnt>0) {$ifz = ’http://site.ru/assets/templates/шаблон/путь_к_иконкам/folder.gif’;}
              return $ifz;
              ?>
              То даже при недостаточной глубине вывода документов в дереве, папки визуально будут показаны папками, а не документами. Насколько это нагружает сервер, сказать не могу - в своем конкретном случае особой разницы (в миллисекундах) не заметил.

              P.S. Наверняка проще посмотреть атрибут "папка или нет" документа, чем считать кол-во документов. Но пока на это нет времени (разбираться как его звать и т. п.) - сделал через то, что уже было под рукой.

              UPD: Нашлось время заглянуть в БД smiley Код IcoFol с проверкой атрибута "папка или нет":
              <?php
              $q="SELECT `isfolder` FROM `mx_site_content` WHERE `id`=’$docid’";
              $q=mysql_query($q); $r=mysql_fetch_array($q);

              if ($r[isfolder] == 1) {$ifz = ’http://site.ru/assets/templates/шаблон/путь_к_иконкам/folder.gif’;}
              return $ifz;
              ?>
              • Quote from: D.SID at Apr 10, 2009, 06:28 PM

                2. Если нужно сделать дерево с возможностью индексации ссылок поисковиками - лучше брать реализованные на структуре:
                <ul>
                <li>
                <ul>
                <li>

                Я пока полный ламер, поэтому хотелось бы поподробней smiley
                Спасибо.
                • Воспользовался, скриптом, спасибо. Только поражают воображение количество запросов к базе данных. 400 запросов - при выводе одного из разделов. Придется снижать глубину просмотра дерева.
                    [!ditto? !][!ditto? !][!ditto &margaritto=`yes`!]
                  • где то проскакивала темка про оптимизацию и исправлению Wayfinder, поищите, может помочь
                    • Спасибо. Да, где-то была, но там используется &hideSubMenus. В варианте с этим javascript не подходит. Так как скрипт в этом случае видит первый уровень структуры не папками, а документами. И плюсов не показывает.
                        [!ditto? !][!ditto? !][!ditto &margaritto=`yes`!]