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


вейндейн3351
Сообщений: 23
Репутация: 0

Сообщение # 2026 | 20:41:46
Привет
НЕ ЗНАЮ В КАКУЮ ТЕМУ ПИСАТЬ
Помогите сделать информер или скрипт честно не знаю что нужно
использую каталог файлов фильтры все заняты
нужно сделать колонку категорий со скролом ( можно без него)( типа примера операционные системы, язык интерфейса в модуле каталога файлов )
и прописать там категории 1, категория 2 и.т.д , чтоб можно было выбирать
и выводились на страницу с материалом
gugwap
Сообщений: 20
Репутация: 10

Сообщение # 2027 | 14:25:51
Цитата gugwap ()
<?if($MESSAGE$)?><div align="center"><img src="$IMG_URL1$" title="Класс $TITLE$" /></div><br>$MESSAGE$
<?else?><div align="center"><b>$USER_FULL_NAME$</b></div><br>


<div>Полный гайд класса <b>$ENTRY_TITLE$</b></div><br />

<div align="center"><h3>Временно отсутствует гайд по классу <b>$ENTRY_TITLE$</b>, если есть что <a href="$ADD_ENTRY_LINK$">добавить</a> - пишите, буду признателен.</h3></div>

<?endif?>

Цитата Selena ()
gugwap, вы не читаете ответы вам. Я уже писала, что принципиальный алгоритм вашего условия работает. Он проверен на тестовом сайте. А код <?IMAGE2?> это что за изобретение? В шаблонах работают коды $IMG_URL1..10$ или $IMG_SMALL_URL1..10$ и размеры их регулируются в настройках модуля. Так же в настройках модуля поле "полное описание материала" должно быть не обязательным и полностью пустым при добавлении материала, чтобы сработало условие.
Картинка меня как таковая не интересует, главное чтобы текст по условию выводился. Оказалось, всё просто, незарегистрированный пользователь видит то что выводится по условию, а у зарегистрированного на это место выводится рекламный баннер Юкоза. Как можно этого избежать? Чтобы выводился баннер и то, что должно выводиться, а не либо баннер, либо условие?
Metafor
Сообщений: 43
Репутация: 0

Сообщение # 2028 | 09:19:05
Здравствуйте,

Подскажите, пожалуйста, как можно при помощи условных операторов сделать 2 переменные картинки в шапке страницы сайта так, чтобы сами картинки загружались при создании страниц вместе с контентом центральной части страницы (хочется иметь на каждой странице свой вид шапки). Мой сайт-полигон http://neopraktik.ucoz.ru делаю шаблон для перевода на динамическую основу сайта http://altaj-inaki.com

html код для header

<body>
<div id="wrapper">

<!-- <header> -->
<div class="header">
<div class="top">
<div class="logo">
<div class="indent">
<div class="ikonka">$IMG_1$</div>

<div class="date">
$WDAY$, $DAY$.$MONTH$.$YEAR$
</div>
</div>
</div>
<div class="slogan">
<div class="indent">
<div class="s_name">
<span class="image">$IMG_2$</span>
<box id="f3" >
<h1 id="blink" class="prima">ПАСЕКА</h1>
<h2 id="blink" class="secunda">"Приветливый Улей"</h2>
</box></div>
<div id="slogan">
<div class="userbox"><?if($USERS_ON$)?><?if($USER_LOGGED_IN$)?>You logged in as <a href="$PERSONAL_PAGE_LINK$" title="Profile page"><b>$USERNAME$</b></a> • Group "<u>$USER_GROUP$</u>"<?else?>Hello <b>$USERNAME$</b><?endif?><?endif?><?if($USERS_ON$)?><?if($USER_LOGGED_IN$)?> • <a href="$PERSONAL_PAGE_LINK$">Profile page</a><?else?> • <a href="$REGISTER_LINK$">Register now</a><?endif?><?endif?><?if($USERS_ON$)?><?if($USER_LOGGED_IN$)?> • <a href="$LOGOUT_LINK$">Log out</a><?else?> • <a href="$LOGIN_LINK$">Log in</a><?endif?><?endif?></div></div></div>
</div>

</div>
<div class="clr"></div>
<div id="Menu1">

<ul id="menu">
<li><a href="http://altaj-inaki.com">Главная</a></li>
<li><a href="karta.html">Карта сайта</a></li>
<li><a href="paseka.html">Пасека</a></li>
<li><a href="lezheboki.html">Лежебоки</a></li>
<li><a href="inaki.html">Инаки</a></li>
<li><a href="http://inaki.ucoz.ru/publ/pasechnaja_lavochka/2">Для Вас</a></li>
<li><a href="druzja.html">Друзья</a></li>
<li><a href="http://inaki.ucoz.ru/gb/">Роевня</a></li>
</ul>
</div>
</div>
<div id="clear1"></div>

<!-- </header> -->

У меня при включенном конструкторе редактируется только контент центральной части. Можно ли как-то так составить условие оператора, чтобы картинки увязывались с url странички и загружались при вводе контента?
Сообщение отредактировал Metafor - Среда, 09 Июл 2014, 09:22:14
Enjoyt
Сообщений: 12
Репутация: 0

Сообщение # 2029 | 01:59:38
Доброго времени суток, форумчане.
Возник вопрос: как должен выглядеть код выводящий следующее -
Код
<?if($USER_ONLINE$='ADMIN')?>1<?else?>2<?endif?>
Суть такова: когда пользователь ADMIN находиться на сайте выводить 1, а когда не находится то 2
Есть ли такой код? или можно его собрать из других
Вансан
Сообщений: 77
Репутация: 33

Сообщение # 2030 | 12:24:16
ADMIN - это никнейм пользователя, или его группа?
Где должен выводиться этот код, и для кого (для самого пользователя, или для других)?

Absit invidia verbo
Enjoyt
Сообщений: 12
Репутация: 0

Сообщение # 2031 | 22:53:14
Вансан, это логин.
Везде должен выводится код.
Может будет проще если я объясню:
Цитата
У меня есть интернет магазин и физический магазин. Во на сайте хочу сделать такую вещь, сделать пользователя и назвать его MAGAZIN, и залогинится на компе в физическом магазине, когда буду приходить на работу буду включать комп а соответственно и сайт, где и залогинен. Поставить условие если юзер MAGAZIN онлайн то выводить картинку "Магазин открыт", а если не в сети то "Закрыто".

PS режим работы есть, но бывает задерживаемся на работе, а так люди глянули на сайте что открыто и зашли к нам.
И делать скрипт которой по времени или в ручную включает ту или иную картинку тоже нет смысла, так как забуду про нее, а человек увидит что магаз открыт, приедет, а он закрыт.
Вансан
Сообщений: 77
Репутация: 33

Сообщение # 2032 | 09:45:29
Enjoyt, что ж, боюсь я разочарую вас.
Такой условный оператор можно составить только для некоторых шаблонов (например страница профиля, или вид материалов форума).
Универсального сделать не получится.

Absit invidia verbo
Selena
Сообщений: 15657
Репутация: 1100

Сообщение # 2033 | 14:34:10
Enjoyt, уточните, пожалуйста, откуда взяли код $USER_ONLINE$?

Отправляя сообщение о помощи, приводите ссылку на свой сайт. Это не считается рекламой, зато снимает массу вопросов.
Enjoyt
Сообщений: 12
Репутация: 0

Сообщение # 2034 | 23:54:13
Selena, это я для примера написал
byhtatroiza
Сообщений: 5
Репутация: 0

Сообщение # 2035 | 08:24:45
Здравствуйте народ, может мне кто либо помочь!!! Я очень слабо понимаю этот язык.... вставил в первый контейнер новостной блок, (новости в таком виде как они у меня на сайте сейчас., меня очень даже
устраивают) думал этот блок будет отображаться на всех страницах, у меня так
отбражается переводчик, статистика. и т.п, я эти блоки также вставил в первый
контейнер! Так вот почему то новостей не видно в гостевой книге, и в фотоальбоме
отбражается ни так, как на главной и остальных??? Пробовал в гостевую и фотоальбом помещать этого оператора... скорей всего не
так делал как надо, или вообще нужно что то другое,
<?if($CONTENT$)?><?endif?>Вообщем запутался окончательно, прошу подсказки!!! Вот мой сайт: http://byhta-troiza.ru/ и если можно простым языком, всем заранее большое спасибо...
levinson
Сообщений: 123
Репутация: 29

Сообщение # 2036 | 21:53:45
Привет!!
Подскажите, как вывести результат математического вычисления двух переменных $ORDER_DISCOUNT$+$ORDER_AMOUNT_RAW$ - это переменные с магазина означающие сумму скидки и сумму с учетом скидки (т.е. нужно первоначальную получить)

Т.е. при значениях 2 и 3, выводилось "5", а не "2+3"

byhtatroiza, Вам, насколько я понимаю, нужно в настройке дизайна найти гостевую книгу, и туда в нужное место (перед $BODY$ видимо) воткнуть информер новостей $LAST_NEWS$.
Сообщение отредактировал levinson - Вторник, 22 Июл 2014, 21:55:05
brizing
Разработчик
Сообщений: 2556
Репутация: 1091

Сообщение # 2037 | 08:42:09
levinson,
Код
<?$ORDER_DISCOUNT$+$ORDER_AMOUNT_RAW$?>

Читайте книги role.su - Rolesu Authors Workshop.
deathbloody
Сообщений: 98
Репутация: 1

Сообщение # 2038 | 09:35:17
Имеется быдло код:

Код
<?if $URI_ID$="ldCat307" || $URI_ID$="ldCat322" || $URI_ID$="ldCat323" || $URI_ID$="ldCat324" || $URI_ID$="ldCat325" || $URI_ID$="ldCat326" || $URI_ID$="ldCat327"  
|| $URI_ID$="ldCat328" || $URI_ID$="ldCat329" || $URI_ID$="ldCat330" || $URI_ID$="ldCat331" || $URI_ID$="ldCat332" || $URI_ID$="ldCat333" || $URI_ID$="ldCat334"  
|| $URI_ID$="ldCat335" || $URI_ID$="ldCat336" || $URI_ID$="ldCat337" || $URI_ID$="ldCat338" || $URI_ID$="ldCat339" || $URI_ID$="ldCat340" || $URI_ID$="ldCat341"  
|| $URI_ID$="ldCat342" || $URI_ID$="ldCat343" || $URI_ID$="ldCat344" || $URI_ID$="ldCat345" || $URI_ID$="ldCat346" || $URI_ID$="ldCat347" || $URI_ID$="ldCat348"  
|| $URI_ID$="ldCat349" || $URI_ID$="ldCat350" || $URI_ID$="ldCat351" || $URI_ID$="ldCat352" || $URI_ID$="ldCat353" || $URI_ID$="ldCat354" || $URI_ID$="ldCat355"  
|| $URI_ID$="ldCat356" || $URI_ID$="ldCat357" || $URI_ID$="ldCat358" || $URI_ID$="ldCat359" || $URI_ID$="ldCat360" || $URI_ID$="ldCat361" || $URI_ID$="ldCat362"  
|| $URI_ID$="ldCat363" || $URI_ID$="ldCat364" || $URI_ID$="ldCat365" || $URI_ID$="ldCat366" || $URI_ID$="ldCat367" || $URI_ID$="ldCat368" || $URI_ID$="ldCat369"
|| $URI_ID$="ldCat370" || $URI_ID$="ldCat371" || $URI_ID$="ldCat372" || $URI_ID$="ldCat373" || $URI_ID$="ldCat374" || $URI_ID$="ldCat375" || $URI_ID$="ldCat376"
|| $URI_ID$="ldCat377" || $URI_ID$="ldCat378" || $URI_ID$="ldCat379" || $URI_ID$="ldCat380" || $URI_ID$="ldCat381" || $URI_ID$="ldCat382" || $URI_ID$="ldCat383"
|| $URI_ID$="ldCat384" || $URI_ID$="ldCat385" || $URI_ID$="ldCat386" || $URI_ID$="ldCat387" || $URI_ID$="ldCat388" || $URI_ID$="ldCat389" || $URI_ID$="ldCat390"  
|| $URI_ID$="ldCat391" || $URI_ID$="ldCat392" || $URI_ID$="ldCat393" || $URI_ID$="ldCat394" || $URI_ID$="ldCat395" || $URI_ID$="ldCat396" || $URI_ID$="ldCat397"  
|| $URI_ID$="ldCat398"?>

Можно, как-то его укорочено написать?
Selena
Сообщений: 15657
Репутация: 1100

Сообщение # 2039 | 13:25:31
deathbloody, вы лучше словами сформулируйте задачу, тогда будет легче поискать иной вариант. Это проще, чем ковыряться в тонне чужого кода.

Отправляя сообщение о помощи, приводите ссылку на свой сайт. Это не считается рекламой, зато снимает массу вопросов.
deathbloody
Сообщений: 98
Репутация: 1

Сообщение # 2040 | 13:32:02
Selena, суть в том, что если находимся в какой-то категории, появляется информер

Добавлено (23 Июл 2014, 13:32:02)
---------------------------------------------
я прописал условие для каждой категории, но после 50-го условия код не работает

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