Вы не зашли.
Страницы 1
Думаю, что многим в стандартном шаблонизаторе NGCMS не хватало условных блоков. Одной из причин появления нового шаблонизатора являлся как раз этот факт, если я правильно понимаю. Я его не ковырял пока что, зато сделал мелкий хак стандартного класса, держите:
// Process logic blocks
if ( isset($vars['flags']) && is_array($vars['flags']) )
{
if (preg_match_all('/\[flag (.+?)\](.+?)\[\/flag\]/is', $data, $parr))
{
foreach ($parr[0] as $k => $v)
{
$data = str_replace($v, (isset( $vars['flags'][$parr[1][$k]] ) && ($vars['flags'][$parr[1][$k]] ) ) ?$parr[2][$k]:'', $data);
}
}
}
Этот код надо вставить в engine\includes\classes\templates.class.php, где-нибудь перед обработкой переменных, т.е. перед строкой 189 (до строки // Process variables)
Использовать следующим образом:
вместо обычного вызова
$tpl->vars('tpl', array('vars' => $vars) );
пишем
$tpl->vars('tpl', array('vars' => $vars, 'flags' => $flags) );
Где $vars и $flags - массивы переменных и условных флагов соответственно. Можно использовать и как обычно, это само собой разумеется.
В шаблоне пишем:
[flag myFlag] text [/flag].
Критика хака всячески приветствуется
Изменено z41 (2012-01-07 14:08:41)
Не в сети
Что то я часто шокироваться стал
Ну если хочется иметь такие блоки то зачем лезть в класс шаблонизатора и править его, если можно сделать плагином.
А по условным блокам то они и так есть:
В классе tpl (старый шаблонизатор) добавлена новая возможность - условные блоки, зависящие от текущего местоположения на сайте [ifhandler:Plugin:Handler], [ifhandler:Plugin:], [ifhandler:Plugin]
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
Проблема в том, что ты заменил стандартный байндинг переменных к шаблону, поэтому чтобы хак заработал необходимо хакнуть и все места в плагинах или движке, где происходят нужные вызовы. А это уже очень и очень грубо
Если такой хак и делать, то в виде [flag="myFlag"] text [/flag], и отдельно проверять выражение в скобочках, содержит ли оно какое-то значение или нет.
А лучше просто использовать новый шаблонизатор.
Не в сети
Ну я же написал - это мелкий хак, а не плагин ;-) Сделано на скорую руку.
А это:
В классе tpl (старый шаблонизатор) добавлена новая возможность - условные блоки, зависящие от текущего местоположения на сайте [ifhandler:Plugin:Handler], [ifhandler:Plugin:], [ifhandler:Plugin]
- иной функционал. Мой хак я использую, например, чтобы в одном шаблоне нарисовать и форму, и вывод результатов и еще всякие плюшки и при необходимости их скрыть/показывать, а не плодить стопицот шаблонов. И чтобы не засорять программный код лишними условными блоками, т.е. в конечном счете для того, чтобы писать меньше, эффективнее и читабельнее.
Не в сети
Раньше вторым аргументов передавался массив с одним элементом - 'vars'. А теперь можно передавать как с одним ('vars'), так и с двумя ('vars', 'flags'). Т.е. в движке ничего переделывать больше не надо. Просто при необходимости использовать эту фишку в своих плагинах. Может я просто чего-то не понимаю, но у меня все пока что работает
Не в сети
Ты не понял, фишку ты зачем сделал? Чтобы использовать только в своих разработках, которые никому не видны, тогда все ОК. Как решение, которое можно применить для всех уже существующих плагинов это не подходит, так как потребует их модификации. То есть зачем такое искусственное ограничение? Зачем что-то передавать в какой-то новой дополнительной переменной flags, когда можно изменить логику хака и проверять сразу значение внутри блока, это не обязательно должен быть параметр, который передается плагином, это может быть и уже готовая внутренняя переменная, например имя пользователя {username}, тогда будет рабочий блок [flag="{username}"]Привет[/flag]
Не в сети
z41, Подобным подходом ты лишь себе создаешь проблемы в будущем когда придется обновляться...
Ну вот что тебе мешает воспользоваться:
$tvars['regx']['/\[moj-blok\](.*?)\[\/moj-blok\]/si'] = '';
[moj-blok]Будет скрыто[/moj-blok]
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
z41, то есть хак нужен тогда, когда мы не знаем какие условия пользователь захочет использовать, дать ему гибкость, что в случае прописывания flags вручную ничем не отличается от использования regx, кроме как количеством кода.
Не в сети
Как альтернатива делать всё на шаблонизаторе Twig там многие моменты им очень удобно и просто делать...
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
Страницы 1