Столкнулся с такой проблемой где то уже встречалась но форуме необходимо в чанках иметь возможность использовать операторы <? IF ?> <? FOREACH ?> <? MD5 ?> и другие возможности. Способ который предлагали на форуме использование PHX мне не понравилось можно пытаться прикрутить к чанкам Smarty но на мой взгляд много работы ради такого пустяка.
Я предлагаю использовать исполняемые чанки которые отличаются от простых только тем что будут заключены в такую конструкцию [% код чанка %]
Примеры исполняемого чанка:
Пример1:
[%
<?$login=get(’login’)?>
<?if($login):?>
пользователь прошел регистрацию (выдать браузеру)
<?else:?>
пользователь не прошел регистрацию (выдать браузеру)
<?endif?>
%]
Пример2:
[%
<?#определение переменных шаблона?>
<?$a=get(’a’)?>
<?$c=getarr(’c’)?>
<?#вывод шаблона?>
<h2>[+pagetitle+] - [(base_url)][~[+id+]~]</h2>
<?=$a?>
Всего в массиве <?=$c->count?> элементов!
Первый элемент [<?=$c->first->key?>]=><?=$c->first->value?>.
Последний элемент [<?=$c->last->key?>]=><?=$c->last->value?>.
<?foreach($c->arr as $key=>$val):?>
[<?=$key?>]=><?=$val?>
<?endforeach?>
%]
Из первого примера видно что первым делом необходимо определить переменные которые скрипт передал чанку делается это при помощи метода get(name) где name имя переменной взятое в кавычки.
Дальше в шаблоне можно использовать переменную в нашем случае производим проверку $login на true можно отправить переменную на вывод используя конструкцию
<?=$login?> - выдаст браузеру значение переменной $login.
Возможные конструкции:
<? Код ?> - аналогично синтаксису Smarty { Код }
<?#комментарий?> - комментарий
<?=$a?> - вывод в браузер переменной $a
<?=md5($a)?> - вывод в браузер md5 переменной $a
<?if(условие1):?>
действие1
<?elseif(условие2):?>
действие2
<?else:?>
действие3
<?endif?> - конструкция if
<?foreach($arr as $key=>$val):?>
[<?=$key?>]=><?=$val?>
<?endforeach?> - конструкция foreach
Приведенный выше синтаксис является “Альтернативным синтаксисом PHP” данный синтаксис описан в официальном руководстве к PHP. Синтаксис довольно простой, данный подход позволяет использовать в чанках все возможности PHP и обрабатывать все заранее объявленные переменные.
Способ объявить переменную:
$modx->setPlaceholder(’%login’,true);
таким образом переменная задается стандартным для modx образом с единственным отличием перед именем необходимо поместить %.
Если у кого-нибудь есть свои наработки не похожие на PHX, пишите. Если кому интересно моё решение пишите, скину файлы.
Может, я и неправильно поступаю, но мне как-то проще написать сниппет на PHP, чем использовать чанки с расширенными возможностями. Впрочем, PHX я тоже не пользуюсь – пишу при необходимости сниппеты. Наверное, все-таки я совсем неправ

.
Хотя способ довольно интересный. Полезно,когда надо незначительно изменить чанк взависимости от ситуации. Зачем писать целый сниппет ради одной строчки ?:)
Если вы решили не утруждать себя разбираться с PHx и привыкли пользоваться чем-то другим, это не значит что PHx плох. Лично я активно им пользуюсь и нахожу достаточно функциональным. В случае недостатка функциональности всегда можно дописать собственные модификаторы. Конечно foreach там нет, но мне даже не придумать ситуацию, для которой бы это нужно было бы для использования в шаблоне и невозможно было бы обойтись другим способом.
Обычно достаточно if then else. Для вывода чего то в цикле используется Ditto или Wayfinder.
DirectResize 0.9 beta. PHPThumb, sets of configurations, configuration, binded to specific path. No backward compatibility. |
DirectResize 0.9. PHPThumb, наборы параметров, параметры, привязанные к определенным путям. Без обратной совместимости.
Unfortunately, DirectResize project is closed. If you want to continue development, PM me for access to project page on Google Code. К сожалению, проект DirectResize закрыт. Если вы желаете продолжить разработки, обращайтесь через ПМ для получения доступа к репозиторию на Google Code.
[PLUGIN] DirectResize - as Maxigallery but for single images ::
Download :: [url=
http://modxcms.com/forums/index.php/topic,21490]