Печать

Условия в шаблонах c помощью countModules

countModules — Возвращает число модулей включенных в определенную позицию (позиции). Аргументом функции является строка с названием позиции, либо логической комбинацией из нескольких.

Пример использования countModules:

<!-- код будет работать только внутри шаблона, например для /templates/beez5/index.php -->
<?php if ($this->countModules( 'user1' )) : ?>
    <div class="modules_user1">
        <jdoc:include type="modules" name="user1" style="rounded" />
    </div>
<?php endif; ?>

В примере выше, мы проверяем количество модулей включенных в область (позицию) "user1". Если это число больше 0, то выводим позицию с обрамлением в виде <div class="modules_user1">. Таким образом можно добавлять часть шаблона только если у нас включены модули в определенные  места на странице. Таким областями могут быть левая, правая колонка, наличие большой шапки на главной странице и т. д. Так мы избавим шаблон от появления нежелательных пустых пространств на сайте.

countModules может быть использован для подсчета в более чем одной позиции на сайте, можно использовать более сложные вычисления. Например

$this->countModules( 'user1 + user2' ); 

Вернет сумму модулей в позициях user1 и user2.

Так же можно использовать логические операторы, например так

$this->countModules( 'user1 and user2' );

Будьте внимательны при написании подобных аргументов, следующий код приведет к синтаксической ошибке:

$this->countModules( 'user1' and 'user2' );

Более  того, вы должны использовать не больше одного пробела вокруг ключевых слов(символов), таких как "and" и "+". Рассмотрим более сложный пример

<?php if ($this->countModules( 'user1 or user2' )) : ?>
    <div class="user1user2">
 
                <?php if ($this->countModules( 'user1' )) : ?>
                        <jdoc:include type="modules" name="user1" style="xhtml" />
                <?php endif; ?>
 
                <?php if ($this->countModules( 'user1 and user2' )) : ?>
                        <div class="greyline"></div>
                <?php endif; ?>
 
                <?php if ($this->countModules( 'user2' )) : ?>
                        <jdoc:include type="modules" name="user2" style="xhtml" />
                <?php endif; ?>
 
        </div>
<?php endif; ?>

В этом примере позиции user1 и user2 отображаются обрамленными общим <div class="user1user2"> с разделителем <div class="greyline">. Разделитель покажется только при наличии модулей в обоих позициях. Весь блок с обрамлением отобразиться если хоть в одной из позиций есть активные модули. 

Операторы доступные для countModules

ОператорПримерОписание
+ user1 + user2 Сумма модулей в 2х позициях
- user1 - user2 Разность между количеством модулей из разных позиций
* user1 * user2 Произведение количества модулей из разных позиций
/ user1 / user2 Отношение количества модулей
== user1 == user2 Вернет истину, если количество модулей в различных позициях равно
!= user1 != user2 Вернет истину, если количество модулей не равно
<> user1 <> user2 Тоже что и !=.
< user1 < user2 Вернет истину, если в user1 меньше модулей чем в user2
> user1 > user2 Вернет истину, если в user1 больше модулей чем в user2
<= user1 <= user2 Вернет истину, если количество модулей в user1 меньше, либо равно количеству в user2
>= user1 >= user2 Вернет истину, если количество модулей в user1 больше, либо равно количеству в user2
and user1 and user2 Вернет истину если одновременно в user1 и в user2 есть активные модули
or user1 or user2 Вернет истину если хотябы в одной из позиций есть модули
xor user1 xor user2 Вернет истину если только в одной из двух позиций есть модули. Если сразу в обеих позициях есть активные модули, то вернет ложь.

Заметим что можно использовать более 2х позиций для countModules. Вычисления происходят слева на право с учетом приоритетов операторов. Ниже операторы перечислены в порядке убывания их приоритетов.

ОператорыОператор типа
* / Арифметические операторы
+ - Арифметические операторы
< <= => > Операторы сравнения
==! = Операторы сравнения
and Логический оператор
xor Логический оператор
or Логический оператор
Интересная статья? Поделись ей с другими: