Как правильно поставить условия в MODX Revo

Мне нужно поставить 2 условия:
Первое:
Чтобы у дочерних элементов 2 уровня у родителей (с id=8 и id=40) был один фрагмент на вывод, а у других уровней (1ый, 3ий и последующие) другой фрагмент кода.
Например:
Директор
-Зам.директор
--Помощник зам.директор
---Начальник отдела
Нужно чтобы у помощника был один код на вывод а у зама и начальника другой.

Второе:
Как поставить условие на наличие дочерних элементов?
Ну типа если есть дочери то это иначе то.
Влад
09 апреля 2017, 09:11
modx.pro
1
4 238
0

Комментарии: 11

Гриборий
09 апреля 2017, 15:09
0
Параметры шаблонов pdoTools смотрите. Можно и задать условие и просто от порядка отталкиваться.
    Гриборий
    09 апреля 2017, 15:19
    0
    А проверку на родительство можно делать, скажем так, теоретическую: проверять isfolder у ресурса, и практическую: проверять, возвращает ли что-нибудь сниппет, выводящий потомков, например:
    {if 'pdoResources' | snippet ?}Код родителя{/if}
      Влад
      09 апреля 2017, 18:36
      0
      Спасибо за совет, но как-то не разобрался как там задать условие для 2 уровня вложенности. Там есть условия для порядка, а вот для дочерей не видно.
        Гриборий
        09 апреля 2017, 19:32
        0
        В tplCondition указываете parent, в conditionalTpls массив [идРодителя => чанк,...].
      Андрей П
      10 апреля 2017, 04:43
      -1
      1. Делаете вызов pdoResources, в чанке (на Fenom) которого указываете:
      {if $parent in [8,40]}один вывод{elseif $parent in [2]}Если нужен вывод для родителя с ид2, пишем, если нет, оставляем пустым{else}другой вывод{/if}
      2.
      {if 'pdoResources' | snippet:['parents'=>id родителя] ?}{'pdoResources' | snippet:['parents'=>id родителя]}{else}всё, что должно быть, если вывода нет{/if}
        Максим Кузнецов
        10 апреля 2017, 08:29
        2
        +3
        Не нужно 2 раза вызывать один и тот же сниппет:

        {set $result = $_modx->runSnippet('!pdoResources', [
        	'parents' => id родителя
        ])}
        
        {if $result | length > 0}
        	{$result}
        {else}
        	//если вывода нет
        {/if}
          Андрей П
          10 апреля 2017, 10:56
          0
          Да, хотел также написать, подумал, может человек не поймет
        Влад
        10 апреля 2017, 09:41
        0
        По поводу первого:
        Я могу вручную указать только родителей верхнего уровня 8 и 40. У них куча дочерей которые будут добавляться и меняться, поэтому id дочерних элементов не должны фигурировать.
        Есть ли возможность указывать уровень вложенности? Если вложенность 2 уровня тогда один код иначе другой. Не знаю как поставить это условие.
        По поводу второго решил через isfolder.
          Гриборий
          10 апреля 2017, 11:40
          0
          Ну надо же их как-то различать. Можно написать сниппет, считающий родителей, или можно как-то маркировать сами ресурсы, напр использовать разные шаблоны ддя разных уровней.
          Andrei D.
          10 апреля 2017, 10:34
          0
          <3 google
          $id = $modx->resource->get('id');
          $levelcount = count($modx->getParentIds($id));
          $output .= $levelcount;
          return $output;
            Andrei D.
            10 апреля 2017, 11:08
            3
            0
            ну или эпичней
            <?php
            $id = $modx->resource->get('id');
            $depth .= count($modx->getParentIds($id));
            $level = 'level_';
            $chunk = $modx->getOption($level.''.$depth,$scriptProperties, '');
            if (preg_match('/^@INLINE/',$chunk)) {
                return substr($chunk, 7);
            }
            * на всякий тоже можно оставить
            } else {
                  return $modx->getChunk($chunk);
            }


            [[!hi?
            &level_1=`@INLINE hi`
            &level_2=`@INLINE hello`
            &level_3=`@INLINE good`
            ]]
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              11