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


Victor
Сообщений: 1141
Репутация: 576

Сообщение # 196 | 16:57:26
dididima, strpos(S1,S2):
Quote
Ищет первое вхождение строки S2 в строку S1, проходя от начала S1 к концу. Сравнение производится с учетом регистра. Оба параметра должны быть заданы как строки (или как результат вызова функции, возвращающей строку). Поиск ограничен первыми 1000 символами строки S1. Сравнение ограничено первыми 100 символами строки S2. Возвращает целое число - позицию строки S2 от начала S1, считая от 0. Если вхождение не найдено, возвращает -1. ( возвратит 2).
Возможно, в этом проблема.
Marc-Admin
Сообщений: 24
Репутация: 2

Сообщение # 197 | 21:29:45
У меня в первом контейнере есть условный оператор:

<?if($CATEGORIES$)?>
<div class="boxTable"><h2>Рубрики</h2><div class="boxContent">$CATEGORIES$</div></div>
<?endif?>

Нужно, чтобы $CATEGORIES$ в этом месте не выводились, если открыты любые страницы доски объявлений. Как должен выглядеть условный оператор? Спасибо!
Сообщение отредактировал Marc-Admin - Вторник, 09 Авг 2011, 21:30:18
FisherLV
Сообщений: 40
Репутация: 41

Сообщение # 198 | 21:52:09
Marc-Admin, думается, что так :

Code
<?if!($MODULE_ID$ = "board")?>

................... ВАШ КОД ..............................

<?endif?>
Сообщение отредактировал FisherLV - Вторник, 09 Авг 2011, 21:52:33
Miss_Esq
Сообщений: 13859
Репутация: 4159
Уровень замечаний:

Сообщение # 199 | 23:47:36
Marc-Admin,
Quote
Спасибо, разобрался, конечный вариант выглядит так
Не совсем ...

<?ifnot($MODULE_ID$='board')?><div class="boxTable"><h2>Рубрики</h2><div class="boxContent"> <?ifnot($MODULE_ID$='board')?>$CATEGORIES$ </div></div><?endif?><?endif?>

GORDON-HLCS
Репутация: 2

Сообщение # 200 | 20:08:14
Здравствуйте, в общем я снова тут biggrin Как я уже говорил, с УО у меня так и не получается подружится, вроде принцип работы усвоил, но как стоит составлять новый УО, начинаются проблемы. Мне осталось только установить персональные цвета для групп пользователей в мини-чате и все, но не получается - вот собственно код, что тут не так, помогите:
Quote
<?if($NAME$)?><a href="javascript:void('Apply to')" onclick="parent.window.document.getElementById('mchatMsgF').focus();
parent.window.document.getElementById('mchatMsgF').value+='$NAME$, ';
return false;"><span style="color:<?if($GROUP_ID$=1)?>orange<?else?><?if($GROUP_ID$=4)?>red<?endif?><?endif?>; font-weight: bold; ">$NAME$</span></a><?endif?>


Добавлено (13-Авг-2011, 20:08:14)
---------------------------------------------
В коде для образца приведены только группы пользователей и администраторов, просто подскажите как сделать УО правильно, а я уже думаю смогу потом сам в ручную добавить остальные группы happy

~ status: online ~
Сообщение отредактировал GORDON-HLCS - Суббота, 13 Авг 2011, 20:09:25
FeniX_kz
Сообщений: 1642
Репутация: 971

Сообщение # 201 | 20:15:12
GORDON-HLCS, попробуйте так

Code
<?if($NAME$)?><a href="javascript:void('Apply to')" onclick="parent.window.document.getElementById('mchatMsgF').focus();  
parent.window.document.getElementById('mchatMsgF').value+='$NAME$, ';  
return false;"><span style="font-weight: bold;"><?if($GROUP_ID$=1)?><font color="orange">$NAME$</font><?else?><?if($GROUP_ID$=4)?><font color="red">$NAME$</font><?endif?><?endif?></span></a><?endif?>

.::I'll be back::.
Выбор за тобой!
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 202 | 20:50:07
GORDON-HLCS,
Quote (GORDON-HLCS)
<?if($GROUP_ID$=1)?>orange<?else?>

В кавычках значение ....
Quote (GORDON-HLCS)
<?if($GROUP_ID$='1')?>orange<?else?>

...

Всё написанное выше - моё личное мнение и на абсолютную правоту не претендует.
Есть вопросы лично ко мне - пиши сюда: http://likbezz.ru/forum/8
GORDON-HLCS
Репутация: 2

Сообщение # 203 | 12:32:09
sch779, fflesh, спасибо, но мне как не совсем еще опытному веб-мастеру не совсем понятно, особенно сообщение 312, из которого кстати хотелось бы узнать, за что именно отвечает $("#aName") и из-за чего именно можно получить бан и от кого? wacko

Я наверное уже дня 4 лазаю в инете и ищу альтернативные способы решения проблемы, и пока что более оптимальным вариантом считаю сделать так, как я написал в сообщении 309:
Quote (GORDON-HLCS)
ник делать ссылкой на профиль, а для того, чтобы была возможность ответить в мини-чате, рядом с ником приделать кликабельную ссылку, например [Ответить]

То есть аналогично по принципу, как это сделано в комментариях cranky

Либо же каким то образом сделать через CSS, но я не знаю что именно в таблице стилей отвечает за настройки в $CHAT_BOX$ shy
Добавлено (15-Авг-2011, 12:32:09)
---------------------------------------------
Quote (fflesh)
А вообще, если специфических групп не оч. много или нужно выделить только Администраторов или Модераторов, коих на сайте обычно не бог весть сколько (немного) и не так уж часто они меняются, то проще это сделать прописав ссылкам класс, типа:
Code

В том то всё и дело, что если нужно было бы прописать одних админов и модеров, от силы человек пять, я бы уже давно воспользовался простым скриптом c $USER_ID$ (который я ко всему прочему тестил и он прекрасно работает), НО... - проблема в том, что мне бы хотелось сделать цвет в мини-чате для ников каждой группы (привел бы примеры сайтов, где так сделано, но боюсь схлопотать бан здесь biggrin ), ну то есть привязать $NAME$ к $GROUP_ID$ с помощью операторов - но как оказалось, системой не предусмотрен этот момент и альтернативного скрипта тоже найти не удалось. Итог: $GROUP_ID$ не хочет дружить с $NAME$ в мини-чате sad

~ status: online ~
Сообщение отредактировал GORDON-HLCS - Понедельник, 15 Авг 2011, 12:36:24
Komoff
Сообщений: 595
Репутация: 276

Сообщение # 204 | 13:35:18
fflesh, есть ещё такое решение по цвету групп. Я понимаю, что это не ты спрашивал, просто я сам все это время гадал "как?", а тут довольно оригинально, и по-моему просто (?).
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 205 | 15:24:16
GORDON-HLCS,
Quote (GORDON-HLCS)
привел бы примеры сайтов, где так сделано, но боюсь схлопотать бан здесь biggrin

Ну, значит оснуву для получения бана понял.
А если серьёзно, была, нашумевшая в одно время, тема про медали, которые вставлялись функцией get под аватар на форуме, после того как многие стали злоупотреблять данной функцией, ввели ограничение по количеству высокочастотных запросов с одного IP, за что на 3 часа вешается табличка - «Сайт заблокирован», если количество запросов не иссякает - табличка так и висит.
Это вкратце и своими словами ... )

Diletant_NZ,
Quote (Diletant_NZ)
fflesh, есть ещё такое решение по цвету групп.

Да, я видел, что дополнительные поля доступны в чате, но что-то не подумал, а идея, очень неплохая ... )
Quote (Diletant_NZ)
понимаю, что это не ты спрашивал, просто я сам все это время гадал "как?",

Благодарю.
Как нить, обязательно напишу подробную инструкцию... ) тем более не сложно всё это организовать ... ) - Поле скрыть, группу заносить скриптом в поле ... Все - остальное стили. (проверил - работает)
...
GORDON-HLCS,
Quote (GORDON-HLCS)
Итог: $GROUP_ID$ не хочет дружить с $NAME$ в мини-чате

На ваш вопрос ответили.
Лучшего решения пока я не вижу.
Просто, логично, красиво.
...

Всё написанное выше - моё личное мнение и на абсолютную правоту не претендует.
Есть вопросы лично ко мне - пиши сюда: http://likbezz.ru/forum/8
Сообщение отредактировал fflesh - Понедельник, 15 Авг 2011, 16:03:45
GORDON-HLCS
Репутация: 2

Сообщение # 206 | 01:14:56
Quote (fflesh)
Да, я видел, что дополнительные поля доступны в чате, но что-то не подумал, а идея, очень неплохая ... )

А для чего эти дополнительные поля используют? surprised
Quote (sch779)
Извини, но я не понял - как это относится к раскраске ников пользователей по группам?!

Quote (sch779)
"Дружба" в данном случае не при чем - просто в шаблоне мини-чата недоступна переменная $GROUP_ID$ - вот и все дела!

Вот так и относится - насколько я понял, ники не раскрашиваются, потому-что сам ник в мини-чате это не ссылка, ведущая к примеру на профиль пользователя, а форма ответа другому пользователю в чате, как на форумах (добавление ника в форму сообщения после клика по нему). Дело в том, что я делал именно ссылку на профиль из ника в чате, то есть использовался уже не модуль $NAME$ а другой - то ли $USERNAME$ или $MESSAGE$ к сожалению забыл, и при таком варианте принцип модуля $GROUP_ID$ в чате работал, но добавление ника в форму сообщения по клику соответственно исчезло, поэтому я временно восстановил шаблон обратно... В общем у меня это вышло благодаря скрипту готового расширенного мини-чата с другого сайта, поэтому я могу скинуть ссылку в личку, чтобы кто-нибудь из вас посмотрел код и может доработал бы его, чтобы все работало - и ссылка на профиль и возможность ответить пользователю wink

~ status: online ~
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 207 | 09:54:17
GORDON-HLCS,
Quote (GORDON-HLCS)
Это я вам как пример дал, а на самом же деле из этого всего мне нужно чтобы работали раскрашенные группы

Раскрашенные юзернеймы делаются так:

Шаблон форма добавления:
Меняем:
Code
<?if($FLD_CUSTOM1$||$FLD_CUSTOM2$)?>
<table border="0" cellpadding="1" cellspacing="1" width="100%">
<tr><td width="50%">$FLD_CUSTOM1$</td><td>$FLD_CUSTOM2$</td></tr>
</table>
<?endif?>

На вот это:
Code
<?if($FLD_CUSTOM1$||$FLD_CUSTOM2$)?>
<table border="0" cellpadding="1" cellspacing="1" width="100%">
<tr><td width="50%"><input maxlength="60" name="custom1" class="mchat" id="mchatC1F" value="" type="hidden" /></td><td>$FLD_CUSTOM2$</td></tr>
</table>
<?endif?>

Активируем в настройках чата первое доп. поле ....

В шаблоне вид материала чата, меняем, вот этот фрагмент - только то, что выделено:
Quote
<?if($USERNAME$)?><a class="ugpLink ug$CUSTOM1$" href="javascript://" onclick="reChat('$NAME$');return false;" title="$USERNAME$" rel="nofollow"><b>$NAME$</b></a>


В блок с чатом, после кода $CHAT_BOX$ добавляем следующий скрипт:
Code
<script type="text/javascript">
if(document.getElementById('mchatC1F')){document.getElementById('mchatC1F').value='$GROUP_ID$';};
</script>


В стилях задаём отображение элементов:
Code
a.ugpLink{display:inline-block;font:100%/16px Georgia,serif;background:no-repeat left top;}
a.ug1,a.ug2,a.ug3,a.ug4,a.ud5,a.ug251,a.ug255{padding-left:17px;}
a.ug1:link,a.ug1:visited,a.ug1:hover{color:#90C;background-image:url(/_theme1/_st/ico/user.gif);} /* Зарегистрированные */
a.ug2:link,a.ug2:visited,a.ug2:hover{color:#096;background-image:url(/_theme1/_st/ico/verify.gif);} /* Проверенные */
a.ug3:link,a.ug3:visited,a.ug3:hover{color:#03C;background-image:url(/_theme1/_st/ico/moder.gif);} /* Модераторы */
a.ug4:link,a.ug4:visited,a.ug4:hover{color:#C30;background-image:url(/_theme1/_st/ico/admin.gif);} /* Администраторы */
a.ug5:link,a.ug5:visited,a.ug5:hover{color:#096;background-image:url(/_theme1/_st/ico/users.gif);} /* Пользователи */
a.ug251:link,a.ug251:visited,a.ug251:hover{color:#F90;background-image:url(/_theme1/_st/ico/friends.gif);} /* Друзья */
a.ug255:link,a.ug255:visited,a.ug255:hover{color:#999;background-image:url(/_theme1/_st/ico/banned.gif);} /* Заблокированные */

ID групп пользователей смотреть в ПУ, если не в курсе.
Если не будете использовать иконки групп, стили «background» писать не нужно.
То бишь вот так, для просто выделения цветом:
Code
a.ugpLink{display:inline-block;font:100%/16px Georgia,serif;}
a.ug1:link,a.ug1:visited,a.ug1:hover{color:#90C;} /* Зарегистрированные */
a.ug2:link,a.ug2:visited,a.ug2:hover{color:#096;} /* Проверенные */
a.ug3:link,a.ug3:visited,a.ug3:hover{color:#03C;} /* Модераторы */
a.ug4:link,a.ug4:visited,a.ug4:hover{color:#C30;} /* Администраторы */
a.ug5:link,a.ug5:visited,a.ug5:hover{color:#096;} /* Пользователи */
a.ug251:link,a.ug251:visited,a.ug251:hover{color:#F90;} /* Друзья */
a.ug255:link,a.ug255:visited,a.ug255:hover{color:#999;} /* Заблокированные */

Если какие группы чат не наблюдают - стили к ним тоже писать не нужно.
Названия групп может отличаться от ваших.
Цвета групп - свои, прочие стили и тд - по желанию.

Результат типа такой:


...

Скрипт не будет изменять добавленные ранее сообщения, ....

...
Прикрепления: 8512365.png (4.6 Kb)

Всё написанное выше - моё личное мнение и на абсолютную правоту не претендует.
Есть вопросы лично ко мне - пиши сюда: http://likbezz.ru/forum/8
Сообщение отредактировал fflesh - Среда, 17 Авг 2011, 11:53:54
Marc-Admin
Сообщений: 24
Репутация: 2

Сообщение # 208 | 19:17:13
Пожалуйста, подскажите. В таблице сss есть строка, которая отвечает за оптимальный показ верхнего баннера:

#logoPick {float:right;width:69%;background:url('http://www.investa24.com/investa24h.jpg') no-repeat #E0E8EA;height:131px;max-width:1024px;}

А в глобальном блоке "Верхняя часть сайта" соответственно есть <div id="logoPick"</div>

Проблемы с отображением в IE- баннер сдвинут влево. Как с помощью оператора сделать так, что если IE, то width:60% (см. строку выше). И в каком месте поставить оператор?
Спасибо за помощь!
fflesh
Сообщений: 1784
Репутация: 1314

Сообщение # 209 | 19:42:55
Marc-Admin,
Quote (Marc-Admin)
В таблице сss есть строка, которая отвечает за оптимальный показ верхнего баннера:

Какая необычная формулировка ...
Quote (Marc-Admin)
Проблемы с отображением в IE- баннер сдвинут влево. Как с помощью оператора сделать так, что если IE, то width:60% (см. строку выше). И в каком месте поставить оператор?

В корне разни́тся с предыдущим определением....
...

Вот так:
Code
#logoPick{float:right;width:69%;background:url('http://www.investa24.com/investa24h.jpg') no-repeat #E0E8EA;height:131px;max-width:1024px;}       
* html #logoPick{width:60%;} /* Для ИЕv6 */
*+html #logoPick{width:60%;} /* Для ИЕv7 */


Или вот так:
Code
#logoPick{float:right;width:60%;background:url('http://www.investa24.com/investa24h.jpg') no-repeat #E0E8EA;height:131px;max-width:1024px;} /* Для всех */
html>body #logoPick{width:69%;} /* Для всех, кроме ИЕ */


Или так:
Code
#logoPick{float:right;width:69%;*width:60%;background:url('http://www.investa24.com/investa24h.jpg') no-repeat #E0E8EA;height:131px;max-width:1024px;} /* Не валидно !!! */

...

Всё написанное выше - моё личное мнение и на абсолютную правоту не претендует.
Есть вопросы лично ко мне - пиши сюда: http://likbezz.ru/forum/8
Сообщение отредактировал fflesh - Среда, 17 Авг 2011, 20:39:08
rodatam
Сообщений: 160
Репутация: 12

Сообщение # 210 | 02:25:30
Вопрос в следующем, переменная $ORDER_TAX$ в зависимости от того розничный это или оптовый покупатель принимает значение €XX.XX стоимость доставки или €-XX.XX скидка (с минусом). Соответственно мне нужно чтобы в одном случаи выводилось слово "Скидка", а во втором "Стоимость доставки". Пол дня ковырял, но так и не добился работы нормальной.
Вот мой код, помогите исправить плиз...

<?if (substr($ORDER_TAX$,0,1)='€-')?><td><h4><!--<s4607>-->Скидка<!--</s>--></h4>$ORDER_TAX$</td><?else?><td><h4><!--<s4607>-->Стоимость доставки<!--</s>--></h4> $ORDER_TAX$</td><?endif?>

Сообщение отредактировал rodatam - Суббота, 03 Сен 2011, 02:51:57
Поиск: