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


sch779
Сообщений: 703
Репутация: 348

Сообщение # 1051 | 20:24:56
Quote (DartSidiys)
Как написать
Code
<?if($BOARD_POSTS$ >= 4)?>
Rio_
Сообщений: 103
Репутация: 5

Сообщение # 1052 | 05:54:46
Потребовался оператор в шаблон страницы материала и комментариев к нему, модуль "статьи".

Возможно ли такое обусловливание, типа:

<?if(ежели материалу присвоен тег или один из тегов: «видео»)?>, то вот эту вот фигню <фигня> не показываем.

И если возможно, то как оформить. Подскажите, пожалуйста.
Сообщение отредактировал Rio_ - Пятница, 12 Окт 2012, 05:56:04
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 1053 | 07:00:36
Rio_,
Quote (Rio_)
Возможно ли такое обусловливание, типа:
<?if(ежели материалу присвоен тег или один из тегов: «видео»)?>, то вот эту вот фигню <фигня> не показываем.

strpos(S1,S2)
Ищет первое вхождение строки S2 в строку S1, проходя от начала S1 к концу. Сравнение производится с учетом регистра. Оба параметра должны быть заданы как строки (или как результат вызова функции, возвращающей строку).
Поиск ограничен первыми 1000 символами строки S1.
Сравнение ограничено первыми 100 символами строки S2.
Возвращает целое число - позицию строки S2 от начала S1, считая от 0.
Если вхождение не найдено, возвращает -1. (<?strpos('Васяся','ся')?> возвратит 2).

Code
<?if(strpos('Васяся','ся')='-1')?> ... <фигня> ... <?endif?>

...

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

Сообщение # 1054 | 07:57:39
Quote (fflesh)
strpos(S1,S2)
Ищет первое вхождение строки S2 в строку S1, проходя от начала S1 к концу. Сравнение производится с учетом регистра. Оба параметра должны быть заданы как строки (или как результат вызова функции, возвращающей строку).
Поиск ограничен первыми 1000 символами строки S1.
Сравнение ограничено первыми 100 символами строки S2.
Возвращает целое число - позицию строки S2 от начала S1, считая от 0.
Если вхождение не найдено, возвращает -1. (<?strpos('Васяся','ся')?> возвратит 2).

Ужос.. китайская грамота. :o

Поставил. Скрывает код вне зависимости от тега. Регистр проверил.

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

Сообщение # 1055 | 08:49:47
Rio_, Пример вашего Условного оператора ..

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

Сообщение # 1056 | 09:10:32
Quote (Miss_Esq)
Rio_, Пример вашего Условного оператора ..

Откровенно говоря, я мало что понял из сообщения fflesh-а, поэтому просто проэкспериментировал с финальной строкой его сообщения: <?if(strpos('Васяся','ся')='-1')?>нужный мне код<?endif?>, проставив в материале в качестве тега вот этот его Васяся. Может Вы как-то подоходчивее можете объяснить чего делать?

Беда в том, что в "Статьях" нельзя добавлять дополнительные поля. Мне бы и теги не понадобились. Пока решил проблему так - взял за основу - е-мейл, я его всё равно там нигде не использую. Составил простое условие, т.е. если есть е-мейл, то показываем вот это, в противном случае - то.

<?if($AUTHOR_EMAIL_JS$)?> <?else?>нужный мне код<?endif?>

Осталось в нужных материалах при редактировании ввести в поле мейла какую-нибудь букву, а в шаблоне букву Е заменить пробелом, и всё работает.

Но если вдруг кто-то разъяснит всё-таки попонятнее как действовать с тегами по алгоритму fflesh-а, то был бы очень благодарен.
Сообщение отредактировал Rio_ - Пятница, 12 Окт 2012, 09:43:31
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 1057 | 10:17:34
Rio_,
Quote (Rio_)
Но если вдруг кто-то разъяснит всё-таки попонятнее как действовать с тегами по алгоритму fflesh-а, то был бы очень благодарен.

А что именно не понятно?

Проверяем на вхождения слова «Корпорация»:



Оно входит в строку на 228 символе (№2), то бишь - оно есть в строке, следовательно, блок выводится:


..

Проверяем на вхождения слова «Вася»:



Такого вхождения не найдено в первых 1000 символах, о чем и показывает отдельно выведенное значение (№2) == «-1» - нет вхождения.



Следовательно, блок НЕ выводится...

А вам советую ознакомится со справкой по операторам, там все это описано достаточно подробно и с примерами.
Прикрепления: 3204793.png (3.5 Kb) · 2931605.png (8.5 Kb) · 4280042.png (3.3 Kb) · 3481615.png (8.3 Kb)

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

Сообщение # 1058 | 23:25:02
Как условным оператором определить где находишься (Каталог статей, Каталог файлов)
Если в Каталоге файлов, то...
Если в Каталоге статей, то...

Добавлено (14-Окт-2012, 23:13:37)
---------------------------------------------
$URI_ID$?

Добавлено (14-Окт-2012, 23:18:21)
---------------------------------------------
Спасибо, не нужно, я разобрался
<?if($MODULE_ID$='модуль')?>текст<?endif?>

Добавлено (14-Окт-2012, 23:25:02)
---------------------------------------------
Как сказать уловному оператору что я просматриваю материал? То есть, если я просто на главной каталога файлов: /load то не показывает ничего, ну а если я например в: /load/category/nazvanie/1-1-0-1 Топоказывает то что мне нужно... Как это сделать?

bandjuk
Сообщений: 6816
Репутация: 2398
Уровень замечаний:

Сообщение # 1059 | 23:59:14
Quote (PashaPavlikov)
Как сказать уловному оператору что я просматриваю материал? То есть, если я просто на главной каталога файлов: /load то не показывает ничего, ну а если я например в: /load/category/nazvanie/1-1-0-1 Топоказывает то что мне нужно... Как это сделать?


ответ:
Quote (PashaPavlikov)
$URI_ID$?
Сообщение отредактировал bandjuk - Воскресенье, 14 Окт 2012, 23:59:51
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 1060 | 00:01:05
bandjuk,
Quote (bandjuk)
ответ:
Quote (PashaPavlikov)
$URI_ID$?

Code
$PAGE_ID$

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

Сообщение # 1061 | 00:02:56
Сори, недоперло, сам же в уПанели смотрел и думал нужно бы это тоже использовать) Спаисбо)

Добавлено (15-Окт-2012, 00:02:56)
---------------------------------------------
fflesh, URL Вродь...

Сообщение отредактировал PashaPavlikov - Понедельник, 15 Окт 2012, 00:01:56
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 1062 | 00:07:10
PashaPavlikov,
Quote (PashaPavlikov)
URL Вродь...

...Чё спорить - время покажет )

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

Сообщение # 1063 | 00:10:21
Не не не... Запутался...
У меня вопрос по тому как сделать, что бы в /load ничего не показывал, а в /load/и_далее... показывал то, что мне нужно))
bandjuk
Сообщений: 6816
Репутация: 2398
Уровень замечаний:

Сообщение # 1064 | 00:26:13
Quote (fflesh)
$PAGE_ID$

а чего $PAGE_ID$? %) Если конкретной страницы, то $URI_ID$, например phEnt2590 или я что-то не догнал?

Добавлено (15-Окт-2012, 00:26:13)
---------------------------------------------

Quote (PashaPavlikov)
У меня вопрос по тому как сделать, что бы в /load ничего не показывал, а в /load/и_далее... показывал то, что мне нужно))

<?if($URI_ID$!='ldMain')?>что мне нужно<?endif?>
sch779
Сообщений: 703
Репутация: 348

Сообщение # 1065 | 20:17:18
Quote (PashaPavlikov)
а в /load/и_далее... показывал то, что мне нужно))

Тогда надо использовать $MODULE_ID$:
Code
<?if($MODULE_ID$ == 'load')?>Текст только на страницах модуля "Каталог файлов"<?endif?>

Если же нужно выводить что-то только на страницах материалов модуля "Каталог файлов" и не выводить на главной странице этого модуля и на страницах категорий/групп, тогда:
Code
<?if(substr($URI_ID$,0,5) == 'ldEnt')?>Текст только на страницах материалов модуля "Каталог файлов"<?endif?>
Сообщение отредактировал sch779 - Понедельник, 15 Окт 2012, 20:23:44
Поиск:
Telegram
Будьте в курсе всех обновлений: подпишитесь на наш официальный Telegram-канал uCoz и задавайте вопросы в чате сообщества!