Модератор форума: 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$)?>


fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 346 | 06:30:54
StaLyeR,
Quote (StaLyeR)
А можно сделать так, чтобы "Страница 1" не отображалась в заголовке, а "Страница 2" т.д. показывались?

Можно.
Проверить какая цифра и вывести если цифра не «1»...
Типа:
Code
<?if(substr('<span class="currentPage79">2</span>',28)*1!='1')?>Страница <?substr('<span class="currentPage79">2</span>',28)*1?><?endif?>

Подставить своё.
Quote (StaLyeR)
Это можно реализовать?

Да.

Всё написанное выше - моё личное мнение и на абсолютную правоту не претендует.
Есть вопросы лично ко мне - пиши сюда: http://likbezz.ru/forum/8
StaLyeR
Сообщений: 3
Репутация: 0

Сообщение # 347 | 09:49:08
fflesh, спасибо, все работает как надо happy
SERNOBIL
Сообщений: 3
Репутация: 0

Сообщение # 348 | 21:58:09
Привет народ! Создал выезжающее меню разделов и категорий, построенное на CSS, скрипте и, конечно же HTML.
Сейчас необходимо возле каждой категории вывести количество материалов в ней. Я так понимаю, нужно как-то связать ID категории и количество материалов, находящихся в ней. Информеры не дают желаемого результата. Ссыль на сайт http://ts.ucoz.org

HTML код:
Code
<h3>Тепловозы УЖД</h3>
    <p class="linked">
    <a href="/load/teplovozy_uzhd/147"><font color="DarkOrange">Перейти в раздел</font></a><br/>
    <a href="/load/teplovozy_uzhd/2tu2/148">2ТУ2</a><br/>
    <a href="/load/teplovozy_uzhd/2tu3/149">2ТУ3</a><br/>
    <a href="/load/teplovozy_uzhd/tu1/150">ТУ1</a><br/>
    <a href="/load/teplovozy_uzhd/tu2/151">ТУ2</a><br/>
    <a href="/load/teplovozy_uzhd/tu3/152">ТУ3</a><br/>
    <a href="/load/teplovozy_uzhd/tu4/153">ТУ4</a><br/>
    <a href="/load/teplovozy_uzhd/tu6a/154">ТУ6А</a><br/>
    <a href="/load/teplovozy_uzhd/tu7/155">ТУ7</a><br/>
    <a href="/load/teplovozy_uzhd/tu7a/269">ТУ7А</a><br/>
    <a href="/load/teplovozy_uzhd/tu8/156">ТУ8</a><br/>
    </p>


Добавлю скрин для наглядности:
Сообщение отредактировал SERNOBIL - Четверг, 26 Янв 2012, 22:00:37
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 349 | 22:02:11
SERNOBIL,
Quote (SERNOBIL)
Привет народ! Создал выезжающее меню разделов и категорий, построенное на CSS, скрипте и, конечно же HTML.
Сейчас необходимо возле каждой категории вывести количество материалов в ней. Я так понимаю, нужно как-то связать ID категории и количество материалов, находящихся в ней. Информеры не дают желаемого результата. Ссыль на сайт

И каким боком тут условные операторы и системные коды?
... Сделать то, что ты хочешь, можно только скриптом и информером - категории в JavaScript формате. И то, если этот информер выводит кол-во материалов в категории (лично я не помню, но вроде выводил - нужно проверить).
...

Всё написанное выше - моё личное мнение и на абсолютную правоту не претендует.
Есть вопросы лично ко мне - пиши сюда: http://likbezz.ru/forum/8
Сообщение отредактировал fflesh - Четверг, 26 Янв 2012, 22:02:38
SERNOBIL
Сообщений: 3
Репутация: 0

Сообщение # 350 | 22:10:37
fflesh, вот как раз в скриптах я не шарю... видимо, придётся оставить как есть... печально.. Вот если б увидеть, как устроена переменная $CATEGORIES$, то может быть я чего-нибудь и наковырял бы...
webanet
Сообщений: 24067
Репутация: 4985

Сообщение # 351 | 22:41:05
SERNOBIL, в информере категорий есть $NUM_DATA$
сами материалы в категориях выводятся $NUM_ENTRIES$

ТУТ можно оставить своё мнение по любому вопросу
https://webanetlabs.net/
SERNOBIL
Сообщений: 3
Репутация: 0

Сообщение # 352 | 23:00:37
webanet, информеры в этом меню не помогают. Информация информера не сворачивается. Моё меню сворачивает только прямые ссылки. Остальной "мусор" остаётся снаружи.... я это ещё вчера пробовал + сейчас ещё раз
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 353 | 06:05:42
SERNOBIL,
Quote (SERNOBIL)
Вот если б увидеть, как устроена переменная $CATEGORIES$, то может быть я чего-нибудь и наковырял бы...

Посмотреть как устроен данный оператор - не получится)

... В вашем случае, реально сделать только: либо на каждый раздел по информеру (то, что они не сворачиваются - домыслы, вы просто не умеете их готовить), а у вас разделов уже семнадцать (17), а это много, а информеров всего 30; либо скриптом вытаскивать нужные значения из массива, выводимого одним информером «Категории в JavaScript формате» - он выводит все категории и разделы модуля.
...

Всё написанное выше - моё личное мнение и на абсолютную правоту не претендует.
Есть вопросы лично ко мне - пиши сюда: http://likbezz.ru/forum/8
Сообщение отредактировал fflesh - Пятница, 27 Янв 2012, 06:06:08
slasib
Сообщений: 476
Репутация: 126

Сообщение # 354 | 11:59:20
Добрый день.
Подскажите, в модуле ИМ (страница служебных форм) не работает условие
Code
<?if(substr($ORDER_TOTAL$,31,-42)*1>`150` and substr($ORDER_TOTAL$,31,-42)*1<`500`)?> Значение 1 <?else?> Значение 2  <?endif?>   

Этиv substr($ORDER_TOTAL$,31,-42)* - выделяю из кода суммы число без валюты, к примеру "000.00руб." число "000".

все время выводит "Значение 2"

Подскажите, что делаю не так?

Сообщение отредактировал slasib - Пятница, 27 Янв 2012, 12:21:14
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 355 | 12:26:41
slasib,
Quote (slasib)
Этиv substr($ORDER_TOTAL$,31,-42)* - выделяю из кода суммы число без валюты, к примеру "000.00руб." число "000".

Code
substr($ORDER_TOTAL$,31,-42)*1

А «-42» зачем?
Какую конкретно строку выводит оператор $ORDER_TOTAL$? (нет под рукой магазина ....)
...

Кроме того, если вы вставляли код как тут, то работать не будет - кавычки кривые - не те:
Quote
<?if(substr($ORDER_TOTAL$,31,-42)*1>`150`

Вот эти ...
Используйте обычные, или одинарные - [э] - в англ. раскладке.
...

Всё написанное выше - моё личное мнение и на абсолютную правоту не претендует.
Есть вопросы лично ко мне - пиши сюда: http://likbezz.ru/forum/8
Сообщение отредактировал fflesh - Пятница, 27 Янв 2012, 12:32:09
slasib
Сообщений: 476
Репутация: 126

Сообщение # 356 | 12:36:38
Quote (fflesh)
Какую конкретно строку выводит оператор $ORDER_TOTAL$?

что-то типа этого <span class="osum order_total">сумма+валюта</span>

Quote (fflesh)
А «-42» зачем?
- убирал span до числа

по кавычкам сейчас попробую

Добавлено (27-Янв-2012, 12:36:38)
---------------------------------------------
fflesh, спасибо, в кавычках было дело!


fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 357 | 12:43:33
slasib,
Quote (slasib)
- убирал span до числа

Понятно, но не обязательно, так как:
Quote (fflesh)
... умножение на единицу - приводит строку («2</span>» - начинающуюся с числа) к целому числу («2» - integer) ....
Пост №343
...
Quote (fflesh)
спасибо, в кавычках было дело!

Незачто)

Всё написанное выше - моё личное мнение и на абсолютную правоту не претендует.
Есть вопросы лично ко мне - пиши сюда: http://likbezz.ru/forum/8
Сообщение отредактировал fflesh - Пятница, 27 Янв 2012, 12:44:13
slasib
Сообщений: 476
Репутация: 126

Сообщение # 358 | 13:01:13
Quote (fflesh)
Понятно, но не обязательно, так как:
Quote (fflesh)
... умножение на единицу - приводит строку («2</span>» - начинающуюся с числа) к целому числу («2» - integer) ....
Пост №343


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

Quote (fflesh)
Незачто)

fflesh, что значит "незачто"... вы мне столько раз уже помогли, очень даже есть за что, лучше будет так "Большое спасибо" smile

rawuK
Сообщений: 7
Репутация: 0

Сообщение # 359 | 12:29:23
Народ такой вопрос, я подгружаю свой .html в каталог сайта, пытаюсь в нем установить $ADMIN_BAR$ ,но он выводиться просто в виде текста "$ADMIN_BAR$", а не самого админбара, как сделать что бы на подгружаемом HTML Работали тэги ucoz($.....$)?
Любительница_животных
Сообщений: 60
Репутация: 0

Сообщение # 360 | 12:33:04
Возможно ли и как сделать условие: если поля MSN и YAHOO не заполнены,то вывестив профиле надпись "У вас пока нет денег."?
Поиск:
Telegram
Будьте в курсе всех обновлений: подпишитесь на наш официальный Telegram-канал uCoz и задавайте вопросы в чате сообщества!