Комментарии

Что он делает подключаемый модуль содержимого
( 0 Голосов )

В первой части метода onContentBeforeDelete () находится следующий фрагмент кода:

public function onContentBeforeDelete($context, $data)
{
// пропустить подключаемый модуль, если удаляется
// нечто иное, чем категории if ($context != 'com_categories.category') {
return true;
}

Как пояснялось ранее, этот подключаемый модуль будет выполняться в любой момент, когда пользователь удаляет какое угодно содержимое. Но поскольку в этом подключаемом модуле проверяется наличие любых элементов, присвоенных категории, то его выполнение имеет смысл лишь в контексте удаления категории. Поэтому в первом условном операторе if проверяется, действительно ли удаляется категория, а не что-нибудь другое. Если это не категория, то происходит возврат из рассматриваемого здесь метода с логическим значением true.

Как упоминалось ранее, у каждого подключаемого модуля имеется свой файл исходного кода на языке РНР и соответствующий XML-файл. В частности, XML-файл подключаемого модуля выполняет следующие три функции. Во-первых, в нем предоставляются описательные сведения о подключаемом модуле, в том числе его имя, версия, дата создания, автор и лицензионное соглашение. Во-вторых, в нем перечисляются все файлы, которые требуется установить или удалить. И в-третьих, в нем определяются любые параметры или режимы, которые могут быть установлены при использовании подключаемого модуля. Эти параметры и режимы оказываются доступными на экране Plugin Manager, когда подключаемый модуль открывается для редактирования.

Параметры в Joomla позволяют администратору настроить режим работы веб-сайта, не прибегая к программированию. В данном примере подключаемый модуль содержимого (Content^Joomla!) дает администратору возможность указать, следует ли проверять категории на предмет их пустоты перед удалением. И делается это с помощью параметра check_categories. Более подробно параметры настройки подключаемых модулей рассматриваются далее в этой главе.

Параметр check_categories позволяет администратору отменить проверку категорий. И делается это в следующем фрагменте кода из рассматриваемого здесь метода:

// проверить, активизирована ли данная функция if (!$this->params->def('check_categories')) {
return true;
}

В приведенном выше фрагменте кода $this->params — это объект класса JRegistry, содержащий параметры, сохраняемые в таблице #extensions базы данных для данного подключаемого модуля. Метод def () считывает значение этого параметра или использует значение 1, если параметр не определен. Напомним, что в языке РНР нулевое значение определяется как логическое значение false. Именно это обстоятельство используется в данном фрагменте кода.

Параметр check_categories должен иметь нулевое значение, если проверять категории не нужно, а иначе — единичное значение. Так, если он имеет нулевое значение, условие, проверяемое с помощью оператора отрицания !, окажется истинным, а следовательно, выполнение метода преждевременно завершится возвратом логического значения true.

Далее в рассматриваемом здесь методе следует приведенная ниже строка кода.

$extension = JRequest::getString('extension');

В этой строке кода переменная $extension получает значение переменной из массива $_REQUEST в коде РНР. Обратите внимание на то, что для этой цели используется библиотечный метод JRequest::getString (). Можно было бы, конечно, прочитать содержимое массива $_REQUEST непосредственно, но для этой цели настоятельно рекомендуется использоваться методами из класса JRequest, поскольку они выполняют встроенную фильтрацию данных. В данном случае метод getstring () отфильтровывает символы в шестнадцатеричном коде, а также символы, кодированные в формате URL. В классе JRequest предоставляется целый ряд методов для чтения переменных запроса (getstring (), getInt (), getWord () и т.д.), причем использовать всегда следует наиболее строгий на ограничения типов метод. Иными словами, если заранее известно, что значение в запросе должно всегда быть целочисленным, то для его чтения следует вызвать метод getInt ().

Ниже приведен следующий фрагмент кода из рассматриваемого здесь метода.

// истина по умолчанию, если это не основное расширение $result = true;
$tableInfo = array (
'com_banners' => array('table_name' => '#banners'),
'com_contact' => array(1table_name' => '#contact_details'),
'com_content' => array('table_name' => '#content'),
'com_newsfeeds' => array(1table_name' => '# newsfeeds')
'com_weblinks' => array('table_name' => '#weblinks')
);

В начале этого фрагмента кода переменной $result по умолчанию присваивается логическое значение true. Затем создается массив из имен различных таблиц для разных типов расширений. Рассматриваемый здесь подключаемый модуль будет пригодным лишь для указанных выше пяти типов расширений. В данном массиве для каждого типа расширения указывается имя отдельной таблицы. Ниже приведен следующий фрагмент кода из рассматриваемого здесь метода.

// а теперь проверить, известно ли данное расширение как основное if (isset($tableInfo[$extension]))
{
// получить имя таблицы для известного основного расширения $table = $tableInfo[$extension]['table_name'];
// проверить, имеются ли в данной категории
// какие-нибудь элементы содержимого
$count = $this->_countItemsInCategory($table, $data->get('id'));

В этом фрагменте кода проверяется, находится ли текущее расширение в массиве из пяти основных расширений. Если оно там находится, то выполняется код в условном операторе if. А если текущее расширение не относится к числу пяти основных расширений, то происходит переход в самый конец рассматриваемого здесь метода и возврат из него значения переменной $result, которой раньше было присвоено логическое значение true.

В кодовом блоке условного оператора if переменной $table сначала присваивается определенное ранее имя таблицы. Затем в переменной $ count устанавливается значение, возвращаемое закрытым методом _countItemsInCategory (). Этот метод выполняет запрос базы данных, чтобы определить, сколько элементов (статей, контактной информации и т.д.) имеется в данной категории. Обратите внимание на то, что в качестве аргументов этому методу передаются имя таблицы ($table) и значение, возвращаемое методом $data->get (' id'), т.е. значение, выбираемое из поля id объекта $data для данной категории.


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


 
Похожие новости
Добавить комментарий


Защитный код