Модератор форума: Yuri_G  
Сообщество uCoz » Мастерская uCoz » Дизайн: управление шаблонами » Условные операторы и системные коды (Особенности использования и интересные решения)
Условные операторы и системные коды
Модератор форума
Сообщение # 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$)?>


Rad_van_Cor
Сообщений: 1179
Репутация: 437

Сообщение # 1471 | 15:55:35
Цитата (fflesh)
Проще дату преобразовать в таймштамп

С помощью JS ? Я просто хотел без него обойтись.
Ну ладно, попробую пока по своему запилить тогда.

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

Сообщение # 1472 | 18:47:32
Rad_van_Cor,
Цитата (Rad_van_Cor)
С помощью JS ?

Почему JS? - операторами.
Разбить на составные, умножить и сложить, отнять таймштам создания и сравнить с числом.
Все это реально операторами, в одну строку.
И гораздо проще чем бить и сравнивать по отдельности обе даты.

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

Сообщение # 1473 | 18:58:05
Цитата (fflesh)
Разбить на составные, умножить и сложить


Кстати да, только нужно правильно преобразовать полученные числа в UNIX, что бы от него отнимать таймштам.
Буду пробовать)

MI$H@
Сообщений: 6
Репутация: 0

Сообщение # 1474 | 21:54:47
всем привет! smile
скажите, а как выводится время при использовании кода $TIME$ ? всем посетителям будет московское время показываться что-ли или как?
просто я тут на свой сайт зашёл с сайта-анонимайзера (был немецкий ip, когда заходил), а показывалось московское время почему-то!
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 1475 | 22:03:15
MI$H@,
Цитата (MI$H@)
скажите, а как выводится время при использовании кода $TIME$ ?

Выводится время зоны при создании сайта

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

Сообщение # 1476 | 22:08:08
fflesh, т.е. для всех будет московское? скажите, а как сделать, что-бы показывалось посетителям именно его время? или это никак не сделать?
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 1477 | 22:16:11
MI$H@,
Цитата (MI$H@)
скажите, а как сделать, что-бы показывалось посетителям именно его время?

Скриптом учитывающим локальное время пользователя.
Таких море в сети.

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

Сообщение # 1478 | 18:03:00
А можно сделать операторами тоже самое только что бы оставлять только год?
например есть
Посланники (2007)
Спектр (1998)
и. тд.
оставить только год, остальное перед годом вырезать
(2007)
(1998)
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 1479 | 22:07:11
Joolz,
Цитата (Joolz)
А можно сделать операторами тоже самое только что бы оставлять только год?

Можно

Joolz,
Цитата (Joolz)
буду благодарен если подскажите как

В смысле написать готовое?) Спасибо, не интересно.

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

Сообщение # 1480 | 00:01:23
fflesh, буду благодарен если подскажите как smile
alliancemotors
Сообщений: 17
Репутация: 0

Сообщение # 1481 | 23:32:12
Доброй ночи всем smile
Подскажите пожалуйста, что-то никак не получается wacko
На стр. товара нужно чтобы доп. поле $OTHER1$ товара выводилось только для добавившего товар
Я сделал так :
но что то не работает, что не так подскажите, целый день мучаюсь? sad
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 1482 | 01:00:00
alliancemotors,
Цитата (alliancemotors)
Я сделал так :
Код
<?if($ADD_USER$=$OTHER1$)?>      
<div>      
<b>Страница товара:</b>      
<a href="$OTHER1$" target="_blank" title="ссылка видна только $ADD_USER$"      
class="tooltip"><span title="↑">Ссылка</span></a>      
</div>      
<?endif?>
но что то не работает

..А какой логикой вы придерживались проверяя на равность ссылку, что очевидно из этого участка:
Код
<a href="$OTHER1$" target="_blank"

и имя пользователя, что напрашивается из этого фрагмента:
Код
title="ссылка видна только $ADD_USER$"

По моему, учевидно что условие:

Код
<?if($ADD_USER$=$OTHER1$)?>

будет всегда ложным.. или в поле не ссылка.
..

Цитата (alliancemotors)
На стр. товара нужно чтобы доп. поле $OTHER1$ товара выводилось только для добавившего товар

Вам нужно сравнивать логин текущего пользователя с логином добавившего товар. И дополнительные поля не фигурируют в этом условии.
Типа:
Код
<?if$ADD_USER$=$USERNAME$?>
/* $дополнительное_поле$ */
<?endif?>

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

Сообщение # 1483 | 09:28:31
fflesh,
Спасибо я примерно так и решил вопрос
только у меня наоборот получилось $USERNAME$=$ADD_USER$ и работает biggrin имеет это значение, нужно как вы написали $ADD_USER$=$USERNAME$ ?

<a href="$OTHER1$" target="_blank" title="ссылка видна только $ADD_USER$"
class="tooltip"><span title="↑">Ссылка</span></a>

здесь "ссылка видна только $ADD_USER$" конечно можно и $ADD_USER$ заменить просто на ВАМ, но ссылка видна все ровно только тому, кто добавил, да администратору smile
Цитата (fflesh)
.А какой логикой вы придерживались проверяя на равность ссылку, что очевидно из этого участка:[url=$OTHER1$][/url]
а это, то что я последнее понатыкал из вариантов, то и отправил biggrin если вы об этом $ADD_USER$=$OTHER1$
Сообщение отредактировал alliancemotors - Вторник, 25 Июн 2013, 09:29:32
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 1484 | 11:07:16
alliancemotors,
Цитата (alliancemotors)
Спасибо я примерно так и решил вопрос
Код
<?if(!$OTHER1$)?>        
<?else?>        
<?if($USERNAME$=$ADD_USER$ || $GROUP_ID$=4)?>
<div>        
<b>Страница :</b>

Логичнее проверять не на отсутствие поля, а на его наличие.
Типа:
Код
<?if($OTHER1$)?>        
<?if($USERNAME$=$ADD_USER$ || $GROUP_ID$=4)?>        
<div>        
<b>Страница :</b>
...
</div>
<?endif?>   
<?endif?>


А вообще, лучше писать еще и красиво, типа:
Код
<?if($OTHER1$&&($USERNAME$==$ADD_USER$||$GROUP_ID$=='4'))?>
<div>        
<b>Страница :</b>
...
</div>
<?endif?>


Всегда пожалуйста.
..

Цитата (alliancemotors)
если вы об этом $ADD_USER$=$OTHER1$

Да, об этом.

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

Сообщение # 1485 | 22:44:07
Цитата (fflesh)
<?if($OTHER1$&&($USERNAME$==$ADD_USER$||$GROUP_ID$=='4'))?>
<div>
<b>Страница :</b>
...
</div>
<?endif?>

Так и работает и действительно грамотнее :-)
Сообщество uCoz » Мастерская uCoz » Дизайн: управление шаблонами » Условные операторы и системные коды (Особенности использования и интересные решения)
Поиск: