Комментарии

Исходный файл PHP
( 0 Голосов )

В листинге ниже приведен исходный код из файла mod_joompro_articles_author.php разрабатываемого модуля.

Исходный код из файла mod_joompro_articles_author.php


//  прямой доступ отсутствует defined('_JEXECr) or die;
//  включать  функции объединения только один раз

JLoader::register('modJoomProArticlesAuthorHelper',
dirname ( FILE ) . '/helper.php') ; $list = modJoomProArticlesAuthorHelper:rgetList($params);
//  показывать модуль только в том случае, если есть что показывать
(isset($list[0])>    { $moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx')); JModuleHelper::getLayoutPath('mod_joompro_articles_author',>$params->get('layout', 'default')); }

Во второй строке приведенного выше кода вызывается метод JLoader:: register () для загрузки вспомогательного класса, хотя это можно было бы с тем же успехом сделать и с помощью команды require_once. Но в методе JLoader:: register () используется средство автозагрузки на языке РНР, да и выполняется он быстрее, чем команда requireonce. Поэтому там, где это возможно и уместно, следует пользоваться методом JLoader:: register () (или командой jimport, которая, в свою очередь, вызывает данный метод) вместо команды require_once.

В следующей строке кода вызывается вспомогательный класс для получения списка статей. А далее проверяется, есть ли что-нибудь для отображения. Для того чтобы проверить, есть ли в массиве $list какое-нибудь содержимое, вместо условного выражения

(isset($list[0]))   {

можно было бы воспользоваться выражением

(count($list))   {

Но в данном случае используется функция isset (), поскольку она действует быстрее. А в функции count () осуществляется циклическое обращение ко всем элементам массива с целью подсчитать их количество. Но нас не интересует, имеется ли в массиве один или сто элементов; нам нужно выяснить, есть ли в нем хотя бы один элемент. А поскольку это индексированный, а не ассоциативный массив, то при наличии в нем какого-нибудь содержимого у него должен быть хотя бы первый элемент с нулевым индексом ($list [0]).

Если имеется что-нибудь для отображения, то далее из соответствующего параметра выбирается суффикс класса данного модуля, а затем включается файл компоновки. Для включения файла компоновки используется команда require, поскольку это не класс, тогда как упоминавшийся ранее метод JLoader: : register () служит лишь для загрузки классов. Для этой цели не подходит и команда require_once, поскольку и так известно, что файл компоновки включается в данном месте кода лишь один раз. А назначение команды requireonce состоит в том, чтобы исключить любые попытки объявить тот же самый класс или функцию дважды, что привело бы к ошибке в коде РНР. Кроме того, команда require_once проверяет, включен ли уже файл, и поэтому она выполняется медленнее, чем команда require. Следовательно, командой require_once не стоит пользоваться там, где это неуместно.

Для получения имени файла компоновки вызывается метод JModuleHelper:: getLayoutPath (). Это дает пользователю возможность составлять и применять в модулях альтернативные компоновки, а также замещения компоновки шаблонов.

В рассматриваемом здесь коде было принято незначительное на первый взгляд, но очень важное проектное решение: проверить, содержит ли что-нибудь переменная $list, прежде чем обращаться к компоновке. Это означает, что если ни одной статьи текущего автора не обнаружено, то ничего и не выводится. Если бы в отсутствие статей текущего автора соответствующее сообщение могло бы выводиться из компоновки, то обращаться к ней можно было бы и при наличии пустого списка статей.


Понравился материал? Пригодилась информация? Плюсани в социалки!


 
Похожие новости