Условные операторы и системные коды
Если вы совершенно не понимаете, как работают условные операторы, а информации в панели управления вам недостаточно, я попробую вам это объяснить. Главное — настройтесь на то, что всё очень просто. Так оно и есть!
Начнем с понятий. Условные операторы — это специальные коды-символы, которые позволяют выполнять разные сценарии. Вы можете создать совершенно новую опцию на своём сайте, которую изначально не предусмотрела панель управления.
Для начала нужно понять составляющие части кода сценария:
<?if($код$)?>— условие (код), которое сообщает оператору, с чем именно мы работаем. Мысленно заменяем на «Если есть».<?else?>— оператор, который выполнит действие, если условие не соответствует. Мысленно заменяем на «Если нет».<?endif?>— конец условного оператора. Мысленно заменяем на «Конец».
Пример из редактора страниц:
<?if($USER_LOGGED_IN$)?>Hello, $USERNAME$<?else?>You are GUEST. Please register.<?endif?>
Что это значит: «Если есть авторизованный пользователь — поприветствуй его по имени, а если нет — покажи приветствие гостю и закончи.»
Разбор кода
- Мы сообщаем оператору
<?if($код$)?>, что сценарий направлен на приветствие авторизованных пользователей. Вместо $код$ используем$USER_LOGGED_IN$— это значит «Если есть авторизованный пользователь». - После идёт информация, доступная только авторизованным. Для гостей указываем информацию после
<?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?>
Сложные условия
Вы можете использовать знаки «=», «>», «<» и логические операторы, чтобы задать условия. Если их несколько, разделяйте их вертикальной чертой или используйте «or» и «and».
<?if($код$='условие')?> Я это вижу <?else?> А вот это вижу я <?endif?>
Или:
<?if($код$='условие')?> Самое главное, что я это вижу <?endif?>
Пример для конкретного пользователя:
<?if($USER$='Дима')?> Дима, не забудь каждый день читать почту. <?endif?>
Это означает: «Если вошедший пользователь — Дима, то показать ему это сообщение.»
Аналогично можно проверять группы, имена, пол, дату и любые коды, которые работают в модуле.
Пример для нескольких пользователей:
<?if($USER$='Mike' or $USER$='Lola')?> Mike и 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?>
Сценарий: «Если пользователь авторизован, приветствуем его. Если он админ или модератор, показываем напоминание. Если пользователь не авторизован, просим зарегистрироваться.»
Мини FAQ
- Сколько
<?if($код$)?>, столько и<?endif?>. <?else?>нужен только тогда, когда есть «иначе». Иначе он не обязателен.- Поддерживаются логические операторы
orиand(||и&&). - Поддерживается вложенность операторов.
- Поддерживается сравнение переменных между собой:
<?if($VAR1$=$VAR2$)?>. - При сравнении текстовых значений используйте кавычки:
<?if($USER$='Mike')?>.
Вопрос - ответ
Вопрос: При создании новых страниц, закачанных через FTP, коды вроде $SITE_NAME$, $LOGIN_LINK$, $LOGOUT_LINK$ отображаются как текст, а не работают. Почему?
Ответ: Коды работают только на динамических страницах — созданных в Панели управления через опцию «Создать страницу». На статических страницах, загруженных по FTP с расширением .html, эти коды не работают.
Как сделать альтернативные условия для кода $GROUP_ID$?
<?if($GROUP_ID$=5 or ($GROUP_ID$=4 and $USER$='Alex'))?> ... <?endif?>
Можно ли выводить только те категории, к которым у пользователя есть доступ?
Это можно сделать только вручную, проверяя группу пользователя и выводя нужный список категорий. На уровень выше можно проверять доступ к разделу.
Почему $GROUP_ID$ не работает в шаблоне мини-чата?
Сообщения чата кешируются, поэтому в них нельзя использовать динамически изменяющиеся коды.
Есть ли код $USER_LOGGED_OUT$?
Можно использовать отрицание:
<?if(!$USER_LOGGED_IN$)?>