Системный подключаемый модуль SEF |
В качестве первого примера рассмотрим системный подключаемый модуль SEF. Он представляет собой класс plgSystemSef, объявляемый в файле plugins/system/sef/sef.php и активизирующий функции Joomla с целью использовать удобные для поиска URL (иначе называемые SEF URL). Рассмотрим сначала, каким образом этот подключаемый модуль запускается на выполнение, а именно: код из класса этого модуля для инициирования связанного с ним события. Подключаемый модуль SEF относится к категории системных и запускается на выполнение при наступлении события onAfterRender. Но прежде чем инициировать это событие, необходимо включить файл данного подключаемого модуля. Если загружается страница в пользовательской части веб-сайта, то вызывается метод render () из класса JSite, находящегося в файле includes/application.php. Ближе к концу этого метода можно обнаружить следующую строку кода: JPluginHelper::importPlugin('system'); В этой строке кода содержится команда для загрузки всех активизированных подключаемых модулей в рабочую область оперативной памяти. (Если подключаемый модуль заблокирован в компоненте Plugin Manager (Диспетчер подключаемых модулей), то он не загружается.) Эту команду придется выполнить лишь один раз по ходу исполнения кода данного метода. После загрузки классов системных подключаемых модулей в рабочую область оперативной памяти можно инициировать одно или несколько системных событий. Системные подключаемые модули, по существу, являются объявлениями классов, и поэтому выполнение кода в них не предполагается. А далее в методе render () из класса JSite фактически вызывается метод // инициировать событие onAfterRender $this->triggerEvent('onAfterRender'); В этой строке кода инициируется событие onAfterRender. Рассмотрим подробнее, как это делается. Переменная $this ссылается на объект типа JSite, а следовательно, в операторе Класс JSite расширяет класс JApplication (из файла libraries/joomla/application/application.php). А поскольку в классе JSite отсутствует собственный метод triggerEvent (), т.е. он не переопределяет этот метод, наследуемый от родительского класса, то он вызывает данный метод из класса JApplication. Итак, метод triggerEvent () из класса JApplication выполняется, а его код приведен ниже. function triggerEvent($event, $args=null) В коде данного метода сначала создается объект типа JDispatcher, а затем вызывается метод Как правило, имена подключаемых модулей должны быть согласованы с их типом. В частности, в системных подключаемых модулях должны использоваться имена только системных событий. Если следовать этому правилу, то уже не имеет никакого значения, загружены ли в оперативную память подключаемые модули других типов, поскольку выполняться будут лишь те из них, которые совпадают по типу с инициируемыми событиями. Понравился материал? Пригодилась информация? Плюсани в социалки!
|
Похожие новости | |