Курс: 1 USD = 99 RUB

SanDev's Shop

снят с продажи

››› TPL-IF by Sander v.2.3

Опубликован: 2021-08-01, 16:52

TPL-IF by Sander v.2.3

Расширение функционала стандартного шаблонизатора с помощью тегов условий if, elseif, else.
Данный модуль является продолжением первой версии модуля Расширение функционала шаблонизатора новостей. Условия IF
В этой версии значительно расширен изначальный функционал, а главное добавлены elseif и else.

Область применения по умолчанию проработана под новости в основном контенте (shortstory.tpl, fullstory.tpl) и custom. Но так же модуль можно подключить и шаблоне комментариев.

В модуле поддерживается ряд логических операндов, покажу на примерах:
[if field='текст']  значение поля строго равно указанному в кавычках тексту [/if]
[if field!='текст'] значение поля не равно указанному тексту [/if]
[if field>1] значение поля строго больше единицы [/if]
[if field>=2] значение поля больше либо равно 2 [/if]
[if field<3] значение поля строго меньше 3 [/if]
[if field<=4] значение поля меньше или равно 4 [/if]
[if field~'vk.com'] в тексте поля встречается слово 'vk.com' [/if]
[if field!~'vk.com'] в тексте поля НЕ встречается слово 'vk.com' [/if]

А так же:
[if field] поле не пустое [/if]
[if !field] поле пустое [/if]
[if length.field>40] длина строки поля более 40 символов [/if]


Для полей с датой можно использовать префикс `age.` для получения 'возраста', значение в днях.


[if age.date<=7] дата публикации не более 7 дней назад [/if]
[if age.editdate<=1] сегодня новость была отредактирована [/if]

Так же можно использовать префикс `date.` для использования даты в формате YYYY-MM-DD
[if date.date='2017-10-25'] дата публикации 2017-10-25 [/if]
[if date.date='today'] новость опубликована сегодня [/if]


Если необходимо проверить просто есть ли что-то в поле или оно пусто (не существует), то можно использовать короткую запись:


[if xfvalue_image] картинка есть [/if]
[if !xfvalue_cost] цена не указана [/if]
[if xfvalue_allow_cart && xfvalue_cart_count] есть в наличии [/if]
[if xfvalue_allow_cart && !xfvalue_cart_count] под заказ [/if]

Пример запись:
[if fixed]
	новость зафиксирована 
[else]
	новость не зафиксирована
[/if]

Является аналогом:
[fixed]
	новость зафиксирована
[/fixed]
[not-fixed]
	новость не зафиксирована
[/fixed]


Использование {include file="...php"}


Шаблонизатор DLE обрабатывает подключение php файла в самом конце, в обработчике $tpl->compile();
Данный же модуль обрабатывает данные на лету, что позволяет подключать некий php обработчик который будет выполнять какие-либо действия над новостью при совпадении заданных условий.
К примеру нужно переносить новость в "архив" или убирать с главной если рейтинг достигает некоего порогового значения.
[if category_id!=13 && rating<10]{include file="engine/mods/post_move_archive.php?id={news-id}"}[/if]
[if allow_main && rating<10]{include file="engine/mods/post_move_from_main.php?id={news-id}"}[/if]


Модуль включает в себя возможность вложенных условий, пример:


[if age.date<=7]	<!-- новость была опубликована менее 7 дней назад -->
	[if1 news_read>1000]
		Просматриваемый материал с
		[if2 rating>=4]
			высоким рейтингом!
		[elseif2 rating>=3]
			сомнительным рейтингом.
		[else2]
			низким рейтингом.
		[/if2]
		[if2 comm_num>50]
			Обсуждаемая тема
		[/if2]
	[elseif1 news_read>500]
		Набирает популярность
		[if2 comm_num>30]
			и активно обсуждается
		[/if2]
	[/if1]
[/if]

[if comm_num>10 && news_read>1000]
	новость популярная
	[if1 comm_num>50] и обсуждаемая![/if1]
[/if]


Можно комбинировать условия с помощью операндов && (И) или || (ИЛИ).


[if xfvalue_kp_rating>8 || xfvalue_imdb_rating>8]
	Хороший фильм
[elseif xfvalue_kp_rating>6 || xfvalue_imdb_rating>6]
	Так себе, но посмотреть можно
[elseif xfvalue_kp_rating || xfvalue_imdb_rating]
	плохой фильм
[else]
	рейтинг еще не известен
[/if]


Обновление со старого формата


Старая запись:
[if 5<xfvalue_rating>8] рейтинг находится в пределах между 5 и 8 [/if]

Новая запись:
[if xfvalue_rating>=5 && xfvalue_rating<=8] ... [/if]


ВАЖНО!
При использовании нескольких параметров в одном условии допустимо использование только одного операнда, || или &&
Правильно:
[if rating>4 || news_read>1000] хороший рейтинг или много просмотров [/if]
[if rating<4 && news_read>100 && comm_num=>5] плохой рейтинг, просмотров более 100 и написано 5 или более комментариев [/if]

НЕ правильно:
[if rating>4 && news_read>50 || comm_num>10] ... [/if]


[+] Бонус


В комплекте с модулем идет скрипт обновления информации о новости.
Пример, если рейтинг стал -10, то убираем новость с главной:
[if allow_main && rating<=-10]{include file="engine/mods/postMove.php?news_id={news-id}&allow_main=0"}[/if]

где строка engine/mods/postMove.php?news_id={news-id} обязательная, дальше параметры:
&category=7 - переместить в категорию ID=7
&approve=0 - отправить на модерацию
&allow_main=0 - убрать с главной
&allow_main=1 - выводить на главной
&fixed=0 - снять фиксацию
&fixed=1 - зафиксировать новость
&allow_comm=0 - запретить комментарии
&allow_comm=1 - разрешить комментарии



Для DLE 14.1 и старше


Начиная с этой версии, в код движка была добавлена обработка тегов [if ...]...[/if] и это стало причиной конфликта в использовании этого модуля.
Во избежание конфликта с тегами движка, достаточно в моем модуле добавлять числовой индекс, пример:
[if1 ...]...[else1]...[/if1]


Версия DLE: 13.0 - 14.3

[attachment=19:tpl-if-by-sander.xml]

История изменений


v.2.2 - 01.08.2022
* Изменен метод проверки лицензии. Теперь модуль может работать одновременно на нескольких зеркалах
* Немного оптимизирован код для вложенных условий.
- Удалена поддержка PHP версии 5.x и 7.0
+ Добавлена поддержка работы модуля в main.tpl при просмотре полной новости


С уважением,
Олег Александрович a.k.a. Sander