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

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

Вы не зашли.

#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
Сообщений: 1,523
Рейтинг :   82 
Сайт

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

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

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

Не в сети

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

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   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
Сообщений: 3,538
Рейтинг :   160 
Сайт

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

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

Не в сети

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

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   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
Сообщений: 3,538
Рейтинг :   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
Сообщений: 1,523
Рейтинг :   82 
Сайт

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

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

Не в сети

Подвал раздела

Работает на FluxBB