Как правильно поставить условия в MODX Revo
Мне нужно поставить 2 условия:
Первое:
Чтобы у дочерних элементов 2 уровня у родителей (с id=8 и id=40) был один фрагмент на вывод, а у других уровней (1ый, 3ий и последующие) другой фрагмент кода.
Например:
Директор
-Зам.директор
--Помощник зам.директор
---Начальник отдела
Нужно чтобы у помощника был один код на вывод а у зама и начальника другой.
Второе:
Как поставить условие на наличие дочерних элементов?
Ну типа если есть дочери то это иначе то.
Первое:
Чтобы у дочерних элементов 2 уровня у родителей (с id=8 и id=40) был один фрагмент на вывод, а у других уровней (1ый, 3ий и последующие) другой фрагмент кода.
Например:
Директор
-Зам.директор
--Помощник зам.директор
---Начальник отдела
Нужно чтобы у помощника был один код на вывод а у зама и начальника другой.
Второе:
Как поставить условие на наличие дочерних элементов?
Ну типа если есть дочери то это иначе то.
Комментарии: 11
Параметры шаблонов pdoTools смотрите. Можно и задать условие и просто от порядка отталкиваться.
А проверку на родительство можно делать, скажем так, теоретическую: проверять isfolder у ресурса, и практическую: проверять, возвращает ли что-нибудь сниппет, выводящий потомков, например:
{if 'pdoResources' | snippet ?}Код родителя{/if}
Спасибо за совет, но как-то не разобрался как там задать условие для 2 уровня вложенности. Там есть условия для порядка, а вот для дочерей не видно.
В tplCondition указываете parent, в conditionalTpls массив [идРодителя => чанк,...].
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}
Не нужно 2 раза вызывать один и тот же сниппет:
{set $result = $_modx->runSnippet('!pdoResources', [
'parents' => id родителя
])}
{if $result | length > 0}
{$result}
{else}
//если вывода нет
{/if}
Да, хотел также написать, подумал, может человек не поймет
По поводу первого:
Я могу вручную указать только родителей верхнего уровня 8 и 40. У них куча дочерей которые будут добавляться и меняться, поэтому id дочерних элементов не должны фигурировать.
Есть ли возможность указывать уровень вложенности? Если вложенность 2 уровня тогда один код иначе другой. Не знаю как поставить это условие.
По поводу второго решил через isfolder.
Я могу вручную указать только родителей верхнего уровня 8 и 40. У них куча дочерей которые будут добавляться и меняться, поэтому id дочерних элементов не должны фигурировать.
Есть ли возможность указывать уровень вложенности? Если вложенность 2 уровня тогда один код иначе другой. Не знаю как поставить это условие.
По поводу второго решил через isfolder.
Ну надо же их как-то различать. Можно написать сниппет, считающий родителей, или можно как-то маркировать сами ресурсы, напр использовать разные шаблоны ддя разных уровней.
<3 google
$id = $modx->resource->get('id');
$levelcount = count($modx->getParentIds($id));
$output .= $levelcount;
return $output;
ну или эпичней
<?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`
]]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.