Перейти к контенту

IPB HTML Logic


Рекомендуемые сообщения

Использование логических конструкций в HTML шаблонах форума IPB 2.0 и выше (поддержка логических конструкций в шаблонах появилась в IPB начиная с версии 2.0.0) – это возможность показывать или скрывать некоторые части шаблонов по вашему условию. Условия могут быть заданы исходя из того, что, например, пользователь находится в особенной группе или, что он просматривает определенный форум или, что специальная переменная задана с определённым значением, и многие другие. Используя правильное условие, вы можете управлять содержимым на странице.

 

Где найти редактор для изменения шаблонов форума в Админцентре?

 

Для IPB 2.0.x: Стили → Менеджер стилей → Изменить HTML фрагменты.

Для IPB 2.1.x: ВНЕШНИЙ ВИД → Изменить HTML фрагменты.

 

Принцип работы простейших логических конструкций

Если условие удовлетворяет, то Действие.

<Если = "Условие">
Действие.
</Если>

 

 

Если условие удовлетворяет, то Действие 1, Иначе Действие 2.

<Если = "Условие">
Действие 1.
</Если>
<Иначе>
Действие 2.
</Иначе>

 

Описание операторов

Перечислим некоторые операторы, которые понядобятся для составления условий в логических конструкциях.

1. Операторы сравнения

Оператор Описание

Равно == Возвращает true, если операнды равны.

Не равно != Возвращает true, если операнды не равны.

Больше чем > Возвращает true, если левый операнд больше чем правый.

Больше чем или равно >= Возвращает true, если левый операнд больше чем или равен правому.

Меньше чем < Возвращает true, если левый операнд меньше чем правый операнд.

Меньше чем или равно < = Возвращает true, если левый операнд меньше или равен правому.

 

2. Логические операторы

Оператор Использование Описание

И && expr1 && expr2 Вовращает expr1, если преобразование false. Иначе, возвращает expr2.

ИЛИ II expr1 II expr2 Возвращает expr1, если преобразование true. Иначе, возвращает expr2.

НЕ ! !expr Если expr true, возвращает false; если expr false, возвращает true.

 

 

Пользователи (все, т.к. id > 0 )

 

<if="ipb.member['id'] > 0">
Эта надпись или код будет показываться или обрабатываться только для пользователей.
</if>

 

Гости (id <= 0 )

 

<if="ipb.member['id'] <= 0">
Код код код
</if>

 

Только администраторы

 

<if="ipb.member['mgroup'] == ipb.vars['admin_group']">
Код код код выполняющися для администраторов
</if>

 

Супермодераторы, нерутовские администраторы и просто модераторы

 

<if="ipb.member['mgroup'] == ipb.vars['admin_group'] || ipb.member['is_mod'] || ipb.member['g_is_supmod'] == 1">
код
</if>

 

 

Для отдельного юзера (id - номер пользователя)

 

<if="ipb.member['id'] == {id}">
Код для юзера {id}
</if>

 

 

Для более чем двух пользователей?

 

<if="ipb.member['id'] == {id1} || ipb.member['id'] == {id2}">
Код для юзера {id1} и {id2}
</if>

 

Две группы?

 

<if="ipb.member['mgroup'] == {gid1} || ipb.member['mgroup'] == {gid2}">
Код для  {gid1} и {gid2}
</if>

 

 

Для страниц act= ....

 

Замените 'idx' на нужное.

 

<if="ipb.input['_low_act'] == 'idx'">
код код
</if>

 

 

Для определенного форума

 

<if="ipb.input['showforum'] == {fid}">
Код для форума с id {fid}
</if>

 

 

Темы

 

<if="ipb.input['showtopic'] == {tid}">
Тема с id {tid} .
</if>

 

 

"<else>" если истинное условие if не выполняется то выполняется блок кода, идущий после else.

 

E.G -

 

<if="ipb.member['id'] > 0">
Для пользователей
</if>
<else>
Для гостей
</else>

 

 

Про <elseif>

В 2.2 его просто нет!

Используйте следующее:

<if="что-то">
<if="что-то еще">
то сделать это
<else />
или сделать это вместо
</if>
<else />
нечего делать
</if>

 

 

 

Источник

Дополнение и перевод: Master и vasyast.

Изменено пользователем Master
Ссылка на комментарий
Поделиться на других сайтах

vasyast, грамотно так излагаешь -)) Респект.

 

Автор, я бы ещё раписал поподробнее про собственные переменные, и про использование $this->ipsclass.

Изменено пользователем Destruction
Ссылка на комментарий
Поделиться на других сайтах

Вася, я что-то даже не смотрел в wiki :D

 

Пошел искать в нашей wiki статью подобную =)

 

Да уж. Вот про ипкласс видел а про условия нет ;)

Ну ладно, тема все равно не помешает. Только тогда уж надо сделать полностью с объяснением даже таких ператоров как равно и т.д. :)

Ссылка на комментарий
Поделиться на других сайтах

Вася, я что-то даже не смотрел в wiki :D

 

Пошел искать в нашей wiki статью подобную =)

 

Да уж. Вот про ипкласс видел а про условия нет ;)

Ну ладно, тема все равно не помешает. Только тогда уж надо сделать полностью с объяснением даже таких ператоров как равно и т.д. :)

Я эту статью в wiki перевел и дополнил теорией еще к 1 сентября (дню знаний). :)

Ссылка на комментарий
Поделиться на других сайтах

Какая логика ХТМЛ? Логика в шаблонах звучало бы уместнее. А то такое впечатление что логичиские операции возможны в самом html'е.
Ссылка на комментарий
Поделиться на других сайтах

Пользователи (все, т.к. id > 0 )
Гости (id <= 0 )

почему не id <> 0 и id == 0 соответственно?

Есть ли разница?

"<else>" если истинное условие if не выполняется то выполняется блок кода, идущий после else

А есть ли подобие elseif? Как-то нужен был такой оператор, но не получилось.

Изменено пользователем sudmed
Ссылка на комментарий
Поделиться на других сайтах

Судя по этой строчке:

$html = preg_replace( "#(?:\s+?)?<else if=[\"'](.+?)[\"']>(.+?)</if>#ise", "\$this->_statement_elseif('\\1', '\\2')", $html );

 

Есть -))

 

PS: Надо покапаться, нету ли там случаем CSS, конечной админская панель, но всё-таки -)

 

PPS: В Wiki почему-то про elseif не слухом, ни духом..

Изменено пользователем Destruction
Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...
PS: Надо покапаться, нету ли там случаем CSS, конечной админская панель, но всё-таки -)

CSS здесь точно нет.

Может ты имел ввиду XSS?

Ссылка на комментарий
Поделиться на других сайтах

Знать бы еще в какую сторону копать.

если в теме, то это выглядит так

 

<if="author['field_3'] != """>

 

где 3 - id дополнительной строки профиля

Ссылка на комментарий
Поделиться на других сайтах

Поробовал:

<if="ipb.member['field_1']= "test"">

test

</if>

test не выводится ни при каких условиях, также как {ipb.member['field_1']} выводит пустоту.

Мне надо получить поле не автора топика, а человека, открывающего конкретную страницу.

зы: версия 2.1

Ссылка на комментарий
Поделиться на других сайтах

= - это оператор присваивания, == - оператор сравнения

 

в этой доп. строке у вас написано test ?

 

попробуй

 

<if="ipb.member['field_1'] != ''">
test
</if>

Ссылка на комментарий
Поделиться на других сайтах

Да я пробую просто {ipb.member['field_1']} безо всяких условий - в результате выводится пустота, а {ipb.member['id']} прекрасно выводит id текущего мембера.
Ссылка на комментарий
Поделиться на других сайтах

author в global_board_header вообще не работает

еще бы он там работал, там таких входящих переменных нету

Я его и не исполюзую там.

Вопрос остается в силе: как получить значение дополнительных текстовых полей по аналогии с ipb.member['id']?

Ссылка на комментарий
Поделиться на других сайтах

Непонял, каких? И зачем их вставлять в хеадер?

 

ЗЫ: Я думал тебе в РендерРоу надо...

Ссылка на комментарий
Поделиться на других сайтах

Непонял, каких? И зачем их вставлять в хеадер?

 

ЗЫ: Я думал тебе в РендерРоу надо...

В смысле, каких? field_1, field_2, field_3 и т.д.

Зачем мне вставлять? Надо. :D проверку надо на значение сделать.

Ссылка на комментарий
Поделиться на других сайтах

а дату сравнить можно?

 

типо

 

<if="ipb.member['joined'] < '1.10.2006'">

 

чет пытался сделать, не вышло :\

Изменено пользователем freeman85
Ссылка на комментарий
Поделиться на других сайтах

PS: Надо покапаться, нету ли там случаем CSS, конечной админская панель, но всё-таки -)

CSS здесь точно нет.

Может ты имел ввиду XSS?

Неа, именно CSS :-)

 

Там же идёт preg_replace( "//e" );

 

Флаге e - проще говоря eval, ещё то зло :-)

 

А XSS в админке при настройке скина - это уже несколько бредово звучит :-)

 

__________________________________________________________________

 

1. Даты так не сравнивают, дата там несколько в другом формате -)

 

2. Раз не выходит, то скорее всего в ipb.member этой инфы просто нет -)

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.