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


kostik-tlt
Сообщений: 27
Репутация: 15

Сообщение # 226 | 08:15:21
sch779, огромное спасибо - всё работает. Ещё вопрос, если у меня в каталоге статей 3 категории, можно добавить какой-то код, что-бы эта надпись выводилась только на страницах одной категории.

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

Сообщение # 227 | 12:20:46
Quote (kostik-tlt)
выводилась только на страницах одной категории

В Вашем случае такое возможно только при использовании дополнительного js-кода - условные операторы, увы, здесь не помогут!

Если взять для примера тот сайт, ссылку на который Вы приводили в предыдущем письме, то узнать номер категории можно примерно таким кодом:
Code
<javascript type="text/javascript">
$(function(){
var CID = $("td.eDetails1 > a").attr("href").split("/"); CID = parseInt(CID[CID.length-1],10);
if(CID == 2){$("#cat2Msg").show()};
})
</javascript>

Этот код будет показывать или скрывать содержимое блока, к примеру DIV, с id="cat2Msg" в зависимости от категории статьи, страница которой отображается в настоящий момент.
Т.е., достаточно вставить этот код в любой из глобальных блоков и добавить, к примеру туда же, DIV-блок:
Code
<DIV id="cat2Msg" align="center" style="color:red; display:none">
Вы просматриваете статью из категории N2!
</DIV>

Естественно, что вышеприведенный код корректно будет работать только для Вашего шаблона "Вид материала" - если в шаблон будут внесены изменения, то, возможно, понадобиться и корректировка этого кода.
Для ясности - код ищет на текущей странице ячейку таблицы, которая (ячейка) имеет класс "eDetails1" и уже в этой ячейке ищет дочернюю ссылку, содержимое которой "достает" и берет из нее идентификатор категории.
Сообщение отредактировал sch779 - Суббота, 24 Сен 2011, 12:41:09
GORDON-HLCS
Репутация: 2

Сообщение # 228 | 06:45:40
Добрый день, помогите/подскажите такую вещь - я вставил на форум кнопку, вызывающую bb-код специально для модераторов и как теперь ее скрыть от других групп пользователей, чтобы она была только доступна админам и модераторам? Я пробовал сделать вот так:
Quote
что то там $BBCODES$ <?if($GROUP_ID$=1 || $GROUP_ID$=2 || $GROUP_ID$=5 || $GROUP_ID$=6 || $GROUP_ID$=7 || $GROUP_ID$=8 || $GROUP_ID$=9 || $GROUP_ID$=251 || $GROUP_ID$=255)?><кнопка bb-кода для модераторов><?endif?> что то там

...но при этом кнопка стала невидимой для всех групп sad

~ status: online ~
Сообщение отредактировал GORDON-HLCS - Суббота, 22 Окт 2011, 06:47:37
sch779
Сообщений: 703
Репутация: 348

Сообщение # 229 | 11:39:58
Quote (GORDON-HLCS)
но при этом кнопка стала невидимой для всех групп

Ну, во-первых, надо убедиться, что такая переменная $GROUP_ID$ вообще доступна в данном месте!
К примеру, в шаблоне "Форма добавления сообщения" для форума вообще нет такой переменной - зато есть переменная $CUR_GROUP_ID$!

Во-вторых, Ваше условие покажет кнопку ВСЕМ, КРОМЕ админов и модераторов! biggrin
Если надо показывать кнопку только админам и модераторам, то следует писать условие так:
Code
<?if($CUR_GROUP_ID$=3 || $CUR_GROUP_ID$=4)?>код вывода кнопки<?endif?>
sch779
Сообщений: 703
Репутация: 348

Сообщение # 230 | 21:12:38
Quote (dj-vblack)
Так как в оригинальных настройках можно ограничивать права групп только для самого каталога (а не подкаталога)!!!
Кто Вам такое сказал?! Вы сами смотрели?
Можно управлять правами доступа как для каталога (в терминах админпанели - раздела), так и для подкаталогов (в терминах админпанели - категориям)!

Quote (Alexander_K)
Условие прописывать между тегами <head> и </head> в шаблоне страницы.
Не вводите людей в заблуждение - условные операторы можно использовать в любом месте страницы и шаблона (где это нужно самому разработчику)!
Alexander_K
Сообщений: 552
Репутация: 188

Сообщение # 231 | 21:37:16
Quote (sch779)
где это нужно самому разработчику
Ну это да. Но как я понял, материалы не должны быть загружены в браузер, при выполнении условия. Или в таких случаях не будет иметь значения, в какой части страницы прописать условие?

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

Сообщение # 232 | 10:00:28
Доброго времени суток. Есть вопрос..
Суть его в следующем - нужно для модуля "каталог статей" написать такое условие, чтобы в первых 1900 материалах с "puEnt1" до "puEnt1901" отображался определенный текст. Как это сделать?

Если хочешь видеть результаты своего труда немедленно - иди в сапожники
olegsuv
Сообщений: 1365
Репутация: 127

Сообщение # 233 | 16:25:07
Quote (|dreadful_live_football|)
Суть его в следующем - нужно для модуля "каталог статей" написать такое условие, чтобы в первых 1900 материалах с "puEnt1" до "puEnt1901" отображался определенный текст. Как это сделать?

Пример так:
Code
<?if(substr($C$,5,len($C$)-5))?>ololol<?endif?>

Любые работы по:
- Javascript, jQuery, HTML, CSS
- Верстке макетов и установке их на сайты
- Нестандартным решениям
dreadful
Сообщений: 23
Репутация: 20

Сообщение # 234 | 16:49:01
xD спасибо, особенно ololol прикольный код

Если хочешь видеть результаты своего труда немедленно - иди в сапожники
Sevengor
Сообщений: 76
Репутация: 8

Сообщение # 235 | 15:24:38
Подскажите можно ли на страницах прописать некие префиксы, с тем чтобы на них откликались условные операторы и как это зделать?

Хотелось бы создать отдельный вариант меню для группы страниц сайта, хотелось бы также иметь возможность на юкоз делать это через ПУ для удобства (подобно джумле) в противном случае все что остаётся - создавать новый отдельный сайт(

Указывать до 20 страниц с индивидуальным дизайном муторно: ведь на деле шаблон индивидуального дизайна(друго меню) один, а страниц с ним хотелось бы сделать много...

Пора уже дать системе больший уровень возможностей в частности для корректного и удобного создания и изменения представления различных страниц и категорий с включением и выключением тез или иных меню в групповых вариациях.

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

Ну если уж совсем ничего интересного сделать нельзя тогда скажите можно ли загрузить свои отдельные html коды страниц и css стили, и как следует выводить на них логотип и ссылку юкоза "создать сайт", чтобы сайт не закрыли за нарушение правил?

смысл прост:

если кодтстраницы, ну или там тега meta содержит <!--префикс-->, тогда выводить меню 1, иначе - стандартный вывод по установленым стилям....

Само меню можно создать как информер, для удобства редактирования через ПУ

У Юкоза есть язык программирования с указанными для конкретного тарифа (клиента) возможностей, если есть то дайте ччылку чтобы мне не заморачиваться?

Понимаю так же что можно приспособить под это каталог статей или иной модуль, но каталог статей уже занят, хотя и можно создать категорию, но как-то следует убрать осн. меню через иф это такой то раздел категории, элс ...?

Сообщение отредактировал Sevengor - Вторник, 25 Окт 2011, 16:35:29
shaman8206
Сообщений: 141
Репутация: 19

Сообщение # 236 | 02:19:46
Здравствуйте. скажите, а возможно ли реализовать, в персональном разделе пользователя такую штуку:
Если пользователь находится в группе "Заблокированные", то в его персональном разделе будет выводится то что мне нужно, ну например: информация скрыта, пользователь заблокирован, а вся информация о нём будет скрыта.

Я предполагаю что, это можно осуществить с помощью условных операторов:
Code
<?if($код$)?><?else?><?endif?>


Вот только если бы я знал какой $код$ вставлять, то я бы сюда не писал.
Подскажите, какой код будет показывать, что пользователь заблокирован? Всё остальное я постараюсь доделать сам.

И ещё. обьясните пожалуйта, что за операторы такие, и за что отвечают?
Code
<?if($_BANNED_TILL$)?>
<?if($_BANNED_TILL$="1")?>

спасибо.

Более 100 бесплатных, внешних ссылок на ваш сайт. подробности
Сообщение отредактировал shaman8206 - Среда, 02 Ноя 2011, 02:22:29
Alexander_K
Сообщений: 552
Репутация: 188

Сообщение # 237 | 21:46:25
shaman8206, используйте код $GROUP_ID$, т.е. так:
<?if($GROUP_ID$=x)?>...<?endif?>
Где x — ID группы заблокированных, обычно 255

Сообщение отредактировал Alexander_K - Среда, 02 Ноя 2011, 21:47:00
Rezia
Сообщений: 8
Репутация: 5

Сообщение # 238 | 01:20:49
Подскажите как упростить условие

Code
<?if($URI_ID$='blCat2' or $URI_ID$='blCat3' or $URI_ID$='blCat4' or $URI_ID$='blCat5')?> .... <?endif?>
Miss_Esq
Сообщений: 13859
Репутация: 4159
Уровень замечаний:

Сообщение # 239 | 01:44:28
Rezia, <?if($URI_ID$>='blCat2' and $URI_ID$<='blCat5')?> .... <?endif?>

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

Сообщение # 240 | 01:10:54
Quote (Miss_Esq)
<?if($URI_ID$>='blCat2' and $URI_ID$<='blCat5')?> .... <?endif?>


При таком условии отображается на всех страницах(
Поиск: