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

Сообщение # 406 | 00:42:20
The-Rock,
Quote (The-Rock)
Можно ли сделать так, чтобы первый код условия заменялся вторым, а не выводились вместе... я что-то запутался sad
1 код
Code
<?if($POSTS$>30)?>2<?endif?>

2код
Code
<?if($POSTS$>100)?>4<?endif?>


Вообще-то не очень догнал вопрос, но ... если я правильно вас понял (в чём сомневаюсь), то вот так:
Code
<?if($POSTS$>30&&$POSTS$<101)?>2<?else?><?if($POSTS$>100)?>4<?endif?><?endif?>

или, что, в принципе, то же самое ...
Code
<?if($POSTS$>30&&$POSTS$<101)?>2<?endif?>
<?if($POSTS$>100)?>4<?endif?>

Выведет «2» если кол-во постов в диапазоне от 31 до 100 включительно, и «4» если постов больше 100.
...

Quote (The-Rock)
Можете привести пример из 4 условий? пожалуйста

Code
<?if($POSTS$>29)?>
<?if($POSTS$>29&&$POSTS$<100)?>)?>У вас больше 30 постов, но меньше 100<?endif?>
<?if($POSTS$>99&&$POSTS$<200)?>)?>У вас больше 100 постов, но меньше 200<?endif?>
<?if($POSTS$>199&&$POSTS$<300)?>)?>У вас больше 200 постов, но меньше 300<?endif?>
<?else?>У вас меньше 30 постов
<?endif?>

Всё написанное выше - моё личное мнение и на абсолютную правоту не претендует.
Есть вопросы лично ко мне - пиши сюда: http://likbezz.ru/forum/8
Сообщение отредактировал fflesh - Понедельник, 06 Фев 2012, 01:21:17
The-Rock
Сообщений: 7
Репутация: 6

Сообщение # 407 | 00:55:30
fflesh, Вы меня поняли! Условие работает! Спасибо! smile
Striker7939
Сообщений: 2
Репутация: 0

Сообщение # 408 | 11:06:55
Здравствуйте, вот так вопросик, у меня есть несколько условий (разных), как так сделать чтобы если не выполняется ни одно условие вывелось условия не выполнены?

Вот код:

<?if($GROUP_ID$=группа пользователя)?>1 условие<?endif?>
<?if($UID$=ид пользователя)?>2 услолвие<?endif?>
<?if($UID$=ид пользователя)?>3 условие<?endif?>
<?if($UID$=ид пользователя)?>4 условие<?endif?> и.т.д. ...

пробовал по всякому не фурычит, а пустату оставлять не хочется...

Добавлено (07-Фев-2012, 11:06:55)
---------------------------------------------
а забыл написать, если выполняются оба условия одновремено, то надо вывести сразу 2

s-edka
Сообщений: 4
Репутация: 0

Сообщение # 409 | 12:51:58
можно так :
<?if($GROUP_ID$=1)?>1 условие<?else?>
<?if($GROUP_ID$=2)?>2 условие<?else?>
<?if($GROUP_ID$=3)?>3 условие<?else?>
------- -------------
<?if($GROUP_ID$=n)?>n условие <?else?>
никаких условий
<?endif?><?endif?><?endif?>... <?endif?> - n
Striker7939
Сообщений: 2
Репутация: 0

Сообщение # 410 | 14:06:43
s-edka,
нет так работать не будет, т.к условия идут не только по группе а ещё и по идам пользователей, а так же если совпадут 2 условия надо вывести их оба,
как-то так. я пробовал уже ваш вариант, он не выводит все.
Alexander_K
Сообщений: 552
Репутация: 188

Сообщение # 411 | 14:20:55
Можно сначала проверить, выполняются ли условия, это вы сделали. Потом проверить на ложность. Тогда код будет дополнен:
<?if($GROUP_ID$=группа пользователя)?>1 условие<?endif?>
<?if($UID$=ид пользователя)?>2 услолвие<?endif?>
<?if($UID$=ид пользователя)?>3 условие<?endif?>
<?if($UID$=ид пользователя)?>4 условие<?endif?>

<?if($GROUP_ID$!=группа пользователя && $UID$!=ид пользователя && $UID$!=ид пользователя && $UID$!=ид пользователя)?>условия не выполнены<?endif?>

Не проверял.

Любительница_животных
Сообщений: 60
Репутация: 0

Сообщение # 412 | 18:25:22
Для чего нужен код $UNET_ID$?
FeniX_kz
Сообщений: 1642
Репутация: 971

Сообщение # 413 | 10:55:46
Quote (Любительница_животных)
Для чего нужен код $UNET_ID$?

Может быть код $URI_ID$ ??

.::I'll be back::.
Выбор за тобой!
waider
Сообщений: 18
Репутация: 6

Сообщение # 414 | 14:37:55
У меня в фотоальбоме есть дополнительное поле со ссылкой на сайт автора фото.
Простой вариант вывода на страницу будет если прописать в одно доп. поле саму ссылку, а во второе поле - текст ссылки, т.е.:

Code
<a href="$OTHER2$">$OTHER1$</a>


но меня такой вариант не устраивает, постольку поскольку нужно задействовать два дополнительных поля, а у меня свободное только одно.
Хотел я попытаться решить проблему вот таким способом:
1. В доп. поле заводить ссылку по шаблону, например: [http://mysite.com]{Наименование сайта}
2. Вывести ее таким образом:

Code
<a href="<?substr($OTHER1$,strpos($OTHER1$,'[')+1,strpos($OTHER1$,']')-1)?>"><?substr($OTHER1$,strpos($OTHER1$,'{')+1,strpos($OTHER1$,'}')-1-strpos($OTHER1$,'{'))?></a>


внешне получается все отлично, но сама ссылка не формируется, проблема в строке <a href="<?substr($OTHER1$,strpos($OTHER1$,'[')+1,strpos($OTHER1$,']')-1)?>">

Как правильно прописать данный код внутри тега <a>? Если такое конечно же возможно
Любительница_животных
Сообщений: 60
Репутация: 0

Сообщение # 415 | 19:44:31
Quote
Может быть код $URI_ID$ ??

В том то и дело, что именно $UNET_ID$
Code
<DIV class=udtlb><?if($UNET_ID$)?>Место проживания<?else?>
sch779
Сообщений: 703
Репутация: 348

Сообщение # 416 | 20:22:03
Quote (Любительница_животных)
В том то и дело, что именно $UNET_ID$

Судя по всему, это идентификатор пользователя сети UNet.
А приведенное Вами условие запрашивает место проживания только у тех пользователей сайта, кто вошел на сайт с UNet-аккаунтом.
messifan
Сообщений: 23
Репутация: 14

Сообщение # 417 | 19:29:45
Всем привет! Ответьте пожалуйста, сколько максимум можно использовать условных операторов на странице? Спрашиваю потому, что хочу присвоить разный тайтл для категорий новостей, но вот не на всех необходимых страницах категорий этот оператор работает. Все правильно делаю, но не пойму в чем дело, возможно есть ограничение в количестве используемых операторов на одной странице? Или возможно причина другая? Благодарю за внимание.

Сообщение отредактировал messifan - Понедельник, 13 Фев 2012, 19:41:11
Selena
Сообщений: 15657
Репутация: 1100

Сообщение # 418 | 19:53:56
messifan, такого ограничения нет (если укладываетесь в лимит символов). Есть ограничение на уровень вложенности. Очевидно причина в другом.

Отправляя сообщение о помощи, приводите ссылку на свой сайт. Это не считается рекламой, зато снимает массу вопросов.
Miss_Esq
Сообщений: 13859
Репутация: 4159
Уровень замечаний:

Сообщение # 419 | 20:02:37
messifan, Лучше для этого использовать системный код , типа

<title>$CAT_NAME$</'title>
<meta name="description" content="$CAT_DESCR$">

messifan
Сообщений: 23
Репутация: 14

Сообщение # 420 | 23:06:05
Quote (Selena)
messifan, такого ограничения нет (если укладываетесь в лимит символов). Есть ограничение на уровень вложенности. Очевидно причина в другом.

Интересно то, что для первых двадцати категорий оператор работает, а вот для остальных нет, поэтому видимо наверно ограничение есть.
Quote (Miss_Esq)
messifan, Лучше для этого использовать системный код , типа

<title>$CAT_NAME$</'title>
<meta name="description" content="$CAT_DESCR$">

Вообще-то $CAT_NAME$ и даже $CATEGORY_NAME$ не будут работать! А только $TITLE_BAR$, но это слишком просто и мне не подходит. Просто я хочу кроме этих страниц категорий остальным другим страницам архива новостей присвоить сразу один и тот же тайтл с помощью <?else?>. Насчет мета-тега desription я не спрашивал и я в курсе...

Добавлено (13-Фев-2012, 23:06:05)
---------------------------------------------
В общем нуждаюсь еще в помощи компетентных людей...

Поиск:
Telegram
Будьте в курсе всех обновлений: подпишитесь на наш официальный Telegram-канал uCoz и задавайте вопросы в чате сообщества!