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

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 этой инфы просто нет -)

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

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

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

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