Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

rss

Вы не зашли.

Объявление

#1 2012-01-07 14:07:37

z41
Новичок
Зарегистрирован: 2012-01-04
Сообщений: 8
Рейтинг :   
Профиль

Условные блоки. Мелкий хак

Думаю, что многим в стандартном шаблонизаторе 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].

Критика хака всячески приветствуется big_smile

Отредактированно z41 (2012-01-07 14:08:41)

Неактивен

 

#2 2012-01-07 14:20:45

ROZARD
Модератор
Откуда: Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1523
Рейтинг :   82 
Профиль  Вебсайт

Re: Условные блоки. Мелкий хак

Что то я часто шокироваться стал big_smile
Ну если хочется иметь такие блоки то зачем лезть в класс шаблонизатора и править его, если можно сделать плагином.
А по условным блокам то они и так есть:

В классе tpl (старый шаблонизатор) добавлена новая возможность - условные блоки, зависящие от текущего местоположения на сайте [ifhandler:Plugin:Handler], [ifhandler:Plugin:], [ifhandler:Plugin]

Неактивен

 

#3 2012-01-07 14:24:41

Wolverine
Модератор
Откуда: Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3538
Рейтинг :   160 
Профиль  Вебсайт

Re: Условные блоки. Мелкий хак

Проблема в том, что ты заменил стандартный байндинг переменных к шаблону, поэтому чтобы хак заработал необходимо хакнуть и все места в плагинах или движке, где происходят нужные вызовы. А это уже очень и очень грубо smile

Если такой хак и делать, то в виде [flag="myFlag"] text [/flag], и отдельно проверять выражение в скобочках, содержит ли оно какое-то значение или нет.

А лучше просто использовать новый шаблонизатор.

Неактивен

 

#4 2012-01-07 14:29:39

z41
Новичок
Зарегистрирован: 2012-01-04
Сообщений: 8
Рейтинг :   
Профиль

Re: Условные блоки. Мелкий хак

Ну я же написал - это мелкий хак, а не плагин ;-) Сделано на скорую руку.

А это:

В классе tpl (старый шаблонизатор) добавлена новая возможность - условные блоки, зависящие от текущего местоположения на сайте [ifhandler:Plugin:Handler], [ifhandler:Plugin:], [ifhandler:Plugin]

- иной функционал. Мой хак я использую, например, чтобы в одном шаблоне нарисовать и форму, и вывод результатов и еще всякие плюшки и при необходимости их скрыть/показывать, а не плодить стопицот шаблонов. И чтобы не засорять программный код лишними условными блоками, т.е. в конечном счете для того, чтобы писать меньше, эффективнее и читабельнее.

Неактивен

 

#5 2012-01-07 14:32:05

z41
Новичок
Зарегистрирован: 2012-01-04
Сообщений: 8
Рейтинг :   
Профиль

Re: Условные блоки. Мелкий хак

Wolverine: хм... этот момент немного не понял. Зачем еще что-то менять? Можно продолжать работать с этим классом как и раньше, не передавая массив флагов.

Неактивен

 

#6 2012-01-07 14:36:56

z41
Новичок
Зарегистрирован: 2012-01-04
Сообщений: 8
Рейтинг :   
Профиль

Re: Условные блоки. Мелкий хак

Раньше вторым аргументов передавался массив с одним элементом - 'vars'. А теперь можно передавать как с одним ('vars'), так и с двумя ('vars', 'flags'). Т.е. в движке ничего переделывать больше не надо. Просто при необходимости использовать эту фишку в своих плагинах. Может я просто чего-то не понимаю, но у меня все пока что работает smile

Неактивен

 

#7 2012-01-07 14:44:53

Wolverine
Модератор
Откуда: Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3538
Рейтинг :   160 
Профиль  Вебсайт

Re: Условные блоки. Мелкий хак

Ты не понял, фишку ты зачем сделал? Чтобы использовать только в своих разработках, которые никому не видны, тогда все ОК. Как решение, которое можно применить для всех уже существующих плагинов это не подходит, так как потребует их модификации. То есть зачем такое искусственное ограничение? Зачем что-то передавать в какой-то новой дополнительной переменной flags, когда можно изменить логику хака и проверять сразу значение внутри блока, это не обязательно должен быть параметр, который передается плагином, это может быть и уже готовая внутренняя переменная, например имя пользователя {username}, тогда будет рабочий блок [flag="{username}"]Привет[/flag]

Неактивен

 

#8 2012-01-07 14:45:19

ROZARD
Модератор
Откуда: Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1523
Рейтинг :   82 
Профиль  Вебсайт

Re: Условные блоки. Мелкий хак

z41, Подобным подходом ты лишь себе создаешь проблемы в будущем когда придется обновляться...
Ну вот что тебе мешает воспользоваться:
$tvars['regx']['/\[moj-blok\](.*?)\[\/moj-blok\]/si'] = '';
[moj-blok]Будет скрыто[/moj-blok]

Неактивен

 

#9 2012-01-07 14:53:36

Wolverine
Модератор
Откуда: Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3538
Рейтинг :   160 
Профиль  Вебсайт

Re: Условные блоки. Мелкий хак

z41, то есть хак нужен тогда, когда мы не знаем какие условия пользователь захочет использовать, дать ему гибкость, что в случае прописывания flags вручную ничем не отличается от использования regx, кроме как количеством кода.

Неактивен

 

#10 2012-01-07 14:55:26

z41
Новичок
Зарегистрирован: 2012-01-04
Сообщений: 8
Рейтинг :   
Профиль

Re: Условные блоки. Мелкий хак

Ну вот что тебе мешает воспользоваться:

имхо несколько неудобно. Про обновление - полностью согласен. Критика понята и принята к сведению smile

Неактивен

 

#11 2012-01-07 15:04:43

ROZARD
Модератор
Откуда: Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1523
Рейтинг :   82 
Профиль  Вебсайт

Re: Условные блоки. Мелкий хак

Как альтернатива делать всё на шаблонизаторе Twig там многие моменты им очень удобно и просто делать...

Неактивен

 

Board footer

Powered by FluxBB

[ Generated in 0.009 seconds, 17 queries executed ]