• SanDev.pro
  •  › 
  • Архив
  •  › 
  • Расширение функционала шаблонизатора новостей. Условия IF
Расширение функционала шаблонизатора новостей. Условия IF для DLE

Расширение функционала шаблонизатора новостей. Условия IF

Расширение функционала шаблонизатора новостей. Условия IF

Простой, но многофункциональный хак, позволяющий выводить заданный текст в зависимости от значения полей новости или доп. полей xfields.
Данный хак предназначен для работы только в шаблонах короткой новости, полной новости и в шаблонах тегов custom.


[Поддерживаемые поля]

id - порядковый номер новости (число)
autor - имя автора новости (текст)
date - дата публикации (число, дата в unix формате - 1384805563)
short_story - текст короткой новости (текст)
full_story - в шаблоне короткой новости это количество символов в полном описании. В шаблоне полной новости - сам текст. (число/текст)
title - текст заголовка (текст)
descr - метатег описания (текст)
keywords - метатег "ключевые слова" (текст)
category - список категорий в которых отмечена новость (в старых версиях только первый ID из списка) (текст)
alt_name - заголовок на латинице, для формирования адреса страницы. (текст)
comm_num - количество комментариев (число)
allow_comm - комментарии разрешены (число, 1/0)
allow_main - новость публикуется на главной (число, 1/0)
approve - новость прошла модерацию (число, 1/0)
fixed - новость зафиксирована (число, 1/0)
symbol - символьный код (текст)
tags - первый тег из списка тегов (текст)
news_read - количество просмотров (число)
allow_rate - рейтинг разрешен (число, 1/0)
rating - рейтинг статьи, сумма всех значений (число)
vote_num - количество проголосовавших в рейтинге (число)
votes - голосования в новости (число, 1/0)
view_edit - отображать причину редактирования (число, 1/0)
disable_index - запретить индексацию (число, 1/0)
editdate - дата редактирования (число, дата в unix формате - 1384805563)
editor - имя редактора (текст)
reason - причина редактирования (текст)
user_id - ID автора публикации (число)
xfvalue_xxx - значение доп. поля

Разумеется для некоторых из этих тегов уже предусмотрены фиксированные теги условий, такие как: [fixed]...[/fixed], [comments]...[/comments], [poll]...[/poll], [xfgiven_xxx]...[/xfgiven_xxx] и др.
Но во первых они прописаны не для всех значений и главное - не обладают той гибкостью, что предоставляет данных хак. В чем вы можете убиться посмотрев примеры ниже.


[Примеры использования]

[if id>1000]...[/if] - выведет текст для всех новостей, ID которых строго больше 1000, т.е. 1001, 1002 и т.д.
[if comm_num<=10]мало комментариев[/if] - выведет текст "мало комментариев", если в новости 10 или меньше комментариев
[if tags="2015"]Все фильмы 2015 года[/if] - выведет текст "Все фильмы 2015 года", если в новости в поле тегов введено слово "2015"
Но в то же время, если вы используете поле tags только для указания года, то можно использовать так:
[if tags<2000]ретро[/if] - если год выпуска 1999 и младше, то будет выведен текст "ретро"
[if reason!='']есть причина редактирования[/if] - выведет текст внутри тегов, если есть причина редактирования.
[if reason='']поле причины редактирования не заполнено[/if] - выведет текст внутри тегов, если причина редактирования не указана
[if short_story~'vk.com/video_ext']есть видео с вконтакта[/if] - выведет текст, если в содержимом поля встречается указанный текст

Доп.поля xfields
[if xfvalue_cost>=500]дорогой товар[/if] - если значение доп.поля `cost` больше или равно 500, то будет отображен текст внутри тегов
[if xfvalue_brand='Nokia']телефон нокия[/if] - если в доп.поле `brand` укано значение "Nokia", то будет выведен текст внутри тегов
[if xfvalue_video!~'vk.com/video_ext']нету видео с вконтакта[/if] - выведет текст, если в содержимом поля НЕ встречается указанный текст

Диапазон
[if 500<xfvalue_cost>5000]...[/if] - будет отображен текст, если значение поля в пределах 500 - 4999 включительно
[if 1000<news_read>10000]...[/if] - будет выведен текст внутри тегов, если у новости количество просмотров в пределах 1000 - 9999 включительно


[Перечень поддерживаемых операций]

x<y - строго меньше
x>y - строго больше
x>=y - больше или равно
x<=y - меньше или равно
x=y - строго равно
x!=y - не равно
x~y - строка Y встречается в поле X
x!~y - строка Y не встречается в поле X
y1<x>y2 - диапазон
где:
x - имя поля или доп.поля
y - значение, числовое или текстовое
y1 и y2 - нижняя и верхняя границы для фильтра по диапазону


[Демо]

d101.sandev.pro


[Версия DLE]
любая

[Контакты]
ICQ: 404-037-556
Skype: Sander8804
E-Mail: olalod@mail.ru

С уважением,
Олег Александрович a.k.a. Sander
Комментарии: (18)
  1. foto
    VIP 14 февраля 2015 22:09 #
    Отличный хак, думаю много где применение найдётся!
    0
  2. foto
    Посетитель 16 февраля 2015 19:19 #
    С помощью данного хака можно выводить/скрывать текст в зависимости от не точного значения доп. поля?
    +1
    1. foto
      Администратор 16 февраля 2015 20:49 #
      Не понимаю, это как - "не точное"?
      +1
      1. foto
        Посетитель 16 февраля 2015 20:56 #
        Например если я хочу скрыть/показать контент если в доп. поле присутствует часть ссылки на видео, например http://vk.com/video_ext.php?
        +1
        1. foto
          Администратор 16 февраля 2015 21:53 #
          Добавил.
          [if field~'vk.com']...[/if] - выведет текст, если в поле встречается vk.com
          [if field!~'vk.com']...[/if] - выведет текст, если в поле НЕ встречается vk.com
          +2
  3. foto
    Клиент 20 марта 2015 08:25 #
    Использую данный хак для разного отображения новости в зависимости от категории:
    [if category!='1']тут код шаблона 1[/if]
    [if category='1']тут код шаблона 2[/if]
    При выводе через {custom...} условие не работает. Подскажите пожалуйста, в чем может быть проблема?
    0
    1. foto
      Администратор 29 марта 2015 11:45 #
      Скачайте хак заново.
      Там в конце инструкции маленькое дополнение для файла show.custom.php
      0
  4. foto
    Посетитель 31 марта 2015 18:39 #
    А если, например, где-то новость получила +1 голос (рейтинг), то как это можно выводить?
    0
    1. foto
      Администратор 2 апреля 2015 12:56 #
      vote_num - количество проголосовавших в рейтинге (число)

      [if vote_num>0]текст[/if]
      0
      1. foto
        Посетитель 2 апреля 2015 13:28 #
        Цитата: Sander
        [if vote_num>0]текст[/if]

        Нет, в смысле еще кто-то поставил +1, а уже стоял рейтинг, отличный от нуля?
        0
        1. foto
          Администратор 2 апреля 2015 13:32 #
          Так не получится.
          0
  5. foto
    Посетитель 19 августа 2015 12:21 #
    Спасибо за дополнение!
    С дополнительными полями пользователя в профиле тоже работает если добавить по аналогии код в profile.php
    0
  6. foto
    Клиент 6 октября 2015 23:25 #
    а если xfvalue имеет одновременно несколько значений, сработает? В смысле несколько условий выполнит?
    0
  7. foto
    Посетитель 6 июля 2016 17:17 #
    Подскажите пожалуйста. Есть проблема с параметром autor не корректно работает. Можете подсказать, в чем проблема?

    [if autor={login}]Этот текст будет виден только автору новости[/if]
    [if autor!={login}]А этот текст будет виден всем кроме {login}[/if]


    PS: Не планируется ли обновление? В сторону if else elif ?
    0
    1. foto
      Администратор 6 июля 2016 18:23 #
      [if autor={login}]Этот текст будет виден только автору новости[/if]
      Этот текст будет виден всем, потому что autor и есть {login}. Т.е. autor всегда будет равен {login}.
      Для вашей реализации нужно писать отдельных хак.

      PS. Пока не планируется, не до него. Но желание обновить его - есть.
      0
  8. foto
    Посетитель 11 декабря 2016 08:14 #
    А можно сделать что бы глобально использовать хак? Не только краткой/полной/кастом
    0
    1. foto
      Администратор 11 декабря 2016 12:39 #
      В этой версии это вряд ли будет возможным.
      0
      1. foto
        Посетитель 11 декабря 2016 15:40 #
        Новая версия планируется?
        0
Информация
Посетители, находящиеся в группе {group}, не могут оставлять комментарии к данной публикации.
© Sander-Development. 2009-2024.
При копировании, ссылка на источник обязательна.