Master Опубликовано 14 Ноября 2006 Жалоба Поделиться Опубликовано 14 Ноября 2006 (изменено) Использование логических конструкций в 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. Изменено 18 Января 2007 пользователем Master Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
vasyast Опубликовано 14 Ноября 2006 Жалоба Поделиться Опубликовано 14 Ноября 2006 Из нашей wiki взял? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Destruction Опубликовано 14 Ноября 2006 Жалоба Поделиться Опубликовано 14 Ноября 2006 (изменено) vasyast, грамотно так излагаешь -)) Респект. Автор, я бы ещё раписал поподробнее про собственные переменные, и про использование $this->ipsclass. Изменено 14 Ноября 2006 пользователем Destruction Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Master Опубликовано 14 Ноября 2006 Автор Жалоба Поделиться Опубликовано 14 Ноября 2006 Вася, я что-то даже не смотрел в wiki Пошел искать в нашей wiki статью подобную =) Да уж. Вот про ипкласс видел а про условия нет Ну ладно, тема все равно не помешает. Только тогда уж надо сделать полностью с объяснением даже таких ператоров как равно и т.д. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
vasyast Опубликовано 14 Ноября 2006 Жалоба Поделиться Опубликовано 14 Ноября 2006 Вася, я что-то даже не смотрел в wiki Пошел искать в нашей wiki статью подобную =) Да уж. Вот про ипкласс видел а про условия нет Ну ладно, тема все равно не помешает. Только тогда уж надо сделать полностью с объяснением даже таких ператоров как равно и т.д. Я эту статью в wiki перевел и дополнил теорией еще к 1 сентября (дню знаний). Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Garret Опубликовано 14 Ноября 2006 Жалоба Поделиться Опубликовано 14 Ноября 2006 Какая логика ХТМЛ? Логика в шаблонах звучало бы уместнее. А то такое впечатление что логичиские операции возможны в самом html'е. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Master Опубликовано 14 Ноября 2006 Автор Жалоба Поделиться Опубликовано 14 Ноября 2006 Сделано Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
sudmed Опубликовано 14 Ноября 2006 Жалоба Поделиться Опубликовано 14 Ноября 2006 (изменено) Пользователи (все, т.к. id > 0 )Гости (id <= 0 )почему не id <> 0 и id == 0 соответственно?Есть ли разница?"<else>" если истинное условие if не выполняется то выполняется блок кода, идущий после elseА есть ли подобие elseif? Как-то нужен был такой оператор, но не получилось. Изменено 14 Ноября 2006 пользователем sudmed Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Destruction Опубликовано 14 Ноября 2006 Жалоба Поделиться Опубликовано 14 Ноября 2006 (изменено) Судя по этой строчке: $html = preg_replace( "#(?:\s+?)?<else if=[\"'](.+?)[\"']>(.+?)</if>#ise", "\$this->_statement_elseif('\\1', '\\2')", $html ); Есть -)) PS: Надо покапаться, нету ли там случаем CSS, конечной админская панель, но всё-таки -) PPS: В Wiki почему-то про elseif не слухом, ни духом.. Изменено 15 Ноября 2006 пользователем Destruction Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Fixed Опубликовано 24 Ноября 2006 Жалоба Поделиться Опубликовано 24 Ноября 2006 Можно ли так же ставить условия на "Доп. поля профиля"? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Master Опубликовано 24 Ноября 2006 Автор Жалоба Поделиться Опубликовано 24 Ноября 2006 Попробуйте Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Fixed Опубликовано 24 Ноября 2006 Жалоба Поделиться Опубликовано 24 Ноября 2006 Знать бы еще в какую сторону копать. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 24 Ноября 2006 Жалоба Поделиться Опубликовано 24 Ноября 2006 PS: Надо покапаться, нету ли там случаем CSS, конечной админская панель, но всё-таки -)CSS здесь точно нет.Может ты имел ввиду XSS? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
OverHerz Опубликовано 24 Ноября 2006 Жалоба Поделиться Опубликовано 24 Ноября 2006 Знать бы еще в какую сторону копать.если в теме, то это выглядит так <if="author['field_3'] != """> где 3 - id дополнительной строки профиля Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Fixed Опубликовано 24 Ноября 2006 Жалоба Поделиться Опубликовано 24 Ноября 2006 Поробовал:<if="ipb.member['field_1']= "test"">test</if>test не выводится ни при каких условиях, также как {ipb.member['field_1']} выводит пустоту.Мне надо получить поле не автора топика, а человека, открывающего конкретную страницу.зы: версия 2.1 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
OverHerz Опубликовано 24 Ноября 2006 Жалоба Поделиться Опубликовано 24 Ноября 2006 = - это оператор присваивания, == - оператор сравнения в этой доп. строке у вас написано test ? попробуй <if="ipb.member['field_1'] != ''"> test </if> Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Fixed Опубликовано 24 Ноября 2006 Жалоба Поделиться Опубликовано 24 Ноября 2006 Да я пробую просто {ipb.member['field_1']} безо всяких условий - в результате выводится пустота, а {ipb.member['id']} прекрасно выводит id текущего мембера. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Aliance spb Опубликовано 24 Ноября 2006 Жалоба Поделиться Опубликовано 24 Ноября 2006 Написано же, author['field_№'] Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Fixed Опубликовано 24 Ноября 2006 Жалоба Поделиться Опубликовано 24 Ноября 2006 Написано же, author['field_№']Причем тут author? Мне не author нужен.author в global_board_header вообще не работает Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
OverHerz Опубликовано 24 Ноября 2006 Жалоба Поделиться Опубликовано 24 Ноября 2006 author в global_board_header вообще не работаетеще бы он там работал, там таких входящих переменных нету Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Fixed Опубликовано 25 Ноября 2006 Жалоба Поделиться Опубликовано 25 Ноября 2006 author в global_board_header вообще не работаетеще бы он там работал, там таких входящих переменных нетуЯ его и не исполюзую там.Вопрос остается в силе: как получить значение дополнительных текстовых полей по аналогии с ipb.member['id']? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Aliance spb Опубликовано 26 Ноября 2006 Жалоба Поделиться Опубликовано 26 Ноября 2006 Непонял, каких? И зачем их вставлять в хеадер? ЗЫ: Я думал тебе в РендерРоу надо... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Fixed Опубликовано 26 Ноября 2006 Жалоба Поделиться Опубликовано 26 Ноября 2006 Непонял, каких? И зачем их вставлять в хеадер? ЗЫ: Я думал тебе в РендерРоу надо...В смысле, каких? field_1, field_2, field_3 и т.д.Зачем мне вставлять? Надо. проверку надо на значение сделать. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
freeman85 Опубликовано 30 Ноября 2006 Жалоба Поделиться Опубликовано 30 Ноября 2006 (изменено) а дату сравнить можно? типо <if="ipb.member['joined'] < '1.10.2006'"> чет пытался сделать, не вышло :\ Изменено 30 Ноября 2006 пользователем freeman85 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Destruction Опубликовано 30 Ноября 2006 Жалоба Поделиться Опубликовано 30 Ноября 2006 PS: Надо покапаться, нету ли там случаем CSS, конечной админская панель, но всё-таки -)CSS здесь точно нет.Может ты имел ввиду XSS?Неа, именно CSS :-) Там же идёт preg_replace( "//e" ); Флаге e - проще говоря eval, ещё то зло :-) А XSS в админке при настройке скина - это уже несколько бредово звучит :-) __________________________________________________________________ 1. Даты так не сравнивают, дата там несколько в другом формате -) 2. Раз не выходит, то скорее всего в ipb.member этой инфы просто нет -) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.