Страница 1 из 1

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

Добавлено: 27.08.2007 1:54
ALER
Опять появилось немного времени, и я решил продолжить свои занятия стилем 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.

Добавлено: 27.08.2007 4:09
RedNaxi
просто нужно полностью писать условие те иф( переменная == пер1 || переменная == пер2) ваша же запись удовлетворяет синтаксису, но не решает поставленной задачи потому что условие иф (условие1 или условие2) верно в случае если хотя бы одно из условий 'условие' верно, а значит по вашей записи условие1 это что то равно чему то а условие два это просто переменная... надеюсь я достаточно понятно объяснил... пишу с телефона поэтому не могу на коде наглядно показать:(

Добавлено: 27.08.2007 4:40
Veem
Да, именно так.
Постараюсь пояснить более наглядно.

Синтаксис условия в обобщенном случае примерно такой: if(условие1 || условие 2)
При этом условие - это выражение, а выражением является как $a=4, так и $a==4, а также просто $a.
При этом в первом случае результат - всегда TRUE (и переменная принимает значение 4), во втором - результат TRUE, если переменная содержит число 4; а в третьем - ваш случай - результат равен TRUE, только когда переменная не пуста и не равна нулю.
То есть вам нужно к значениям переменной в условии добавить ее имя в каждом случае и оператор сравнения, тогда все будет работать.

Добавлено: 27.08.2007 9:40
ALER
RedNaxi
Veem
Т. е. если я хочу объединить сравнения в один оператор if, я должен делать так:

Код: Выделить всё

      if ( $folder_image == $images['folder_new'] || $folder_image == $images['folder_hot_new'] || $folder_image == $images['folder_sticky_new'] || и так далее ) 
И результат будет TRUE только в том случае, если при сравнении получился хоть один TRUE.
Ясно, спасибо.

Добавлено: 27.08.2007 13:26
Alek$
Да, именно так.