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


udevlife
Сообщений: 272
Репутация: 60

Сообщение # 2296 | 12:08:39
Nikola5381, Коды с цифрами пишутся без кавычек <?if($USER_ID$=2)?>, операторы где значения в варианте слова используют одинарные кавычки <?if($USERNAME$='Admin')?>
voron2995
Сообщений: 33
Репутация: 12

Сообщение # 2297 | 15:25:22
Здравствуйте.
На сайте в разделе каталог товаров выведены все товары из пяти категорий данного раздела с помощью информера $MYINF_2$
Код
<a href="$ENTRY_URL$"><figure class="imgteaser"><img id="imgscreenshadow" alt="$TITLE$" src="$SCREEN_URL$" border="0"></a><figcaption><tt>Нажмите на картинку для перехода на страницу заказа латодержателя</tt></figcaption>

Сначала идут товары из первой категории (латодержатели врезные), затем из второй (латодержатели на трубу) и т.д.
Подскажите пожалуйста, как сделать, чтобы сначала выводилось название категории, под названием - товары из этой категории, затем отступ и снова название новой категории, под ней товары и т.д.

Подозреваю, что это можно сделать условными операторами, но как не знаю.

Спасибо
vredniey-faktor
Сообщений: 67
Репутация: 38

Сообщение # 2298 | 18:01:50
Цитата udevlife ()
Nikola5381, Коды с цифрами пишутся без кавычек <?if($USER_ID$=2)?>, операторы где значения в варианте слова используют одинарные кавычки <?if($USERNAME$='Admin')?>
Нет, это видимо какие-то проблемы с этим кодом... Он не работает вообще. У себя проверил тоже.

И коды с цифрами отлично работают если там есть кавычки . Например <?if($DAY$='15')?>ОДНО<?else?>ВТОРОЕ<?endif?>

$DAY$ - текущий день месяца от 1 до 31

Или вот такой: <?if($URI_ID$ = 'page1')?> - Выводит информацию если ID страницы = 1, т.е. если страница главная. Тут и цифры и буквы и всё работает отлично

WAV-LIBRARY.NET - Библиотека звуков. Бесплатные звуки, шумовые эффекты, сэмплы и музыка в WAV, MP3, OGG форматах.
Nikola5381
Сообщений: 7
Репутация: 4

Сообщение # 2299 | 16:23:04
ага, значит работает код

Код


<?if($USER_ID$='2')?>


просто был задан класс posttdMessage, но если задать класс ucoz-forum-post то работает.
DrSkif
Сообщений: 28
Репутация: 0

Сообщение # 2300 | 03:08:35
есть глобальный блок $GLOBAL$ нужно составить условие, если глобальный блок $GLOBAL$ не пустой то условие, в противном случае "код"
помогите составить выражение
zarim
Сообщений: 489
Репутация: 82
Уровень замечаний:

Сообщение # 2301 | 17:07:04
DrSkif, как-то так: <?if(len($GLOBAL$)>0)?>
В переводе: если длинна (количество символов) блока больше нуля

Если не работает, поставьте этот пустой блок и посмотрите через исходный код страницы, возможно его длинна не равна нулю (то есть там могут быть системные метки какие-то начала и конца), в этом случии выставьте нужную длинну.
DrSkif
Сообщений: 28
Репутация: 0

Сообщение # 2302 | 23:36:11
спасибо попробую

Добавлено (02 Дек 2015, 23:36:11)
---------------------------------------------
не сработало, глобальный блок состоит из перечня условий, когда они не удовлетворяют условиям глобальный блок по идее становится пустым и тут я попробовал 2 варианта: <?if($GLOBAL$)?>$GLOBAL$<else>условие<endif> и <?if(len($GLOBAL$)>0)?>$GLOBAL$<else>условие<endif>
но в обоих вариантах в коде остается кусок условного оператора )?>
что это может быть и как решить проблему

udevlife
Сообщений: 272
Репутация: 60

Сообщение # 2303 | 09:17:01
DrSkif, Так сделать не получится, проверку на пустоту блока не задать.
zarim
Сообщений: 489
Репутация: 82
Уровень замечаний:

Сообщение # 2304 | 16:50:54
DrSkif, а давайте на конкретном примере, покажите страницу с этим пустым блоком, только чтоб было понятно, о каком блоке речь, то есть чтобы его можно было найти через исходный код
Modelist2608
Сообщений: 77
Репутация: 11

Сообщение # 2305 | 15:42:36
Подскажите, как убрать отображение фотоальбома в $CATEGORIES$ , в настройках фотоальбома, не удается убрать галку с категорий ? А у меня категории заняты блогом и соответственно фотографии тоже лезут туда !

И еще !
Куда в обще помещаются загруженные фотографии ?
sims4-admin
Сообщений: 6
Репутация: 0

Сообщение # 2306 | 10:10:12
Здравствуйте. Скажите пожалуйста, как сделать так, чтобы текст выводился только на главной странице каталога файлов? То есть, чтобы на 2,3,4...и т.д. страницах не выводился этот текст. На всех страницах переменные одинаковые sad

И еще вопрос: нужна нумерация страниц в каталоге файлов в тайтле, но так, чтобы на главной не было нумерации, как это сделать?
leonoff(on)
Сообщений: 296
Репутация: 57

Сообщение # 2307 | 10:19:33
sims4-admin,
Цитата sims4-admin ()
Скажите пожалуйста, как сделать так, чтобы текст выводился только на главной странице каталога файлов?

Код
<? if ( $REQUEST_URI$ == '/load/' ) ?>
    text
<? endif ?>

Цитата sims4-admin ()
нужна нумерация страниц в каталоге файлов в тайтле, но так, чтобы на главной не было нумерации, как это сделать?

Код
<? ifnot ( $REQUEST_URI$ == '/load/' ) ?>
    Страница № <? substr ( $REQUEST_URI$, 11 ) ?>
<? endif ?>

Муж рассказал жене, что у него есть любовница. Причина смерти: коронавирус.
Сообщение отредактировал leonoff(on) - Вторник, 22 Дек 2015, 10:20:39
vredniey-faktor
Сообщений: 67
Репутация: 38

Сообщение # 2308 | 10:34:44
Цитата sims4-admin ()
Здравствуйте. Скажите пожалуйста, как сделать так, чтобы текст выводился только на главной странице каталога файлов? То есть, чтобы на 2,3,4...и т.д. страницах не выводился этот текст. На всех страницах переменные одинаковые И еще вопрос: нужна нумерация страниц в каталоге файлов в тайтле, но так, чтобы на главной не было нумерации, как это сделать?

Про тайтл. Попробуй такой код использовать. Код покажет нумерацию страниц в виде (номер_страницы). На главной странице каталога файлов номера не будет

А вот и код:
Код
<?if($CURRENT_PAGE$=='<span class="currentPage79">1</span>')?><?else?> (<?substr($CURRENT_PAGE$, 28, strpos(substr($CURRENT_PAGE$, 28), '>')-6)?>)<?endif?>


Добавлено (22 Дек 2015, 10:34:44)
---------------------------------------------

Цитата sims4-admin ()
Здравствуйте. Скажите пожалуйста, как сделать так, чтобы текст выводился только на главной странице каталога файлов? То есть, чтобы на 2,3,4...и т.д. страницах не выводился этот текст. На всех страницах переменные одинаковые

На счет вывода инфы только на главной странице каталога файлов, я предлагаю такое решение:

Код
<?if($CURRENT_PAGE$='<span class="currentPage79">1</span>')?>нужная_инфа<?endif?>

WAV-LIBRARY.NET - Библиотека звуков. Бесплатные звуки, шумовые эффекты, сэмплы и музыка в WAV, MP3, OGG форматах.
sims4-admin
Сообщений: 6
Репутация: 0

Сообщение # 2309 | 10:45:55
leonoff(on), vredniey-faktor, Спасибо вам огромное, 2 дня искал об этом информацию, и именно вы помогли!)
DrSkif
Сообщений: 28
Репутация: 0

Сообщение # 2310 | 13:46:55
есть такая строка "7 лет на рынке", какое выражение нужно составить, чтоб было вида $YEAR$ - 2009=7, искал не нашел(((
Сообщество uCoz » Мастерская uCoz » Дизайн: управление шаблонами » Условные операторы и системные коды (Особенности использования и интересные решения)
Поиск: