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


Alexander_K
Сообщений: 552
Репутация: 188

Сообщение # 241 | 02:19:42
Может так:
Code
<?if($URI_ID$='blCat2' or 'blCat3' or 'blCat4' or 'blCat5')?> .... <?endif?>
Не проверял. Если не будет работать правильно, значит ваш код некуда упрощать.
Quote (Rezia)
При таком условии отображается на всех страницах(
Код Miss_Esq работал бы правильно, если бы обрабатывались числовые значения, но числовые значения записываются без кавычек. А здесь идентификаторы страниц, математические операции к ним неприменимы если не придумать как генерировать ID страницы (да и любой другой) с помощью математической операции, но это только усложнило бы код.

SardukarWDA
Сообщений: 45
Репутация: 12

Сообщение # 242 | 16:58:44
Всем привет! Подскажите, пожалуйста, можно ли с помощью системных кодов вывести на странице семь дней текущей недели с датами? Примерно так:

Чтобы каждый день недели соответствовал календарной дате...
Или это может сделать только самописный скрипт?
Прикрепления: 0038812.jpg (11.5 Kb)

Ушел с Юкоза несколько лет назад.
Сообщение отредактировал SardukarWDA - Воскресенье, 20 Ноя 2011, 17:05:27
Alexander_K
Сообщений: 552
Репутация: 188

Сообщение # 243 | 08:10:06
SardukarWDA, может можно и системными кодами, но это по сути всё равно будет скрипт и для него нужна формула определения дня недели по дате. Когда-то где-то видел такую формулу для календаря то ли на 129 то ли на 139 (если память не изменяет) лет, да и у самого был такой календарь. Формула не сложная, можете поискать в сети или в книгах по информатике или математике (точно не помню где видел, но интернета у меня тогда ещё не было).

ABBANNENTT
Сообщений: 1
Репутация: 5

Сообщение # 244 | 09:00:30
А у меня такой вопрос - не подскажите можно-ли с помощью IFов задать разные максимальные размеры аватара для разных групп?

т.е. допустим
админы : макс размер аватара 200х200
юзеры: макс размер аватара 100х100
Сообщение отредактировал ABBANNENTT - Среда, 23 Ноя 2011, 09:01:58
chipmunk_beauty
Сообщений: 7
Репутация: 0

Сообщение # 245 | 23:16:30
Здравствуйте!
У меня такой вопрос о системном коде $TIME$
Я из Украины, и у нас состоялся переход на "зимнее время" (на 1 час назад). Но на моём сайте перехода не произошло, т.е. на сайте время показывается на 1 час больше.
При создании сайта использовала один из шаблонов uCoz и ничего в системном коде "дата-время" не меняла. Да я бы поменяла время сама, но не знаю как - нигде этот шаблон $TIME$ не расшифровывается...
Или это решается как-то иначе?

Заранее благодарна за помощь!
Miss_Esq
Сообщений: 13859
Репутация: 4159
Уровень замечаний:

Сообщение # 246 | 23:24:03
chipmunk_beauty,
Quote
Но на моём сайте перехода не произошло
Сервер в России ? А в России перевод времени отменён , вот вам и разница ...

ABBANNENTT,
Quote
разные максимальные размеры аватара для разных групп?
Можно , задать разные размеры при отображении в зависимости от группы в шаблоне .....

Сообщение отредактировал Miss_Esq - Воскресенье, 27 Ноя 2011, 10:53:21
chipmunk_beauty
Сообщений: 7
Репутация: 0

Сообщение # 247 | 09:43:27
Miss_Esq, позвольте с Вами не согласиться, что причина в этом, потому как сразу возникает несколько риторических вопросов:
с Россией у нас и так была разница в 1 час, а теперь в 2 часа, но с моим сайтом теперь в 1 час стало, а раньше совпадало;
почему на этом сайте (uCoz), равно как и в моём вэб-топе переход прошёл без проблем, да и на других сайтах тоже (ну, в крайнем случае вручную) и не важно, в какой стране сервер;
а если бы я находилась, напр., в Канаде и делала сайт по шаблонам uCoz-а, то что бы у меня со временем было? наверняка этот вопрос в uCoz-е решён...

и неужели нет никакой возможности установить время на 1 час меньше? может, как-то можно прописать не в системных кодах (т.е. переписать код времени вручную)?
просто сайт, в основном, для наших местных Днепропетровских дамочек, посему российское (хотя это теперь даже не российское) время нам - ну, никак...
Сообщение отредактировал chipmunk_beauty - Воскресенье, 27 Ноя 2011, 10:23:11
Miss_Esq
Сообщений: 13859
Репутация: 4159
Уровень замечаний:

Сообщение # 248 | 10:51:40
chipmunk_beauty,
Quote
время нам - ну, никак...
Внесите в тему , Предложения по системе , предложение , ввести настройку отображения поясного времени на сайте ..

PS . Время парадоксальная штука , следующие 00:01 - 00:59 это ещё не завтра , а ещё сегодня ....
А если пересекать часовые пояса ...


Alexander_K,
Quote
может получится его переделать под ваши нужды.
А с Flash что делать ???

Сообщение отредактировал Miss_Esq - Воскресенье, 27 Ноя 2011, 10:57:56
Alexander_K
Сообщений: 552
Репутация: 188

Сообщение # 249 | 10:55:05
Quote (chipmunk_beauty)
может, как-то можно прописать не в системных кодах (т.е. переписать код времени вручную)?
Можно поколдовать над кодом $TIME$ с JavaScript, тогда время будет исправляться в браузере. Когда-то я ставил у себя скрипт который делает на основе этого кода "живые" часы, могу глянуть, может получится его переделать под ваши нужды.

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

Сообщение # 250 | 22:17:10
Miss_Esq, предложение внести-то можно... токмо мне бы у себя время поменять, потому как сайт уже "поменял владельца", я там только админом осталась, а новый владелец желает видеть местное время...

Alexander_K, будьте так любезны, если Вас не затруднит, глянуть тот Ваш скрипт... Спасибо заранее...

ALL, а расшифровку сего кода реально где-то найти? Может, я сама попробую в ней покопаться?
Alexander_K
Сообщений: 552
Репутация: 188

Сообщение # 251 | 02:50:44
Quote (chipmunk_beauty)
а расшифровку сего кода реально где-то найти? Может, я сама попробую в ней покопаться?
Скорее всего вместо этого кода в код страницы вписывается время по часовому поясу сервера на момент обращения к странице. Если так, то нам редактирование этого кода недоступно. Но его информацию можно обрабатывать скриптом.

Скрипт отредактировал для вас, добавил перевод на Киевское зимнее время. Возможно вам надо будет отредактировать эти значения при переходе на летнее время (три коротких строчки, специально отделил, можете всё свести в одну строку).
Скорее всего скрипт можно улучшить.
У себя проверял, но были ошибки при отображении времени, возможно из-за использования более одного кода $TIME$ на одной странице (у меня часы в боковой колонке), проверьте у себя на всякий случай, хотя по логике там всё должно быть правильно.
Code
<span id="uClock">$TIME$</span>
<script type="text/javascript">function clock_from(hour,min,sec){clock="";if(sec>59){sec=0;min=min+1;}if(min>59){min=0;hour=hour+1;}if(hour>23){hour=0;}if(hour<10){clock+="0"+hour;}else{clock+=""+hour;}clock+=":";if(min<10){clock+="0"+min;}else{clock+=""+min;}clock+=":";if(sec<10){clock+="0"+sec;}else{clock+=""+sec;}

if(hour=0){hour=22;}
if(hour=1){hour=23;}
else{hour=hour-2;}

elem=document.getElementById('uClock');elem.innerHTML=clock;setTimeout("clock_from("+hour+","+min+","+(sec+1)+")",1000);}clock_from(parseInt(document.getElementById('uClock').innerHTML.split(':')[0]),parseInt(document.getElementById('uClock').innerHTML.split(':')[1]),parseInt(document.getElementById('uClock').innerHTML.split(':')[2]));</script>

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

Сообщение # 252 | 09:40:34
Alexander_K, огромное спасибо! вечером после работы займусь... только объясните, плизз, тормозу (мне), куда его вставить этот скрипт?
Alexander_K
Сообщений: 552
Репутация: 188

Сообщение # 253 | 11:35:31
chipmunk_beauty, всё, что между <script type="text/javascript"> и </script> — лучше скопировать в текстовый файл с расширением .js, например clock.js и этот файл загрузить на сайт через файловый менеджер, в корень сайта или в папку где у вас скрипты. Тогда код будет таким (если загрузить скрипт в корневую папку):
Code
<span id="uClock">$TIME$</span><script type="text/javascript" src="/clock.js"></script>
Этот код вставьте туда где у вас должны быть часы (если не хотите изменять их местоположение на странице, то замените этим кодом код $TIME$).

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

Сообщение # 254 | 12:44:34
Добрый день!

Почитал разные разделы, не нашел ответа. Думаю, именно сюда задам вопрос:

Подскажите, а можно ли использовать свой оператор? То есть, именно задавать его значения.
Конкретно нужен оператор, который будет менять значения, в зависимости от нажатия на нужную картинку(их 3).
В зависимости от выбора, хочу выводить разные меню в левом блоке.

Возможно ли такое и как сделать?
Alexander_K
Сообщений: 552
Репутация: 188

Сообщение # 255 | 13:17:22
Wilyam, системно не получится. Нужно писать скрипт (если js-скрипт, то придётся ещё работать с куками) и делать кнопки в виде ваших картинок. Легче всё поставить в одно меню.
Системно можно выводить разные меню в зависимости от ID или группы пользователя, к примеру, через условные операторы. Но в этом случае придётся писать меню самостоятельно (если хотите, чтобы у всех трёх было шаблонное оформление).

Сообщение отредактировал Alexander_K - Среда, 30 Ноя 2011, 13:19:11
Поиск: