Оператор ИЛИ - что я делаю не так?

Форум для авторов модов для phpBB 2.0.x. Здесь можно попросить помощи в разработке у коллег.

Оператор ИЛИ - что я делаю не так?

Сообщение ALER 27.08.2007 1:54

Опять появилось немного времени, и я решил продолжить свои занятия стилем subSilverTxt. На очереди - merge-mod.

Я резко сокращаю число фолдеров топиков за счет абсолютно ненужных. Ранее было 10 фолдеров, я свожу их до четырех. Попробовал объединить их по ИЛИ (использовал or), но "номер не прошел", и я просто перебрал почти все варианты. Это было во viewtopic.php

В моде склеивания тем, в топик-листе добавляется еще десяток фолдеров - и все абсолютно ненужные. И я опять попробовал оператор ИЛИ (уже в виде ||) - и опять не получилось...

Принцип переделки под текстовые фолдеры у меня такой. Я не отслеживаю и не дублирую формирование каждого варианта фолдера, а перед формированием массива для темплейта устраиваю проверку, какой графический фолдер был выбран. Пр этом выбран может быть только один. В зависимости от результата выбирается тот или иной фолдер текстовый. Вот вариант кода, который почему-то не выполняется:

Код: Выделить всё
      if ( $folder_image == $images['folder_new'] || $images['folder_hot_new'] || $images['folder_sticky_new'] || $images['folder_announce_new'] || $images['folder_global_announce_new'] || $images['folder_global_announce_new_own'] || $images['folder_new_own'] || $images['folder_hot_new_own'] || $images['folder_sticky_new_own'] || $images['folder_announce_new_own'] )
      {
      $folder_txt = $lang['Txt_folder_new_posts'];
      }
      else if ( $folder_image == $images['folder_locked'] || $images['folder_locked_own'] )
      {
      $folder_txt = $lang['Txt_folder_no_new_posts_locked'];
      }
      else if ( $folder_image == $images['folder_locked_new'] || $images['folder_locked_new_own'] )
      {
      $folder_txt = $lang['Txt_folder_new_posts_locked'];       
      }
      else
      {
      $folder_txt = $lang['Txt_folder_no_new_posts'];
      }

При этом фрагменте на экране оранжевые плюсы у каждого топика, т. е. все топики обозначаются как имеющие новые посты, что не соответствует действительности. Если же сделать так:
Код: Выделить всё
      if ( $folder_image == $images['folder_new'] )
      {
      $folder_txt = $lang['Txt_folder_new_posts'];
      }
      else if ( $folder_image == $images['folder_hot_new'] )

и т. д., фолдеры проверяются по одному, то все работает правильно. Но уж очень это громоздко...

Что я делаю не так?

P. S. Старался как мог соблюсти Правила форума. При предварительном просмотре тщательно сосчитанное количество строк кода = 23.
Алексей aka ALER
Аватара пользователя
ALER
phpBB 2.0.5
 
Сообщения: 225
Зарегистрирован: 09.12.2004 1:00
Откуда: Москва

Сообщение RedNaxi 27.08.2007 4:09

просто нужно полностью писать условие те иф( переменная == пер1 || переменная == пер2) ваша же запись удовлетворяет синтаксису, но не решает поставленной задачи потому что условие иф (условие1 или условие2) верно в случае если хотя бы одно из условий 'условие' верно, а значит по вашей записи условие1 это что то равно чему то а условие два это просто переменная... надеюсь я достаточно понятно объяснил... пишу с телефона поэтому не могу на коде наглядно показать:(
Программирую всякую чушь за еду.
Контакт
Над этим, и не только, я когда-то работал.
Аватара пользователя
RedNaxi
phpBB 2.0.18
 
Сообщения: 1127
Зарегистрирован: 21.02.2007 3:05
Откуда: BMK :)

Сообщение Veem 27.08.2007 4:40

Да, именно так.
Постараюсь пояснить более наглядно.

Синтаксис условия в обобщенном случае примерно такой: if(условие1 || условие 2)
При этом условие - это выражение, а выражением является как $a=4, так и $a==4, а также просто $a.
При этом в первом случае результат - всегда TRUE (и переменная принимает значение 4), во втором - результат TRUE, если переменная содержит число 4; а в третьем - ваш случай - результат равен TRUE, только когда переменная не пуста и не равна нулю.
То есть вам нужно к значениям переменной в условии добавить ее имя в каждом случае и оператор сравнения, тогда все будет работать.
Between tomorrow and today there is a bridge across forever...
Аватара пользователя
Veem
phpBB 1.2.0
 
Сообщения: 18
Зарегистрирован: 20.08.2007 5:02

Сообщение ALER 27.08.2007 9:40

RedNaxi
Veem
Т. е. если я хочу объединить сравнения в один оператор if, я должен делать так:
Код: Выделить всё
      if ( $folder_image == $images['folder_new'] || $folder_image == $images['folder_hot_new'] || $folder_image == $images['folder_sticky_new'] || и так далее )

И результат будет TRUE только в том случае, если при сравнении получился хоть один TRUE.
Ясно, спасибо.
Алексей aka ALER
Аватара пользователя
ALER
phpBB 2.0.5
 
Сообщения: 225
Зарегистрирован: 09.12.2004 1:00
Откуда: Москва

Сообщение Alek$ 27.08.2007 13:26

Да, именно так.
Useful links: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.


Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
phpBB 3.0.2 с предустановленной русификацией
Аватара пользователя
Alek$
Модератор
Модератор
 
Сообщения: 1532
Зарегистрирован: 03.08.2005 13:46
Откуда: Новосибирск


Вернуться в Для авторов (phpBB 2.0.x)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1