| Модератор форума: Yuri_G |
| Сообщество uCoz Мастерская uCoz Дизайн: управление шаблонами Условные операторы и системные коды (Особенности использования и интересные решения) |
| Условные операторы и системные коды |
|
Условные операторы от новичка до профи
Если вы совершенно не понимаете, как работают условные операторы, и информации в панели управления для вас мало, то я попробую вам объяснить. Самое главное, чтобы вы настроились на то, что это очень просто. Так оно и есть! И так, начну с понятий. Условные операторы - это специальные коды-символы, которые могут выполнять какие-то сценарии. Вы можете создать совершенно новую опцию на своём сайте, которая собственно не предусмотрена панелью. Для начала нужно понять и привыкнуть к составляющим частям самого кода сценария, а это: Код <?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$ Цитата Как сделать альтернативные условия, например для кода Код $GROUP_ID$ Код <?if($GROUP_ID$=5 or ($GROUP_ID$=4 and $USER$='Alex'))?>...<?endif?> Цитата Есть ли операторы, позволяющие пользователю видеть в списке категорий только те, в которые он имеет доступ? Цитата Код $GROUP_ID$ Цитата Есть код Код $USER_LOGGED_IN$ Код <?if(!$USER_LOGGED_IN$)?> |
|
Спасибо щас попробую!
Quote (Астра) rezkiy, или так: <?if(!$PRICE_OLD$)?>$BRIEF$<?endif?> Это не работает Спасибо , разобрался сам. сделал так <?if(Прайс Олд)?>стиль, фон и тэдэ><?else?><span style="font-size: 11pt"><font color="#000000">$BRIEF$<?endif?> Вот так отображаеться цена со скидкой перечеркнутой, а если нету скидки то Бриф- что у нас тоже цена. ![]() Сообщение отредактировал rezkiy - Вторник, 25 Сен 2012, 20:17:17
|
|
Можно поступить проще:
Code <?if (strpos(substr($URI_ID$,-5),'page1,page2,...,age10,...,ge100') != -1)?>Код для всех страниц, перечисленных в списке<?endif?> Зачем substr? Дело в том, что если просто искать вхождение всей строки $URI_ID$, то, к примеру, страница 'page1', в этом случае, совпадет с 'page1' и с 'page10' и с 'page11' и т.д.! А вышеприведенный код будет работать правильно для любых значений $URI_ID$! |
|
Quote (Rammetall) Сколько максимально можно сделать альтернативных условий? Сколько угодно. |
|
Огромное спасибо за ответы!
Добавлено (29-Сен-2012, 18:34:59) Добавлено (29-Сен-2012, 18:38:53) Добавлено (29-Сен-2012, 18:51:21) Добавлено (29-Сен-2012, 19:06:56) |
|
Rammetall, может неправильно прописаны? Полный код приведите.
|
|
Вот код всего, что задействовано:
$GLOBAL_AHEADER$: Code <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>$SITE_NAME$ - $MODULE_NAME$</title> <?$META_DESCRIPTION$?> <link type="text/css" rel="StyleSheet" href="/_st/my.css" /> </head> <body style="background-color:#000000; margin:0;padding:0;"> $ADMIN_BAR$ <div align='center'><img alt='' src='/head/head.png'> <br> <table cellspacing='0' cellpadding='0'> <tr> <td><a href='/'><img src='/head/glav1.png' onmouseover="this.src='/head/glav2.png'" onmouseout="this.src='/head/glav1.png'" border='0' alt='Home'></a></td> <td><a href='/index/concerts/0-5'><img src='/head/conc1.png' onmouseover="this.src='/head/conc2.png'" onmouseout="this.src='/head/conc1.png'" border='0' alt='Concerts'></a></td> <td><a href='/search/?q='><img src='/head/pois1.png' onmouseover="this.src='/head/pois2.png'" onmouseout="this.src='/head/pois1.png'" border='0' alt='Search'></a></td> <td><a href='/index/contacts/0-7'><img src='/head/cont1.png' onmouseover="this.src='/head/cont2.png'" onmouseout="this.src='/head/cont1.png'" border='0' alt='Contacts'></a></td> </tr> </table></div> <!-- <middle> --> <table border="0" cellpadding="0" cellspacing="0" width="900px" align="center"> <tr> <td valign="top" width="900px" style="padding-top:5px"> <table border="0" cellpadding="10" cellspacing="0" width="100%" style="border:2px solid #880000;"><tr><td style="background:#000000;"><!-- <body> --> Страницы сайта: <?if($URI_ID$='page1' || $URI_ID$='page2' || $URI_ID$='page3' || $URI_ID$='page4' || $URI_ID$='page5' || $URI_ID$='page6' || $URI_ID$='page7' || $URI_ID$='page8' || $URI_ID$='page9' || $URI_ID$='page10' || $URI_ID$='page11' || $URI_ID$='page12' || $URI_ID$='page13' || $URI_ID$='page14' || $URI_ID$='page15' || $URI_ID$='page16' || $URI_ID$='page17' || $URI_ID$='page18' || $URI_ID$='page19' || $URI_ID$='page20' || $URI_ID$='page21' || $URI_ID$='page22' || $URI_ID$='page23' || $URI_ID$='page24' || $URI_ID$='page25' || $URI_ID$='page26' || $URI_ID$='page27' || $URI_ID$='page28' || $URI_ID$='page29' || $URI_ID$='page30' || $URI_ID$='page31' || $URI_ID$='page32' || $URI_ID$='page33' || $URI_ID$='page33' || $URI_ID$='page34' || $URI_ID$='page35' || $URI_ID$='page36' || $URI_ID$='page37' || $URI_ID$='page38' || $URI_ID$='page39' || $URI_ID$='page40' || $URI_ID$='page41' || $URI_ID$='page42' || $URI_ID$='page43' || $URI_ID$='page44' || $URI_ID$='page45' || $URI_ID$='page46' || $URI_ID$='page47' || $URI_ID$='page48' || $URI_ID$='page49' || $URI_ID$='page50')?>$GLOBAL_AHEADER$<?endif?> $CONTENT$<!-- </body> --></td></tr></table> </td> </tr> </table> <!-- </middle> --> <div align='center'>$POWERED_BY$</div> </body> </html> Сообщение отредактировал webanet - Воскресенье, 30 Сен 2012, 00:53:00
|
|
Скорее всего, ограничение связано с длинной условного выражения внутри оператора <?if?>
Или, что более вероятно, с общей длинной условного оператора начиная с открывающей угловой скобки и до закрывающей. Хотя - нет. Сейчас глянул - ограничение, похоже, именно на количество условий внутри if - 48, если добавить 49-ое условие, то уже не работает. Хотя, при грамотном использовании условных операторов на эти "грабли" очень трудно наступить! Я еще ни разу на подобные ограничения не наталкивался - предпочитаю очень длинные и трудночитаемые условия заменять на более "удобоваримые" конструкции. К примеру, типа той, что я приводил выше - там точно ограничений не будет! Кстати, если будешь переводить свое условие по моему примеру, то не забудь про ограничение оператора strpos - ищет в первых 1000 символах! Так что, если строка со списком страниц будет больше 1000 символов, то разбей ее на несколько: Code <if (strpos(substr($URI_ID$,-5),'page1,page2,page3') != -1) || (strpos(substr($URI_ID$,-5),'page4,page5,page6') != -1)>Код<?endif?> Сообщение отредактировал sch779 - Воскресенье, 30 Сен 2012, 00:12:54
|
|
|
|
Quote (Rammetall) а сократить его как-то можно? Смотря какое условие Вам нужно. Если именно то, которое Вы привели, то можно вообще упростить до минимума: Code <?if ((substr($URI_ID$,0,4) == 'page') && (substr($URI_ID$,4) >= 1) && (substr($URI_ID$,4) <= 50))?>$GLOBAL_AHEADER$<?endif?> Этот код выведет заголовок на всех страницах в диапазоне 'page1' - 'page50' Сообщение отредактировал sch779 - Воскресенье, 30 Сен 2012, 00:24:57
|
|
sch779, воооооооот, работает!!! Наконец-то есть решение, а то я запарился уже над этой проблемой думать! ОГРОМНОЕ Вам спасибо!
А можно спросить, что означает цифра 4 в коде, что-то я не пойму. Добавлено (30-Сен-2012, 00:40:47) Добавлено (30-Сен-2012, 00:51:47) Добавлено (30-Сен-2012, 12:13:31) Добавлено (30-Сен-2012, 17:31:18) |
|
Rammetall,
Quote А можно спросить, что означает цифра 4 в коде, что-то я не пойму Quote может не работать? Сообщение отредактировал Miss_Esq - Воскресенье, 30 Сен 2012, 17:38:06
|
| |||

Чат сообщества






