CountModules метод может быть использован для определения числа модулей в более, чем на одну позицию модуля. Более продвинутые расчеты могут быть выполнены.
Аргумент функции countModules, как правило, просто название одной позиции модуля. Функция возвращает количество модулей в настоящее время включен на эту должность модуль. Но вы также можете делать простые логические и арифметические операции над двумя или более позиций модуля.
Например, чтобы определить общее количество модулей включена в 'user1' и 'user2' позиции вместе, вы можете использовать вызов функции:
$this->countModules( 'user1 + user2' );
Хотя обычные арифметические операторы +. -. *, / Будет работать как и ожидалось, это не так полезна, как логические операторы 'и' и 'или'.
Например, чтобы определить, является ли 'user1' позиция и позиция 'user2' оба имеют по крайней мере один модуль включен, вы можете использовать вызов функции:
$this->countModules( 'user1 and user2' );
Осторожно: распространенной ошибкой является попытка что-то вроде этого:
$this->countModules( 'user1' and 'user2' );
Это в значительной степени гарантирует всегда возвращать ложное вне зависимости от количества модулей включена в любом положении, так что проверить, что вы переходя к countModules тщательно.
Вы должны иметь ровно один пробел разделения каждого элемента в строке. Например, 'user1 + user2' не даст желаемого результата, как должно быть пробел обе стороны от знака "+". Кроме того, 'user1 + user2' будет производить сообщение PHP ошибки, есть более чем на одно место разделения каждого элемента.
Пример: user1 и user2 Модуль позиции, которое будет отображаться в регионе, но вы хотите, чтобы область не появляется вообще, если не модули включены в любом положении.
<?php if ($this->countModules( 'user1 or user2' )) : ?> <div class="rightcolumn"> <jdoc:include type="modules" name="user1" style="xhtml" /> <jdoc:include type="modules" name="user2" style="xhtml" /> </div> <?php endif; ?>
Пример: user1 и user2 Модуль позиции, которые будут отображаться бок о бок с разделителем между ними. Однако, если только одна из позиций Модуль имеет каких-либо модулей включена, то разделитель не нужен. Кроме того, если ни одна user1 и user2 имеет каких-либо модулей включена, то ничего не выводится.
<?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; ?>
Обратите внимание, как первый звонок countModules определяет, есть ли модули для отображения на всех. Второй определяет, будет ли Есть в любом положении 'user1', и если Есть она показывает их. Третий вызов определяет, как user1 и user2 позиции есть какие-то модули включены, и если они делают то, если предусматривается разделитель между ними. Наконец, четвертый вызов определяет, будет ли Есть любые модули включены в положение 'user2' и отображает их, если Есть любые.
