1

Topic: Условный оператор <?if($…$)?> в Ucoz с примерами

Условных операторов в Юкоз всего 3: <?if($код$)?>, <?else?> и <?endif?>. Оператор <?if($код$)?> и <?endif?> обязательные, поэтому если не закрыть <?if($код$)?> или <?endif?> при сохранении будет выдаваться ошибка:
Не закрыт один или более условный оператор (<?if?>)

Каким функциям служат разные условные операторы

Рассмотрим наши 3 оператора поближе и определим как ими правильно пользоваться:
<?if($код$)?> – этот код считывает условие, которое после сообщает действие оператору. Его можно для себя представить частью фразы “Если есть”
<?else?> – оператор отвечает за выполнение альтернативного действия, если условие не подошло. Для себя можно представить “Если не подошло”
<?endif?> – этот оператор заканчивает действие условного оператора, он же служит как “Конец” нашей фразы.
Условный оператор if (если)

Этот оператор выполняет заключенную в него команду при выполнении определенного условия.
Если значение в скобках правдиво, то все что в этом теге будет выполняться до тега <?endif?> или <?else?>:

<?if($код$)?> Ваш код html если $код$ правдив <?endif?>
или же  
<?if($код$)?> Ваш код html если $код$ правдив <?else?> Код если значение $код$ ложь <?endif?>

2

Re: Условный оператор <?if($…$)?> в Ucoz с примерами

Примеры использования оператора <?if($код$)?> (если)

Первый, простой пример.
Если пользователь вошел, не показывать / показывать ему определенный код:

<?if($USER_LOGGED_IN$)?> Приветствуем тебя $USER$! <?else?> Пройди регистрацию гость! <?endif?>

Пример с условием и знаками сравнения “=, >, <" Также в операторе можно указывать точные значения или сравнивать их. К примеру показать / не показать код определенным группам пользователей:

<?if($USER$='Admin')?> Никакой рекламы! <?else?> Рекламный код <?endif?>

Пример с условием тега or (или)
Чтобы уточнить, то что нам надо, можно также использовать “or” в сравнение, что означает “или”. К примеру ниже приведенный код не покажет рекламу пользователю Admin и Vasya2.

<?if($USER$='Admin' or $user$='Vasya2')?> Никакой рекламы! <?else?> Рекламный код <?endif?>

3

Re: Условный оператор <?if($…$)?> в Ucoz с примерами

Тонкости использования условных операторов Ucoz

Обобщим нашу информацию и уточним некоторые тонкости для работы с операторами системы Юкоз.

Количество операторов <?if($код$)?> должна совпадать с количеством закрывающих <?endif?>
Оператор <?else?> (если) используется только в случае, когда надо вывести для тех, кто по условиям не подошел
Условные операторы можно вкладывать один в один сколько угодно много раз
Переменные внутри if можно сравнивать одну с одной: <?if($переменная1$=$переменная2$)?>
Если Вы сравниваете какой то текст, то его надо заключить в одинарные кавычки:
Есть встроенная поддержка дополнительных условий: or, and (аналогично можно просто поставить знак | или &)

4

Re: Условный оператор <?if($…$)?> в Ucoz с примерами

Шаблоны системы имеют свой собственный простой язык разметки, который некоторыми своими элементами подобен языку программирования PHP. Этот язык позволяет выводить (обрабатывать) или не выводить (не обрабатывать) участки шаблона в зависимости от истинности или ложности различных условий, применяемых к значениям специальных переменных (таких как $GROUP_ID$), а также проводить вычисления над этими переменными. Переменные шаблонов имеют вид $VARNAME$, где VARNAME может содержать только прописные латинские буквы, цифры и символ подчеркивания. Каждый вид шаблона имеет свой набор переменных, которые доступны для использования в нем.

Язык шаблонов позволяет выполнять 3 основных действия:
Выводить значение переменной путем простого ее указания в любом месте шаблона (даже внутри HTML-тегов).
Пример:

Адрес <a href="$HOME_PAGE_LINK$">главной страницы</a> моего сайта
Выведет (для $HOME_PAGE_LINK$ равной 'http://mysite.com'):
Адрес <a href="http://mysite.com">главной страницы</a> моего сайта

Неопределенная переменная считается пустой.

5

Re: Условный оператор <?if($…$)?> в Ucoz с примерами

Выводить результат вычисления выражения, заключенного в специальные скобки <? и ?>. Выражение может содержать математические операции, операции сравнения, вызовы функций.
Примеры:

3 плюс 2 равно <? 3+2 ?>
Выведет:
3 плюс 2 равно 5
Через 10 лет будет <? $YEAR$+10 ?> год
Выведет (для $YEAR$ равного 2010):
Через 10 лет будет 2020 год
Ваш логин начинается на букву "<? substr($USERNAME$,0,1) ?>"
Выведет (для $USERNAME$ равного 'Admin'):
Ваш логин начинается на букву "A"

6

Re: Условный оператор <?if($…$)?> в Ucoz с примерами

Полный список всех возможных операций и функций в юкоз, а также правила вычисления выражений смотрите ниже.

Реализовывать условную обработку с помощью условных операторов <?if()?> и <?ifnot()?>.
Синтаксис условных блоков следующий:

<?if(выражение)?>истинный_код<?else?>ложный_код<?endif?>
<?ifnot(выражение)?>истинный_код<?else?>ложный_код<?endif?>

выражение - математическое или логическое выражение, которое вычисляется с целью определения его истинности (для блока <?if()?>) или ложности (для блока <?ifnot()?>). Правила вычисления выражений смотрите ниже.
истинный_код – код шаблона, который будет обработан в случае выполнения условия, заданного условным оператором.
ложный_код – код шаблона, который будет обработан в случае невыполнения условия, заданного условным оператором (может полностью отсутствовать вместе с оператором '<?else?>', если необходима только проверка на истинность).
Условные блоки могут быть вложенными. Допускается до 10 уровней вложения.

Примеры:

Вы <?if($USER_LOGGED_IN$)?>зашли как "$USERNAME$"<?else?>не выполнили вход<?endif?>
Выведет (для $USERNAME$ равного 'Admin'):
Вы зашли как "Admin", если $USER_LOGGED_IN$ истинна, или иначе Вы не выполнили вход.
<?if($USERNAME$='Hacker' or $USERNAME$='bad_boy' or substr($USERNAME$,0,4)='anti')?>Попался, $USERNAME$!!!<?endif?>
Выведет (подставив значение $USERNAME$):
Попался, $USERNAME$!!!, если $USERNAME$ совпадает с 'Hacker' или 'bad_boy', или начинается на 'anti'.
<?if($POSTS$>50)?>***<?else?><?if($POSTS$>10.0)?>**<?else?>*<?endif?><?endif?>
Выведет ' *** ', если $POSTS$ больше 50, ' ** ', если больше 10 и меньше-равно 50, и ' * ', если меньше-равно 10.
<?if($NUMBER$ % 2 = 1)?>нечетное<?else?>четное<?endif?>
Выведет, является ли число в $NUMBER$ четным или нечетным.

7

Re: Условный оператор <?if($…$)?> в Ucoz с примерами

Вычисление выражений в Ucoz:
Различаются 3 типа операндов: строковые (задают текст), целочисленные (задают целое число от -9223372036854775808 до 9223372036854775807), дробные (задают дробное число).

Строковые операнды задаются в виде переменных шаблона ($USERNAME$) или констант в одинарных ('Константа1') или двойных кавычках ("Константа2").
При необходимости использовать выбранный символ кавычки внутри самой константы его можно экранировать с помощью обратного слеша ('It\'s all right' будет прочитана как "It's all right").
Сам обратный слеш также можно экранировать ("большой\\маленький" будет прочитана как "большой\маленький").
Перед всеми остальными символами обратный слеш не имеет экранирующего эффекта и выводится вместе с последующим символом.
Внутри строковых констант не допускается наличие закрывающей скобки выражения ?>, т.к. она будет воспринята как признак окончания выражения.

8

Re: Условный оператор <?if($…$)?> в Ucoz с примерами

Целочисленные операнды в юкоз могут быть заданы в десятичной, двоичной, восьмеричной или шестнадцатеричной системе счисления.
Десятичные константы задаются как последовательность цифр от 0 до 9 (123, 999999, 3).
Двоичные константы начинаются с префикса "0b" (или "0B"), за которым следует последовательность цифр 0 и 1 (0b1000 задает число 8, 0B11111111 задает число 255).
Восьмеричные константы начинаются с префикса "0o" (или "0O"), за которым следуют цифры от 0 до 7 (0o200 задает число 128, 0o456 задает число 302).
Шестнадцатеричные константы начинаются с префикса "0x" (или "0X"), за которым следуют цифры от 0 до 9 и латинские буквы от A до F без учета регистра (0x10A задает число 266, 0Xffff задает число 65535).

Дробные операнды задаются как последовательность цифр от 0 до 9, в которой обязательно присутствует десятичная точка (123.56) или латинская буква E, отделяющая десятичный порядок (1.234e6 задает число 1234000, 1e3 задает число 1000, 2e-4 задает число 0.0002), или значение числа выходит за допустимый диапазон для целочисленных операндов.

Все описанные ниже операторы, кроме оговоренных отдельно, автоматически преобразуют свои операнды к нужному типу (выражение <?"5" + 3?> возвратит Default/af. При преобразовании строкового значения в числовое используются правила из пункта 4 (т.е. результат всегда будет считаться дробным, а альтернативные системы счисления не распознаются) и дополнительно распознается знак минус (-) перед числом.

Преобразование строки в число останавливается на первом недопустимом символе, начальные пробелы игнорируются. Целочисленные операнды преобразуются в строку без потери точности и без использования десятичных дробей (<? 1234567890123445678 ?> выведет '1234567890123445678'). Дробные операнды преобразуются в строку в формате с плавающей запятой с точностью до 15 разрядов (<? 1234567890123445678.0 ?> выведет '1.23456789012346e+17').

Выражения вычисляются с учетом приоритетов операций. Приоритетом можно управлять с помощью круглых скобок (выражение <?2 * (5 + 3)?> возвратит 16).

9

Re: Условный оператор <?if($…$)?> в Ucoz с примерами

При отсутствии скобок приоритет операторов определяется следующей таблицей (в порядке уменьшения приоритета):
унарный +, унарный -, ~, not, !, все функции

**
*, /, %
+, -
=, ==, !=, <=, <, >=, >
&
|, ^
&&, and
||, or

Выражение считается ложным, если результат его вычисления представляет собой пустую строку, строку '0' (т.е. строку с единственной цифрой 0, а строки '4', 'Hello', '00' или '0.0' считаются истинными), целочисленное значение 0 или дробное значение 0.0. Все прочие значение считаются истинными.

10

Re: Условный оператор <?if($…$)?> в Ucoz с примерами

Арифметические операторы в Юкоз:

+, -, *    Бинарное арифметическое сложение, вычитание и умножение соответственно. Если оба операнда целочисленные, то результат также будет целочисленным (не должен выйти за диапазон целочисленных значений).
унарный +, унарный -    Эквивалентно сложению с нулем и вычитанию из нуля соответственно, но имеет высокий приоритет.
/    Арифметическое деление. Результат всегда дробный.
%    Остаток от деления. Операнды приводятся к целым числам. Результат всегда целочисленный.
**    Бинарная операция возведения в степень. Первый операнд (должен быть положительным) возводится в степень второго. Результат всегда дробный.

11

Re: Условный оператор <?if($…$)?> в Ucoz с примерами

Операторы сравнения в Ucoz:

=, ==    Проверка равенства. Если оба операнда строковые, то проводится сравнение строк с учетом регистра (строчные и прописные буквы различаются). Если оба операнда целочисленные, то сравниваются целые числа. В противном случае операнды сравниваются как дробные числа. Результат оператора - целое число 1, если операнды равны, и 0, если не равны.
Примеры:

 <?if("1.000"="1.0")?> ложно (сравниваются как строки), <?if("1.000"="1.0"+0)?> истинно (сравниваются числа).

!=    Проверка неравенства. Аналогичен проверке равенства, но результат противоположный.
<=, <, >=, >    Сравнение двух чисел. Если оба операнда целочисленные, то сравниваются целые числа. В противном случае операнды сравниваются как дробные числа. Результат оператора - целое число 1, если выполняется условие оператора, и 0, если не выполняется.

12

Re: Условный оператор <?if($…$)?> в Ucoz с примерами

Логические операторы в Ucoz:

!, not    Унарный оператор логического отрицания. Если операнд ложный, то результатом является целое число 1, иначе 0.
&&, and    Бинарный оператор логического "И" (умножения). Если оба операнда истинны, то результатом является целое число 1, иначе 0.
||, or      Бинарный оператор логического "Или" (сложения). Если любой из операндов истинен, то результатом является целое число 1, иначе 0.

Побитовые операторы всегда приводят операнды к целому числу и возвращают целочисленный результат:

&, |, ^    Бинарные операторы побитового "И" (умножения), "Или" (сложения) и "Исключающее Или" соответственно.
~    Унарный оператор побитового отрицания (инверсии).

13

Re: Условный оператор <?if($…$)?> в Ucoz с примерами

Функции в Ucoz:

int N
int(N)    Возвращает целую часть числового параметра N, полученную округлением в сторону нуля. Результат всегда целочисленный.

abs N
abs(N)    Возвращает абсолютное значение (модуль) числового параметра N. Если операнд целочисленный, то результат также будет целочисленным. Иначе дробным.

rnd( )
rnd N
rnd(N)    Возвращает случайное число. Если параметр отсутствует или равен 0, то возвращается дробное число от 0 включительно до 1 не включительно. Если параметр целочисленный (не равный 0), то возвращается целое число от 0 до N-1 включительно при N>0, и число от N+1 до 0 включительно при N<0. Иначе параметр приводится к дробному числу и умножается на случайное дробное число от 0 включительно до 1 не включительно. Примеры: <? rnd 10 ?> вернет целое число от 0 до 9 включительно, <? rnd 10.0 ?> вернет дробное число от 0 до 10 не включительно.

min(A1,A2,...,An)
max(A1,A2,...,An)    Возвращает соответственно минимальное или максимальное значение среди переданных числовых параметров. Результат всегда дробный.

len S
len(S)    Возвращает длину строкового параметра. Результат всегда целочисленный.

strpos(S1,S2)     Ищет первое вхождение строки S2 в строку S1, проходя от начала S1 к концу. Сравнение производится с учетом регистра. Оба параметра должны быть заданы как строки (или как результат вызова функции, возвращающей строку). Поиск ограничен первыми 1000 символами строки S1. Сравнение ограничено первыми 100 символами строки S2. Возвращает целое число - позицию строки S2 от начала S1, считая от 0. Если вхождение не найдено, возвращает -1. (<?strpos('Васяся','ся')?> возвратит 2).

strrpos(S1,S2)    Аналогична strpos, но ищет последнее вхождение S2. Поиск ограничен последними 1000 символами строки S1. (<?strpos('Васяся','ся')?> возвратит 4).

substr(S,N1,N2)
substr(S,N1)    Возвращает подстроку из строки S, начиная с позиции N1 (первый символ имеет позицию 0), длиной N2 символов. Параметр S должен быть задан как строка (или как результат вызова функции, возвращающей строку). N1 и N2 приводятся к целым значениям. Если N2 не указан, то возвращается подстрока с позиции N1 до конца строки S. Если N1 отрицателен, то начальная позиция отсчитывается от конца строки S.

Если N2 отрицателен, то задает конечную позицию от конца строки S. (<?substr('Привет',2)?> возвратит 'ивет', <?substr('Привет',2,2)?> возвратит 'ив', <?substr('Привет',-2)?> возвратит 'ет', <?substr('Привет',0,-2)?> возвратит 'Прив').