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


†Angel†
Сообщений: 387
Репутация: 128
Уровень замечаний:

Сообщение # 2266 | 02:28:06
Цитата Дурман ()
подскажите как сделать чтобы скрипт не срабатывал если сайт просматривает админ, но оставался включенным для других пользователей?

Код
<?if($GROUP_ID$="4")?><?else?>скрипт<?endif?>

Adguard - Рекламы не будет!
Сообщение отредактировал †Angel† - Воскресенье, 21 Июн 2015, 09:35:09
Дурман
Сообщений: 19
Репутация: 0

Сообщение # 2267 | 08:41:15
я так пробовал не получается всё равно срабатывает
вот сам скрипт

<SCRIPT LANGUAGE="JavaScript">

function preventSelection(element){
var preventSelection = false;

function addHandler(element, event, handler){
if (element.attachEvent)
element.attachEvent('on' + event, handler);
else
if (element.addEventListener)
element.addEventListener(event, handler, false);
}
function removeSelection(){
if (window.getSelection) { window.getSelection().removeAllRanges(); }
else if (document.selection && document.selection.clear)
document.selection.clear();
}
function killCtrlA(event){
var event = event || window.event;
var sender = event.target || event.srcElement;
if (sender.tagName.match(/INPUT|TEXTAREA/i))
return;
var key = event.keyCode || event.which;
if (event.ctrlKey && key == 'A'.charCodeAt(0))
{
removeSelection();
if (event.preventDefault)
event.preventDefault();
else
event.returnValue = false;
}
}
addHandler(element, 'mousemove', function(){
if(preventSelection)
removeSelection();
});
addHandler(element, 'mousedown', function(event){
var event = event || window.event;
var sender = event.target || event.srcElement;
preventSelection = !sender.tagName.match(/INPUT|TEXTAREA/i);
});
addHandler(element, 'mouseup', function(){
if (preventSelection)
removeSelection();
preventSelection = false;
});
addHandler(element, 'keydown', killCtrlA);
addHandler(element, 'keyup', killCtrlA);
}
preventSelection(document);
document.ondragstart = test;
document.onselectstart = test;
document.oncontextmenu = test;
function test() {
return false
}
</SCRIPT>
vredniey-faktor
Сообщений: 67
Репутация: 38

Сообщение # 2268 | 10:58:38
Цитата Дурман ()
подскажите как сделать чтобы скрипт не срабатывал если сайт просматривает админ, но оставался включенным для других пользователей? <?if(GROUP_ID$=4)?>
???
<?endif?>
Есть небольшие ошибки в вашем варианте.
Вот рабочий: 
Код
<?if!($GROUP_ID$='4')?>код_не_будет_виден_админам<?endif?>
Добавлено условие if not (знак !). Это значит что всем, кроме админов будет видно то-что нужно.

Можно сделать и так:

Код
<?if($GROUP_ID$='4')?><?else?>код_не_будет_виден_админам<?endif?>
В этом случае используем так же else. Результат один и тот же. Дословно: Если вы администратор <?if($GROUP_ID$='4')?> - то ничего <?else?> (Иначе) - код_который_виден_всем_остальным - Конец условия (<?endif?>)

Ну как-то так.

-------------
Простите, не увидел что на новой странице ответы уже были добавлены. Ладно пусть висит

WAV-LIBRARY.NET - Библиотека звуков. Бесплатные звуки, шумовые эффекты, сэмплы и музыка в WAV, MP3, OGG форматах.
Сообщение отредактировал vredniey-faktor - Воскресенье, 21 Июн 2015, 10:59:54
sch779
Сообщений: 703
Репутация: 348

Сообщение # 2269 | 13:20:10
Переменная $GROUP_ID$ числового типа. Шаблонный язык uCoz построен на основе PHP, где могут быть проблемы в случае неявного сравнения данных разного типа.
Поэтому лучше использовать сравнение с числом: <?if ($GROUP_ID$ = 4) ?>администратор<?endif?> или <?if ($GROUP_ID$ != 4) ?>НЕадминистратор<?endif?>

Дурман, что касается Вашего скрипта - его код в данном случае не важен - если Вы "обернете" этот скрипт в предложенный условный оператор, то на странице, которую будет просматривать администратор, этого кода вообще не будет - он будет "вырезан" еще на этапе формирования html-кода страницы на сервере uCoz.
Сообщение отредактировал sch779 - Воскресенье, 21 Июн 2015, 13:25:00
Дурман
Сообщений: 19
Репутация: 0

Сообщение # 2270 | 18:11:36
Всё получилось, большое спасибо за советы smile
Samales
Сообщений: 3
Репутация: 0

Сообщение # 2271 | 13:39:37
А uCoz как-то определяет с какой аппаратуры зашел пользователь? К примеру, требуется убрать определенный блок для тех кто заходит с мобильных устройств, а для компьютеров оставить, хотел сделать это с помощью условных операторов основываясь на браузере, но не знаю, как обозначается тот или иной.
Подскажите, пожалуйста, как можно осуществить данное?
†Angel†
Сообщений: 387
Репутация: 128
Уровень замечаний:

Сообщение # 2272 | 13:52:42
Цитата Samales ()
К примеру, требуется убрать определенный блок для тех кто заходит с мобильных устройств, а для компьютеров оставить

Код
<?if($USER_AGENT_PDA$)?>Информация для пользователей мобильного телефона<?else?>Информация для пользователей ПК<?endif?>

Adguard - Рекламы не будет!
Kate_Ch
Сообщений: 10
Репутация: 17

Сообщение # 2273 | 11:08:04
Подскажите, пожалуйста, что нарушилось? Странные названия страниц товаров... скрин - https://yadi.sk/i/GHHqHjXkhzGc4

Вчера я добавила wishlist, во встроенном редакторе в каталогах (прошло хорошо) , а на страницах товара его было не видно sad , и после сохранения система ругнулась, что отсутствует $POWERED_BY$ (хотя я только вставила код $2WISHLIST$ в начале страницы и потом его удалила, а $POWERED_BY$ в конце наверное был... я его-то воткнула правильно? )) И как вернуть нормальные названия страниц? Когда встаешь курсором в адресную строку, ссылка нормальная..


Цитата
Код
<html><head>

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

<title><!--if($META_TITLE$)-->$META_TITLE$<!--else-->$ENTRY_TITLE$ - $MODULE_NAME$ - $SITE_NAME$<!--endif--></title>
<?$META_DESCRIPTION$?>
<link type="text/css" rel="StyleSheet" href="/_st/my.css">
</head>

<body style="background-color:#d0f0c0; margin:0px; padding:0px;" >
$ADMIN_BAR$

$GLOBAL_AHEADER$

<table cellpadding="0" cellspacing="0" border="0" width="100%" style="padding: 10px;"><tbody><tr><td width="100%" align="center">

<!-- <middle> -->
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td valign="top" width="200">
$GLOBAL_CLEFTER$
</td>

<td valign="top" style="padding:0px 10px 0px 10px;">
<table border="0" cellpadding="5" cellspacing="0" width="100%" style="border:1px solid #6DA104;"><tbody><tr><td style="background:#FFFFFF;"><!-- <body> -->
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr>
<td style="white-space: nowrap;">$SHOP_PATH$</td>
<?if($EDIT_ENTRY_LINK$)?><td align="right" style="white-space: nowrap;">[ <a href="$EDIT_ENTRY_LINK$"><!--<s4443>-->Редактировать товар<!--</s>--></a> ]</td><?endif?>
</tr>
</tbody></table>

<table border="0" cellpadding="0" cellspacing="0" style="width:100%; margin-top:10px;">
<tbody><tr>
<td><h1>$ENTRY_TITLE$</h1></td>
<td align="right"><b style="font-size:14px; padding:0 10px;"><?if($PRICE_OLD$)?><s>$PRICE_OLD$</s> <span class="newprice">$PRICE$</span><?else?>$PRICE$<?endif?></b> $2BASKET_Q$</td>
</tr></tbody></table>
$OPTIONS$
<br><table border="0" cellpadding="0" cellspacing="0" style="width:100%; margin-top:10px;">
<tbody><tr valign="top"><td style="padding-right:10px; width:1%">

$IMGS_ARRAY_JS$
<script type="text/javascript">
function _bldCont(indx){
var bck=indx-1;var nxt=indx+1;
if (bck<0){bck = allEntImgs$ID$.length-1;}
if (nxt>=allEntImgs$ID$.length){nxt=0;}
var imgs='';
if (allEntImgs$ID$.length>1){
for (var i=0;i<allEntImgs$ID$.length;i++){var img=i+1;
if(allEntImgs$ID$[i][0].length<1){continue;}
if (i==indx){imgs += '<b class="pgSwchA">'+img+'</b> ';}
else {imgs += '<a class="pgSwch" href="javascript://" rel="nofollow" onclick="_bldCont('+i+');return false;">'+img+'</a> ';}
}
imgs = '<div align="center" style="padding:8px 0 5px 0;white-space:nowrap;overflow:auto;overflow-x:auto;overflow-y:hidden;"><a class="pgSwch" href="javascript://" rel="nofollow" onclick="_bldCont('+bck+');return false;">« Back</a> '+imgs+'<a class="pgSwch" href="javascript://" rel="nofollow" onclick="_bldCont('+nxt+');return false;">Next »</a> </div> ';}
var hght = parseInt(allEntImgs$ID$[indx][2]); if ($.browser.msie) { hght += 28; };
_picsCont = '<div id="_prCont" style="position:relative;"><img border="0" src="' + allEntImgs$ID$[indx][0] + '"/>'+imgs+'</div>';
new _uWnd('wnd_prv', "Изображения товара", 10, 10, { waitimages:300000, autosizewidth:1, hideonresize:1, autosize:1, fadetype:1, closeonesc:1, align:'center', min:0, max:0, resize:1 }, _picsCont);
}
</script>

<img src="$THUMB$" class="gphoto" onclick="_bldCont(this.getAttribute('idx'));" id="ipreview" idx="0" title="Кликните для увеличения изображения">

<?if($SMALL_1$)?>
<img src="$SMALL$" class="gphoto" onclick="var el=getElementById('ipreview'); el.src='$THUMB$'; el.setAttribute('idx',0);">
<img src="$SMALL_1$" class="gphoto" onclick="var el=getElementById('ipreview'); el.src='$THUMB_1$'; el.setAttribute('idx',1);">
<?endif?>
<?if($SMALL_2$)?><img src="$SMALL_2$" class="gphoto" onclick="var el=getElementById('ipreview'); el.src='$THUMB_2$'; el.setAttribute('idx',2);"><?endif?>
<?if($SMALL_3$)?><img src="$SMALL_3$" class="gphoto" onclick="var el=getElementById('ipreview'); el.src='$THUMB_3$'; el.setAttribute('idx',3);"><?endif?>

<?if($RATING$)?><div style="margin-bottom:10px;"><?$RSTARS$('30','/.s/img/stars/3/30.png','1','float')?><div style="font-size:10px; text-align:center;"><!--<s3119>-->Рейтинг<!--</s>-->: <b><span id="entRating$ID$">$RATING$</span></b>/<span id="entRated$ID$">$RATED$</span></div></div><?endif?>

<?if($BUY_NOW$)?>
<div align="center" class="goods-list">
<!--<s5454>Купить сейчас</s>-->
<!--$BUY_NOW$-->
</div>
<?endif?>

</td><td>
<?if($MODER_PANEL$)?><div style="float:right">$MODER_PANEL$</div><?endif?>

<?if($ART_NO$)?><div style="margin-bottom:10px;"><!--<s4749>-->Артикул<!--</s>-->: <b>$ART_NO$</b></div><?endif?>

<?if($STOCK$)?><div style="margin-bottom:10px;"><!--<s4377>-->Наличие<!--</s>-->: <b>$STOCK$</b></div><?endif?>

<?if($WARR$)?><div style="margin-bottom:10px;"><!--<s4376>-->Гарантия<!--</s>-->: <b>$WARR$</b></div><?endif?>

<div style="text-align:justify;">$DESCRIPTION$</div>

</td></tr>
</tbody></table>
<div style="margin-top: 10px; text-align:right;"><!--<s4417>-->Добавлен в каталог<!--</s>-->: $ADD_WDAY$, $ADD_DATE$</div>

<?if($COM_IS_ACTIVE$)?>
<?if($COM_CAN_READ$)?>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody><tr><td width="60%" height="25"><!--<s5183>-->Всего комментариев<!--</s>-->: <b>$COM_NUM_ENTRIES$</b></td><td align="right" height="25">$COM_PAGE_SELECTOR$</td></tr>
<tr><td colspan="2">$COM_BODY$</td></tr>
<tr><td colspan="2" align="center">$COM_PAGE_SELECTOR1$</td></tr>
<tr><td colspan="2" height="10"></td></tr>
</tbody></table>
<?endif?>

<?if($COM_CAN_ADD$)?>
$COM_ADD_FORM$
<?else?>
<?if($USER_LOGGED_IN$)?><?else?><div align="center" class="commReg"><!--<s5237>-->Добавлять комментарии могут только зарегистрированные пользователи.<!--</s>--><br />[ <a href="$REGISTER_LINK$"><!--<s3089>-->Регистрация<!--</s>--></a> | <a href="$LOGIN_LINK$"><!--<s3087>-->Вход<!--</s>--></a> ]</div><?endif?>
<?endif?>
<?endif?>
   <!-- </body> --></td></tr></tbody></table>
</td>

<td valign="top" width="200">
$GLOBAL_DRIGHTER$
<!-- -->
<center><b>Ваша корзина</b></center>
<br>
$BASKET$
</td>
</tr>
</tbody></table>
<!-- </middle> -->

</td></tr></tbody></table>

$GLOBAL_BFOOTER$</body></html>
$POWERED_BY$

Служба поддержки отправила мне скрин http://screencast.com/t/N9UFkIEc5olS - у меня так же, а что нужно убрать или добавить - я не понимаю )

Добавлено (22 Июл 2015, 10:29:02)
---------------------------------------------
вроде починила.. какие-то gt lt были лишние..

Добавлено (22 Июл 2015, 11:08:04)
---------------------------------------------
А по копирайту нужна помощь - я его не вижу на странице товаров... Его наверное тоже надо было какими-то скобками обозначить?

Сообщение отредактировал Kate_Ch - Среда, 22 Июл 2015, 10:07:06
Joolz
Сообщений: 81
Репутация: 27

Сообщение # 2274 | 20:34:48
Есть код:
$CAT_URL$-<?substr($CURRENT_PAGE$,28,-35)?>
он выводит:
http://сайт/dir/материал/4-22
где
$CAT_URL$
http://сайт/dir/материал/4
-
знак минус
<?substr($CURRENT_PAGE$,28,-35)?>
22

Мне нужно эти операторы вложить в условие, чтобы получить http://сайт/dir/материал/4-22

Пробовал <?if($CAT_URL$-substr($CURRENT_PAGE$,28,-35))?> не то, оно отнимает

<?ifsubstr($CAT_URL$-)substr($CURRENT_PAGE$,28,-35)?> и это не то...

Никак не въеду как реализовать

$REQUEST_URI$ не предлагать т.к. это условие и будет сравниваться с $REQUEST_URI$
Сообщение отредактировал Joolz - Четверг, 23 Июл 2015, 20:35:45
mailru
Сообщений: 6
Репутация: 0

Сообщение # 2275 | 16:05:58
как сделать что бы cnfnec Онлайн был зеленым, а оффлайн красным?

PtrPt
Сообщений: 88
Репутация: 33

Сообщение # 2276 | 18:07:22
mailru, можно, в принципе, и через условные операторы, но, если я не ошибаясь, система сама добавляет к статусу классы
Код
.statusOffline
.statusOnline

надо просто добавить в css

Код
.statusOnline {color: green;}
.statusOffline {color: red;}

Если надо, добавьте ещё стилей.

Элегантный uCoz :)
NZT
Сообщений: 369
Репутация: 483

Сообщение # 2277 | 15:23:08
<?if($USER_AGENT$='ie')?> не работает только в 11-ой версии или совсем перестал работать?
udevlife
Сообщений: 272
Репутация: 60

Сообщение # 2278 | 19:24:23
NZT,
Насколько я знаю в последних версиях "Мелкие" выдают свои браузеры за другие, помнится где-то они твердили что их браузер поддерживает все современные теги и т.д. и т.п., поэтому им совсем не обязательно вообще указывать UserAgent или указывать, но не свой!
Sonor
Сообщений: 251
Репутация: 525

Сообщение # 2279 | 00:28:41
В этот день, 7 августа, $USER_AGENT$ не работал вообще.

Dixes
Сообщений: 18
Репутация: 0

Сообщение # 2280 | 20:19:49
как сделать что бы текст отображался один день? например:
изменение комментариев можно изменять в тот день в который написан комменарий
Поиск: