Комментарии

  • Мини погрузчик
  • В продаже - погрузчик погрузчик, цены ниже! Неликвидные остатки
  • tdsklad.ru
  • Сепаратор магнитный
  • Производитель. Гарантия качества! Узнайте цены на Магнитный сепаратор
  • npomagnit.ru
  • Бездепозитный бонус за регистрацию
  • бездепозитный бонус за регистрацию
  • top-casinobonuses.com
Выполнение компонента Joomla 2.5 (часть 1)
( 0 Голосов )
Теперь нам известно, что делать дальше. Введенный пользователем URL (например, щелчком на ссылке на пункт меню) проверен, преобразован в массив команд и сохранен в переменной $_GET языка РНР. Итак, мы готовы выполнить компонент.
 
Возвращаясь к файлу index.php, мы обнаруживаем следующую часть исходного кода, приведенного в листинге ниже.
 
Вызов метода dispatch ():
 
// Произвести диспетчеризацию
$app->dispatch();
 
// Пометить состояние после диспетчеризации в профилировщике
JDEBUG ? $_PROFILER->mark('afterDispatch') : null;
 
Метод dispatch () фактически выполняет компонент. Рассмотрим, каким образом это делается. В листинге ниже приведен исходный код метода dispatch ().
 
Исходный код метода dispatch () из класса JSite:
 
public function dispatch($component = null)
{
try
{
// получить компонент, если он не задан if (!$component) {
$component = JRequest::getCmd('option');
}
$document = JFactory::getDocument();
$user = JFactory::getUser();
$router = $this->getRouter();
$params = $this->getParams();
switch($document->getType())
{
case 'html':
 
// получить язык
$lang_code = JFactory::getLanguage()->getTag();
$languages = JLanguageHelper::getLanguages('lang_code');
 
// задать метаданные
if (isset($languages[$lang_code]) && $languages[$lang_code]->metakey)
{
$document->setMetaData('keywords', $languages[$lang_code]->metakey);
} else {
$document->setMetaData('keywords', $this->getCfg('MetaKeys'));
$document->setMetaData('rights', $this->getCfg('MetaRights') ) ; if ($router->getMode() == JROUTER_MODE_SEF) {
$document->setBase(htmlspecialchars(JURI::current() ) ) ;
}
break; case 'feed':
$document->setBase(htmlspecialchars(JURI::current())); break;
}
$document->setTitle($params->get('page_title'));
$document->setDescription($params->get('page_description'));
$contents = JComponentHelper::renderComponent($component);
$document->setBuffer($contents, 'component');
 
// Инициировать событие onAfterDispatch
JPluginHelper::importPlugin('system') ;
$this->triggerEvent('onAfterDispatch');
}
 
// обработать любые неперехваченные исключения catch (Exception $e)
{
$code = $e->getCode();
JError::raiseError($code ? $code : 500, $e->getMessage());
}
}
 
Прежде всего следует обратить внимание на то, что весь код данного метода выполняется в блоке try/catch. Это означает, что код выполняется в следующей последовательности.
 
Код в фигурных скобках после оператора try (т.е. в блоке try) выполняется как обычно.
Если выполнение любого оператора в блоке try приводит к ошибке, управление программой передается первой строке кода в блоке catch, находящемся в самом конце данного метода.
 
В блоке try имя компонента получается по команде option, выявленной ранее в результате синтаксического анализа URL. Затем создается новый документ в виде объекта $ document. Этот объект будет использоваться далее для хранения всей информации о странице, которая в конечном итоге отправляется обратно браузеру.
 
В отношении документа необходимо иметь в виду следующее. Во-первых, это объект, находящийся в оперативной памяти, и поэтому нам не обязательно создавать его последовательно. Мы можем вставлять отдельные части документа в любом удобном для нас порядке. Выгодно используя эту особенность, мы можем составить документ в непоследовательном порядке, например, добавив сначала компонент, а затем вставив модули.
 
И во-вторых, в Joomla поддерживаются разные типы документов. При просмотре сайта мы обычно имеем дело с документом типа html. Документ данного типа требует некоторой специальной обработки. В частности, мы получаем язык для отображения текста на странице, задаем метаданные и базу документа, если используются URL типа SEF (т.е. удобные для поиска URL). Так, если документ представляет собой ленту новостей (type ="feed"), мы пропускаем большую часть процесса его обработки и только задаем базу документа. А если документ относится к любому другому типу, мы вообще не выполняем его специальную обработку, пропуская ее полностью.
 

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


Вам также будет интересно:

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