TPL-IF by Sander v.2.3.1
Расширение функционала стандартного шаблонизатора с помощью тегов условий 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 - разрешить комментарии
&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 - 17.1
История изменений
v.2.3.1 - 29.09.2024
+ Добавлена поддержка DLE 17.1
v.2.2 - 01.08.2022
* Изменен метод проверки лицензии. Теперь модуль может работать одновременно на нескольких зеркалах
* Немного оптимизирован код для вложенных условий.
- Удалена поддержка PHP версии 5.x и 7.0
+ Добавлена поддержка работы модуля в main.tpl при просмотре полной новости
С уважением,
Олег Александрович a.k.a. Sander