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


bit_vlad
Сообщений: 77
Репутация: -12

Сообщение # 2326 | 12:54:22
Всем привет smile Друзья помогите сделать с помощью условных операторов такую функцию:
Нужно что бы показывало текст, картинку и тд с определенной даты...
Например:
При добавлении фильма я в дополнительном поле напишу дату 11.01.2016
Нужно что бы до этой даты показывало один текст или картинку а в тот день который я напишу в дополнительном поле менялось на другое...
Все обыскался никак не могу найти похожее и не кто не может помочь...
Вот тут парень пытался обращаться с этим вопросом но ниче не получилось...
vredniey-faktor
Сообщений: 67
Репутация: 38

Сообщение # 2327 | 13:06:17
Цитата bit_vlad ()
Всем привет Друзья помогите сделать с помощью условных операторов такую функцию:Нужно что бы показывало текст, картинку и тд с определенной даты...
Например:
При добавлении фильма я в дополнительном поле напишу дату 11.01.2016
Нужно что бы до этой даты показывало один текст или картинку а в тот день который я напишу в дополнительном поле менялось на другое...
Все обыскался никак не могу найти похожее и не кто не может помочь...
Вот тут парень пытался обращаться с этим вопросом но ниче не получилось...

Попробуй так:


Код
<?if($ДОПОЛНИТЕЛЬНОЕ_ПОЛЕ$<='11.01.2016')?>ОДНО<?else?>ВТОРОЕ<?endif?>

Если значение в дополнительном поле равно, либо меньше 11.01.2016,то выдаст ОДНО, если нет, то ВТОРОЕ
$ДОПОЛНИТЕЛЬНОЕ_ПОЛЕ$ - код твоего дополнительного поля.

Кстати такое условие с датой отлично работает:
Код
<?if($DATE$='11.01.16')?>ОДНО<?else?>ВТОРОЕ<?endif?>

Формат даты в условии, должен быть одинаковым с форматом даты в общих настройках панель управления сайтом

WAV-LIBRARY.NET - Библиотека звуков. Бесплатные звуки, шумовые эффекты, сэмплы и музыка в WAV, MP3, OGG форматах.
Сообщение отредактировал vredniey-faktor - Понедельник, 11 Янв 2016, 13:13:25
bit_vlad
Сообщений: 77
Репутация: -12

Сообщение # 2328 | 15:04:38
Цитата vredniey-faktor ()
Попробуй так:
<?if($ДОПОЛНИТЕЛЬНОЕ_ПОЛЕ$<='11.01.2016')?>ОДНО<?else?>ВТОРОЕ<?endif?>1

Если значение в дополнительном поле равно, либо меньше 11.01.2016,то выдаст ОДНО, если нет, то ВТОРОЕ
$ДОПОЛНИТЕЛЬНОЕ_ПОЛЕ$ - код твоего дополнительного поля.

Кстати такое условие с датой отлично работает:
<?if($DATE$='11.01.16')?>ОДНО<?else?>ВТОРОЕ<?endif?>1

Формат даты в условии, должен быть одинаковым с форматом даты в общих настройках панель управления сайтом

Не получается sad
leonoff(on)
Сообщений: 296
Репутация: 57

Сообщение # 2329 | 15:31:45
bit_vlad, и не получится, т.к. это

Цитата
<?if($DATE$='11.01.16')?>ОДНО<?else?>ВТОРОЕ<?endif?>

работает, только если даты равны. Потому что тупо сравниваются две строки. Здесь все намного сложнее. Нужно отдельно сравнивать год, месяц и дату. Причем условия вкладывать друг в друга. Получится 3-х уровневая вложенность. Тут выйдет метровый код. Рублей так на 500 smile

Муж рассказал жене, что у него есть любовница. Причина смерти: коронавирус.
Сообщение отредактировал leonoff(on) - Понедельник, 11 Янв 2016, 15:32:36
bit_vlad
Сообщений: 77
Репутация: -12

Сообщение # 2330 | 15:39:10
Цитата leonoff(on) ()
bit_vlad, и не получится, т.к. это
Цитата
<?if($DATE$='11.01.16')?>ОДНО<?else?>ВТОРОЕ<?endif?>

работает, только если даты равны. Потому что тупо сравниваются две строки. Здесь все намного сложнее. Нужно отдельно сравнивать год, месяц и дату. Причем условия вкладывать друг в друга. Получится 3-х уровневая вложенность. Тут выйдет метровый код. Рублей так на 500

А кто сможет это реализовать для моего сайта ?
vredniey-faktor
Сообщений: 67
Репутация: 38

Сообщение # 2331 | 15:46:31
Цитата bit_vlad ()
А кто сможет это реализовать для моего сайта ?
Где добавляешь фильмы? в каталог файлов, или в каталог статей, блог или куда? и Напиши свой код дополнительного поля, как оно у тебя в шаблоне выглядит?

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

Сообщение # 2332 | 16:13:06
Цитата vredniey-faktor ()
Где добавляешь фильмы? в каталог файлов, или в каталог статей, блог или куда? и Напиши свой код дополнительного поля, как оно у тебя в шаблоне выглядит?

Добавляю премьеры которые должны выйти или которые недавно вышли
Добавляю через модуль Доска объявлений
Код дополнительного поля:

Код
$OTHER3$

Формат даты и времени в Общих настройках ПУ стоит вот такой 25.02.2005
Я использую два дополнительных поля:
В одно я пишу когда выйдет например 14 января а второе оставляю пустым после того как дата наступает приходится менять в ручную писать эту дату в другое поле...
А я хочу что бы все менялось автоматом написав в одно поле дату...
Через условные коды только добился вот этого:
Напишешь в первом поле дату будет красная иконка
Напишешь во втором поле дату будет зеленая иконка как на скрине


Вот такой код я использовал для условных:
Код
<?if($OTHER3$)?><div class="kinooff" style="" align="center"> <span class="statusOffline">
<img src="/images/kinooff.png" alt="" title="Скоро в кино с: $OTHER3$">
</span> </div>
<style>.kinooff {position:absolute; margin-top:-0px; margin-left:5px;} </style><?endif?>
<?if($OTHER4$)?><div class="kinoon" style="" align="center"> <span class="statusOffline">
<img src="/images/kinoon.png" alt="" title="Уже в кино с: $OTHER4$">
</span> </div>
<style>.kinoon {position:absolute; margin-top:-0px; margin-left:5px;} </style><?endif?>
Прикрепления: 8721252.jpg (69.2 Kb)
leonoff(on)
Сообщений: 296
Репутация: 57

Сообщение # 2333 | 16:33:12
bit_vlad, с учетом того, что тут не надо проверять еще и время набросал код.

Условные обозначения:
  • content1 - текущая дата меньше той, что прописана в доп.поле
  • content2 - текущая дата больше или равна той, что прописана в доп.поле


Вместо content1 и content2 ставим свое разумеется

Код
<? if ( $YEAR$ == substr($OTHER3$,-4) ) ?>

    <? if ( $MONTH$ > int ( substr($OTHER3$,3,2) ) ) ?>
   
        content2
      
    <? else ?>
   
        <? if ( $DAY$ >= int (substr($OTHER3$,0,2)) ) ?>
      
            content2
         
        <? else ?>
      
            content1
      
        <? endif ?>
      
    <? endif ?>

<? else ?>

    content2
   
<? endif ?>

Формат даты в поле other3 должен быть четко дд.мм.гггг (например, 11.01.2016)

Муж рассказал жене, что у него есть любовница. Причина смерти: коронавирус.
Сообщение отредактировал leonoff(on) - Понедельник, 11 Янв 2016, 16:35:26
bit_vlad
Сообщений: 77
Репутация: -12

Сообщение # 2334 | 17:04:42
Цитата leonoff(on) ()
bit_vlad, с учетом того, что тут не надо проверять еще и время набросал код.Условные обозначения:
content1 - текущая дата меньше той, что прописана в доп.поле
content2 - текущая дата больше или равна той, что прописана в доп.поле

Вместо content1 и content2 ставим свое разумеется

<? if ( $YEAR$ == substr($OTHER3$,-4) ) ?>

<? if ( $MONTH$ > int ( substr($OTHER3$,3,2) ) ) ?>

content2

<? else ?>

<? if ( $DAY$ >= int (substr($OTHER3$,0,2)) ) ?>

content2

<? else ?>

content1

<? endif ?>

<? endif ?>

<? else ?>

content2

<? endif ?>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

Формат даты в поле other3 должен быть четко дд.мм.гггг (например, 11.01.2016)


Воооо все работает!!!
Поставил дату 14.01.2016 показывает красным что типа скоро выйдет
Потом поставил дату 11.01.2016 тоесть сегодняшнюю показывает зеленым что уже в кино!
Спасибо тебе большое долго не мог реализовать это(((

Ну это работает только на странице материала и комментарий к нему
Мне нужно еще что бы показывалось в вид материалов модуля Доска объявлений
Так как в вид материалов нету вот этих тегов $DAY$ $MONTH$ $YEAR$
Из за этого не работает... ну а на странице материала и комментарий к нему все работает как часики ok
leonoff(on)
Сообщений: 296
Репутация: 57

Сообщение # 2335 | 18:55:01
bit_vlad, $DATE$ это дата добавления... перепутал

Муж рассказал жене, что у него есть любовница. Причина смерти: коронавирус.
Сообщение отредактировал leonoff(on) - Понедельник, 11 Янв 2016, 19:01:04
bit_vlad
Сообщений: 77
Репутация: -12

Сообщение # 2336 | 19:17:39
Цитата leonoff(on) ()
$DATE$ это дата добавления... перепутал

Так как реализовать это в вид материалов?
Только подробнее напишите пожалуйста код
leonoff(on)
Сообщений: 296
Репутация: 57

Сообщение # 2337 | 19:44:23
bit_vlad, ну js можно. В вид материалов вставить
Код
<script>
nowDate = new Date();
filmDate = new Date('<?substr($OTHER3$,-4)?>-<?int ( substr($OTHER3$,3,2) )?>-<?int (substr($OTHER3$,0,2))?>');
if ( nowDate >= filmDate ) {
    document.write('<div class="kinoon" style="position:absolute; margin-top:-0px; margin-left:5px;" align="center"><span class="statusOffline"><img src="/images/kinoon.png" alt="" title="Уже в кино с: $OTHER4$"></span></div>');
} else {
    document.write('<div class="kinooff" style="position:absolute; margin-top:-0px; margin-left:5px;" align="center"><span class="statusOffline"><img src="/images/kinooff.png" alt="" title="Скоро в кино с: $OTHER3$"></span></div>');
};
</script>

Вот по этому я с подобными вопросами всегда отправляю на upartner. Кажется (задающему), что вопрос пустяковый, а времени отбирает... Очередной раз убедился, что нужно на partner.pro сразу отправлять когда видно, что возни много smile

Муж рассказал жене, что у него есть любовница. Причина смерти: коронавирус.
bit_vlad
Сообщений: 77
Репутация: -12

Сообщение # 2338 | 19:55:25
Цитата leonoff(on) ()
ну js можно. В вид материалов вставить<script>
nowDate = new Date();
filmDate = new Date('<?substr($OTHER3$,-4)?>-<?int ( substr($OTHER3$,3,2) )?>-<?int (substr($OTHER3$,0,2))?>');
if ( nowDate >= filmDate ) {
document.write('<div class="kinoon" style="position:absolute; margin-top:-0px; margin-left:5px;" align="center"><span class="statusOffline"><img src="/images/kinoon.png" alt="" title="Уже в кино с: $OTHER4$"></span></div>');
} else {
document.write('<div class="kinooff" style="position:absolute; margin-top:-0px; margin-left:5px;" align="center"><span class="statusOffline"><img src="/images/kinooff.png" alt="" title="Скоро в кино с: $OTHER3$"></span></div>');
};
</script>1
2
3
4
5
6
7
8
9
10
11
12
13
14

Вот по этому я с подобными вопросами всегда отправляю на upartner. Кажется (задающему), что вопрос пустяковый, а времени отбирает... Очередной раз убедился, что нужно на partner.pro сразу отправлять когда видно, что возни много

Благодарю, все работает отлично smile наконец то нашел человека кто смог бы это реализовать!
hesh
Сообщений: 4
Репутация: 5

Сообщение # 2339 | 03:58:55
Задача такая если раздел А то показывать фоновую картинку 1 если раздел В (или не А) то картинку 2
zababasta
Репутация: 0

Сообщение # 2340 | 20:52:54
Нужен текст который будет отображаться при условии что пользователь гость.
То-есть if group id guest, только не знаю как это реализовать на юкозе.
Хелп плиз!
Сообщество uCoz » Мастерская uCoz » Дизайн: управление шаблонами » Условные операторы и системные коды (Особенности использования и интересные решения)
Поиск: