We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 21498
    • 11 Posts
    Собственно сабж.

    Есть такая структура документов:
    Категория
    -Подкатгория
    --Страница
    --Страница2
    --Страница3
    -Подкатегория2
    --Страница4
    --Страница5

    Так вот нужно вывести все страницы в такой форме:
    <div>СтраницыX</div>
    используя только id "Категории".
      • 29487
      • 385 Posts
      Только что ведь обсуждали: http://modxcms.com/forums/index.php/topic,37913.0.html
        • 21498
        • 11 Posts
        Немного не то.... не дописал структуру

        Категория
        -Сабкатегория 1
        --Страница 1
        --Страница 2
        ---Подстраница 1
        ---Подстраница 2
        ---Подстраница 3
        --Страница 3
        --Страница 4
        ---Подстраница 1
        ----Сабподстраница 1
        ---Подстраница 2
        ---Подстраница 3
        -Сабкатегория 2
        --Страница 5
        -Сабкатегория 3
        --Страница 6
        --Страница 7
        -Сабкатегория 4
        --Страница 8

        т.е. "страницы" тоже являются папками и метод с &hidefolders не прокатит.
          • 1788
          • 1,103 Posts
          Quote from: nightuser at Jul 23, 2009, 08:44 AM

          Немного не то.... не дописал структуру

          Категория
          -Сабкатегория 1
          --Страница 1
          --Страница 2
          ---Подстраница 1
          ---Подстраница 2
          ---Подстраница 3
          --Страница 3
          --Страница 4
          ---Подстраница 1
          ----Сабподстраница 1
          ---Подстраница 2
          ---Подстраница 3
          -Сабкатегория 2
          --Страница 5
          -Сабкатегория 3
          --Страница 6
          --Страница 7
          -Сабкатегория 4
          --Страница 8

          т.е. "страницы" тоже являются папками и метод с &hidefolders не прокатит.
          Несколько путей.
          1. Написать сниппет.
          2. Использовать Дитто вызовы совместно с phx, тогда и вид можно менять.
            • 21498
            • 11 Posts
            Я вот и пробовал сниппет написать, но функции типа getDocumentChild и пр. дают только первый уровень.

            Был кончено вариант получат массив через getChildIds (или как там функция для получения id...) и потом проверять каждый id, но по-моему как-то коряво... В принципе можно было сделать так:
            <?php
            $childs=$modx->getAllChilds(12); //12 это id "каталога"
            $childs2=$modx->getChildIds(12,  2);
            ...
            ?>

            И отсеить из массива $childs2 все id, которые встречаются в $childs.

            Но есть ли решение более элегантное...
              • 29487
              • 385 Posts
              Почему коряво? Пишем экстендер:
              <?php
              $GLOBALS["level"] = isset($level) ? (int)$level : 1;
              $filters["custom"]["levelFilter"] = array("id","levelFilter"); 
              if (!function_exists("levelFilter")) {
              	function levelFilter($resource) {
              		global $modx,$level;
              		if (count($modx->getParentIds($resource['id'])) == $level) {
              			return 1;
              		} else {
              			return 0;
              		}
              	}
              }
              ?>
              


              Под названием level.extender.inc.php копируем в assets/snippets/ditto/extenders/

              Теперь можно выводить Ditto документы определённого уровня:
              [!Ditto?parents=`0` &depth=`0` &display=`all` &extenders=`level` &level=`2`!]
              где &level - количество предков
                • 21498
                • 11 Posts
                Big thanks

                P.S. с колировкой в [ code ] надо что-то делать... а то комментарии не работают...