Модератор форума: Yuri_G  
Условные операторы и системные коды
Модератор форума
Сообщение # 1 | 04:36:06
Условные операторы от новичка до профи

Если вы совершенно не понимаете, как работают условные операторы, и информации в панели управления для вас мало, то я попробую вам объяснить. Самое главное, чтобы вы настроились на то, что это очень просто. Так оно и есть!

И так, начну с понятий. Условные операторы - это специальные коды-символы, которые могут выполнять какие-то сценарии. Вы можете создать совершенно новую опцию на своём сайте, которая собственно не предусмотрена панелью.

Для начала нужно понять и привыкнуть к составляющим частям самого кода сценария, а это:

Код
<?if($код$)?> - это какое-то условие (код), которое говорит оператору с кем мы имеем дело и с чем работать. Заменяем мысленно фразой «Если есть»;

Код
<?else?>- это оператор которое выполнит то, что вы скажете, когда условие не соответствует названным. Мысленно заменяем фразой «Если нет»;

Код
<?endif?> - это конец условного оператора, мысленно заменяем «Конец»;



Теперь разберем простой пример, который приводится в панели управления:

(Из редактора страниц)

Код
<?if($USER_LOGGED_IN$)?>Hello, $USERNAME$<?else?>You are GUEST. Please register.<?endif?>


Что это на нашем языке написано: «Если есть авторизированный пользователь, то «Привет его логину!», а если нет, «Привет Гостю!» и конец.»


Почему? Откуда? Подробней!

Что в данном коде использовалось:

Мы оператору
Код
<?if($код$)?>
сообщили, что наш сценарий направлен, чтобы поздороваться с теми, кто авторизирован. Мы поставили вместо $код$ следующий
Код
$USER_LOGGED_IN$
, то есть сказали «Если есть авторизированный -
Код
<?if($USER_LOGGED_IN$)?>
». После идет какая-то ваша информация доступна только авторизированным. Однако мы попутно можем использовать условие если они не соответствуют названным, а именно у нас не соответствуют Гости. Значит, мы после информации для зарегистрированных вписываем информацию для гостей.

Получаем
Код
<?if($USER_LOGGED_IN$)?> Привет, $USERNAME$ <?else?> Привет Гость!


Осталось закрыть всё это дело концовкой.
Код
<?if($USER_LOGGED_IN$)?> Привет, $USERNAME$<?else?>Привет Гость! <?endif?>


Мы так же можем исключить Гостей совершенно и вывести информацию только зарегистрированным. Для этого просто не используем «Если нет». Получаем следующее:

Код
<?if($USER_LOGGED_IN$)?> Как хорошо, что вы зарегистрировались! <?endif?>


То есть в данном случае фразу «Как хорошо, что вы зарегистрировались!» видят только те, кто вошёл под логином.


Условием для работы операторов может быть любой код, который указан как работающий в каком-то модуле. В нашем случае (редактор страниц) могут примеры:

Выход и вход:

Код
<?if($USER_LOGGED_IN$)?> <a href="$LOGOUT_LINK$">ВЫХОД</a> <?else?> <a href="$LOGIN_LINK$">ВХОД</a> <?endif?>


Дни после регистрации:

Код
<?if($USER_LOGGED_IN$)?>Вы с нами уже$USER_REG_DAYS$ дней!<?else?>Пожалуйста, зарегистрируйтесь. <?endif?>


И так далее.

Условия для сценария можно изменить с помощью дополнительных возможностей, которые поддерживают операторы. Это знаки «=», «>», «<». При необходимости, приравненные разделяются вертикальной чертой. После знака, вы сообщаете оператору на кого направлен весь сценарий.

Код
<?if($код$='условие')?> Я это вижу <?else?> А вот я вижу это<?endif?>


Или

Код
<?if($код$='условие')?> Самое главное, что я это вижу <?endif?>


Пример:

Код
<?if($USER$='Дима')?> Дима, не забудь каждый день читать почту. <?endif?>


То есть, на словах «Если есть логины вошедших и среди них есть Дима (='Дима'), то ему показать это…»

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

Ещё примеры:

Код
<?if($USER$='Mike' or $USER$='Lola')?> Дима и Света, вот тайная ссылочка …. <?endif?>


Группы:

Код
<?if($GROUP_ID$=3 or $GROUP_ID$=4)?>Модеры и Админы, все кликаем на рекламу тут… <?endif?>


И т.д.


Однако операторы могут работать друг в друге.

Пример:

Код
<?if($USER_LOGGED_IN$)?> Привет $USER$! <?if($GROUP_ID$=3 || $GROUP_ID$=4)?> Не забываем кликать на рекламу!<?endif?><?else?>Пожалуйста, зарегистрируйтесь.<?endif?>


Сценарий такой: «Если есть вошедшие, то Привет им, а если среди них есть Админы и Модеры, то добавить Кликаем на рекламу, если есть то кто не вошел, то просим зарегистрироваться и конец.»


Самое главное хорошо подумать, как написать сценарий, какие для этого использовать коды и кому они будут направляться. Можно написать что угодно, что придет на ум. uCoz настолько гибкий, что мне иногда кажется, что он живой и создатели сами точно не знают сколько и чего будет работать. Ну всё есть! Самое главное подумайте.

Теперь напоследок мини-инфо:


Код
* Сколько <?if($код$)?> столько и <?endif?>
* <?else?> нужно, когда выводим инфу для тех, кто не соответствует условиям, в других случаях оно не нужно
* Поддерживаются альтернативные условия or и and (||и [&&)
* Поддерживается вложенность операторов
* Поддерживается сравнение переменных друг с другом: <?if($VAR1$=$VAR2$)?>
* При сравнении текст обязательно должен быть в кавычках: <?if($USER$='Mike') ?>


Вопрос - ответ
Цитата
При создании новых страниц, закачанных через FTР, коды
Код
$SITE_NAME$, $LOGIN_LINK$, $LOGOUT_LINK$
отображаются в виде текста, а не того, чтобы хотелось... Почему они не работают?
$Коды$ будут работать только на динамических страницах, то есть тех, которые созданы в Панели управления через опцию "Создать страницу". В статических страницах, закаченных извне с расширением .html эти $Кода$ работать не будут.
Цитата
Как сделать альтернативные условия, например для кода
Код
$GROUP_ID$
?
Код
<?if($GROUP_ID$=5 or ($GROUP_ID$=4 and $USER$='Alex'))?>...<?endif?>
Цитата
Есть ли операторы, позволяющие пользователю видеть в списке категорий только те, в которые он имеет доступ?
Это можно сделать только строя список категорий вручную. Т.е. проверяете текущю группу и выводите нужный список категорий. Уровнем выше проверяете на необходимый раздел.
Цитата
Код
$GROUP_ID$
не работает в шаблоне мини-чата, почему?
Сообщения чата кешируются, поэтому использовать в чате динамически изменяющиеся коды нельзя.
Цитата
Есть код
Код
$USER_LOGGED_IN$
. А есть ли $USER_LOGGED_OUT$?
Нужно прото сделать отрицание в условии
Код
<?if(!$USER_LOGGED_IN$)?>


Acht
Сообщений: 33
Репутация: 9

Сообщение # 1546 | 13:20:14
Добрый день. Мне нужно изменить страницу добавления новостей, но такого шаблона нет. Использую

Код
<?else(substr($REQUEST_URI$,6,9) = "0-0-0-0-1")?>

Все работает, но в таком случае под палку попадает страница материалов пользователя, у которой в адресе фигурирует 0-0-0-0-17- в этом же месте

Пытаюсь сделать так, что страница добавления и редактирования новости несла больше информации для авторов, благодаря подсказкам, в итоге так или иначе подсказки попадаются на других страницах, которые видят смертные посетители. Прошу помщи
Komoff
Сообщений: 595
Репутация: 276

Сообщение # 1547 | 14:12:49
Acht, а $URI_ID$ там нет?
Acht
Сообщений: 33
Репутация: 9

Сообщение # 1548 | 15:30:53
Komoff, Это давняя проблема, я не могу этого узнать. В верхней панели у меня нет этой вкладки.


Если есть возможность посмотреть, буду признателен
Прикрепления: 5907354.jpg (9.5 Kb)
Miss_Esq
Сообщений: 13859
Репутация: 4159
Уровень замечаний:

Сообщение # 1549 | 15:35:20
Acht, Для админа сайта в Админ баре должен быть типа пункт - Дизайн и в нём - переменные страницы ... $URI_ID$ от туда ..

Acht
Сообщений: 33
Репутация: 9

Сообщение # 1550 | 15:55:34
Miss_Esq, вот мой скриншот выше. Мне многие говорили про такой пункт меню, я его никогда не видел. Может он как-то в настройках выключается не явно (например при отключении визуального редактора или конструктора) - хз. У меня такого пункта нет и я его никогда не видел
Сообщение отредактировал Acht - Воскресенье, 25 Авг 2013, 16:01:15
adminsayta
Сообщений: 47
Репутация: 10

Сообщение # 1551 | 16:10:38
Здравствуйте))

Помогите разобраться с написанием условий, уже голова болит), не могу разобрать.

В общем так:

На персональной странице необходимо чтобы было следующее:

Если пользователь проявлял активность на форуме и комментировал
($_COM_ENTRIES$ $_FORUM_ENTRIES$), но не проявлял активности в других
модулях ($_PUBL_ENTRIES$, $_BLOG_ENTRIES$ и т.д.) то должен стоять 1 текст.

Но если пользователь проявлял активность в других модулях, но не
комментировал и ничего не писал на форуме, то 1 текста видно не должно
быть, а должно быть видна активность в других модулях (2 текст).

И последнее, если пользователь вобще не проявлял активности нигде, то должен быть 3 текст.


Вот примерный набросок моей головоломки) Но так, как я пишу не выходит((

Код
<?if($_IS_ACTIVITY$)?>

         <?if($_COM_ENTRIES$ || $_FORUM_ENTRIES$)?>   

         1текст

         <?else?>

             <?if($_PUBL_ENTRIES$)?>   
             $_PUBL_ENTRIES$   
            <?endif?>   
             2 текст
            <?if($_BLOG_ENTRIES$)?>
           $_BLOG_ENTRIES$
          <?endif?>   

<?endif?>

   <?else?>

   3 текст

<?endif?>

Категорически запрещается любая реклама, в том числе реклама интернет-проектов.
Сообщение отредактировал adminsayta - Вторник, 27 Авг 2013, 16:12:31
SneJik
Сообщений: 12
Репутация: 0

Сообщение # 1552 | 16:28:04
Приветствую.
Решил сделать зависимость между репутацией и постами на форуме.
На форуме должна выводиться примерно такая строка: Репутация: 7 ( 15.89% )
Рядом с целочисленным значением репутации должно выводиться число, которое показывает, сколько процентов составляет $REP_RATING$ от $POSTS$.
Я написал код для этого, но там иногда выводятся числа в периоде ( 15.89898989898989% ).
Код
<?($REP_RATING$/$POSTS$*100)?>

Как к нему применить substr? Или может есть альтернатива?
Сообщение отредактировал SneJik - Среда, 28 Авг 2013, 00:07:06
Ostap-Bender
Сообщений: 1
Репутация: 0

Сообщение # 1553 | 22:43:42
апплет пишет кракозяблы вместо кирилицы и никакой возможности повлиять на кодировку,ни изменение параметра, ни изменение в точке вызова скрипта. Помогите
Уточняю, кракозяблы это одинаковые чёрные ромбики со знаком вопроса посередине
Сообщение отредактировал Ostap-Bender - Среда, 28 Авг 2013, 00:29:00
Maks_Smela
Сообщений: 178
Репутация: 35

Сообщение # 1554 | 23:11:00
Всем привет.
Дайте, пожалуйста рабочий код для вывода фильтров.
Мне нужно вывести каждое значение отдельно из $FILTER2_VALUE$.

Заранее благодарен.
cosskay
Сообщений: 1
Репутация: 0

Сообщение # 1555 | 23:20:53
Подскажите , как можно сделать так чтобы при открытии сайта " ***.at.ua " перенаправлял на другой сайт " ***. lg.ua "? Спасибо.
Maks_Smela
Сообщений: 178
Репутация: 35

Сообщение # 1556 | 23:23:07
cosskay, вот
Код
<head>
  <meta http-equiv="refresh" content="1;URL=***.at.ua " />
  </head>

Правда вы не туда обратились.
Ljubasha
Сообщений: 834
Репутация: 157

Сообщение # 1557 | 23:40:52
Maks_Smela, Например <?if(substr($FILTER3_VALUE$,0,6)='Другое')?>правда<?else?>ложь<?endif?>
где 6, кол-во символов в слове 'Другое' сравнивается со словом 'Другое', если совпадает, то правда иначе ложь, надеюсь понятно изъяснила...
Maks_Smela
Сообщений: 178
Репутация: 35

Сообщение # 1558 | 23:45:32
Ljubasha, ну мне пишет ложь.
Это может быть из-за того, что пробелы в фильтре?
<?if(substr($FILTER2_VALUE$,0,6)='PlayStation 3')?>правда<?else?>ложь<?endif?>
Никак нельзя обойти проблему?
Пару дней назад пробовал нижний пробел ставить, тоже ложь.

Коды которые в паблике, типа вывод фильтра картинкой, вообще не работают... Уже хз че делать.
Сообщение отредактировал Maks_Smela - Вторник, 27 Авг 2013, 23:47:16
Ljubasha
Сообщений: 834
Репутация: 157

Сообщение # 1559 | 23:56:22
Maks_Smela, Сколько символов в слове PlayStation 3?
Maks_Smela
Сообщений: 178
Репутация: 35

Сообщение # 1560 | 00:01:29
Ljubasha, делал 12 и 13 символов, делал с пробелом и без пробела – не выводит ничего.=(В чистом виде все идеально выводит.

Прикрепления: 9299989.jpg (18.9 Kb)
Сообщение отредактировал Maks_Smela - Среда, 28 Авг 2013, 00:04:07
Поиск:
Telegram
Будьте в курсе всех обновлений: подпишитесь на наш официальный Telegram-канал uCoz и задавайте вопросы в чате сообщества!