Модератор форума: 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$)?> |
|
Прикрепления:
5469409.jpg
(38.1 Kb)
Сообщение отредактировал bandjuk - Понедельник, 07 Янв 2013, 23:02:20
|
Добрый день. помогите пожалуйста как сделать так чтобы только в разделе [id:1] показывался информер $MYINF_6$ и больше нигде его не было видно?
например есть раздел "программы" нужно чтобы показывался информер $MYINF_6$ - (топ скачанных программ) только в этом разделе. |
Цитата (SL1de) Добрый день. помогите пожалуйста как сделать так чтобы только в разделе [id:1] показывался информер $MYINF_6$ и больше нигде его не было видно? например есть раздел "программы" нужно чтобы показывался информер $MYINF_6$ - (топ скачанных программ) только в этом разделе. <?if($MODULE_ID$='см. название модуля' and $URI_ID$='см. номер страницы')?>$MYINF_6$<?else?><?endif?> |
Может кто-нибудь подсказать какое нутро у $CATEGORIES$ ?
Добавлено (10 Янв 2013, 00:54:36) Цитата (fflesh) Если с разделов - то можно, скриптом, взять данные из блока категорий - там отображается сколько всего фоток в разделах - и вставить куда нужно. А если данные из альбомов - то только информером - список категорий в JavaScript формате + скрипт который будет все это дело парсить и распихивать куда нужно. предыдущий вопрос снимается, с ним я уже разобрался. В общем кол-во фоток в разделах получилось вывести таким кодом в информерах Код <?if($CATEGORY_NAME$='Название раздела')?><span class="catNumData">$NUM_DATA$</span><?endif?> С JavaScript сразу скажу - пока что, к сожалению, туго. Может кто-нибудь подскажет умную мысль? |
Кайман, создал информер:
в блок (пример): Код $MYINF_8$ <div class="arrowlistmenu"> <ul class="categoryitems"> <li><a href="/photo/devushki/3d/8">3D обои</a></li> <li><a href="/photo/devushki/avril_lavin/17">Аврил Лавин</a></li> <li><a href="/photo/avto_i_devushki/2">Авто и девушки</a></li> <li><a href="/photo/avto_moto/avtomobili/11">Автомобили</a></li> и т.д.......... </ul> <script type="text/javascript"> function setCatNumEnt(){ if(!window.uCatsOut)return; $('div.arrowlistmenu a').each(function(i){ var a=this,ah=a.href,cArr=window.uCatsOut; if(!/\/photo\//.test(ah))return; var t=ah.split('/'),id=t[t.length-1]||t[t.length-2],li=$(a).parent(); if(!isNaN(id)){ $.each(cArr,function(j){ if(cArr[j][0]==id){ li.append('<span class="catNumEnt">['+cArr[j][6]+']</span>'); } };); }; };); };setCatNumEnt(); </script> </div> стили (пример): Цитата div.arrowlistmenu, div.punkt {width:19.5em;} .arrowlistmenu ul, .punkt ul {list-style-type: none; margin: 0; padding: 0; margin-bottom: 0.8em;} .arrowlistmenu ul li{padding-bottom: 0.2em; position:relative;} .arrowlistmenu ul li a {font-size:1.2em; font-family: Tahoma,sans-serif; color: #4392B3; background: url(http://fotki.ucoz.ua/diz/arrowbullet.png) no-repeat center left; display: block; padding: 0.1em 1.7em 0.1em 1.2em; text-decoration: none; font-weight: bold;} .arrowlistmenu ul li a:visited {text-decoration:none; color:#3399FF;} .arrowlistmenu ul li a:hover {text-decoration:none; color:#FFFFFF; background-color:#4392B3;} div.arrowlistmenu span.catNumEnt{position:absolute; top:0.1em; right:0.2em; font-size:1em; font-family: Tahoma,sans-serif; color:#FFFFFF;} на выходе: Прикрепления:
9259123.jpg
(46.5 Kb)
·
4194605.jpg
(38.6 Kb)
Сообщение отредактировал bandjuk - Четверг, 10 Янв 2013, 01:23:20
|
у меня уже крыша начинает ехать....
Когда создаю информер с JavaScript - вообще не появляется кнопка его редактирования. Это так и должно быть? А если без него, вставляю код, а потом ставлю галочки на JavaScript - там где он вставлен ничего нет. И так не только с этим кодом... Добавлено (13 Янв 2013, 01:20:21) |
RideHed, как-то так
Код <?if(len(слова или код)>число)?><?substr(слово или код,0,число)?>тут многоточие, если символы порезало<?else?>слово<?endif?> |
Здравствуйте! Задача: Если в $MESSAGE$ присутствует слово "site.ru" то выводить картинку эту -> img.jpg, если нет, то ничего не выводить.
Как реализовать данную фразу в код? У меня получается так: <?if($MESSAGE$='www.site.ru')?><img src="http://site.ru/img.jpg" /><?endif?> Но не работает, в чём проблема? |
Цитата (FeNiKs8127) Но не работает, в чём проблема? Т.е., работать будет только в случае если $MESSAGE$ содержит только эту строку! В Вашем случае надо искать вхождение подстроки: Код <?if((strpos($MESSAGE$,'www.site.ru') != -1) || (strpos($MESSAGE$,'/site.ru') != -1))?>Нужный код<?endif?> Теперь будет срабатывать, если в $MESSAGE$ есть http://www.site.ru или http://site.ru Просто искат подстроку 'site.ru' не стоит - будет срабатывать, к примеру, на имя 'subsite.ru'. Есть одно ограничение - функция strpos ищет вхождение подстроки только в первых 1000 символах строки-источника. Т.е., если содержимое $MESSAGE$ по размеру больше 1000 символов и адрес сайта находится за этой границей, то сравнение не сработает! Если есть уверенность, что длина $MESSAGE$ не может превышать 2000 символов, то проверить всю строку можно так: Код <?if((strpos($MESSAGE$,'www.site.ru') != -1) || (strrpos($MESSAGE$,'www.site.ru') != -1) || (strpos($MESSAGE$,'/site.ru') != -1) || (strrpos($MESSAGE$,'/site.ru') != -1))?>Нужный код<?endif?> Если надо работать с любой длиной $MESSAGE$, то условные операторы, увы, не помогут - прийдется использовать javascript! Сообщение отредактировал sch779 - Понедельник, 14 Янв 2013, 02:05:58
|
sch779, на моём сайте код $MESSAGE$ использует всего 100 символов, так что мне больше не нужно. Спасибо Огромное, очень помогли.
|
Цитата (Кайман) Когда создаю информер с JavaScript - вообще не появляется кнопка его редактирования. Это так и должно быть? Прикрепления:
2949604.jpg
(12.1 Kb)
|
|
| |||