Комментарии

Выполнение компонента Joomla 2.5 (часть 2)
( 0 Голосов )
После установки заголовка и описания страницы мы наконец доходим до самого главного, как показано в приведенной ниже строке кода. 
 
$contents = JComponentHelper::renderComponent($component);
 
В этой строке кода выполняется заданный нами компонент, а результат сохраняется в переменной $contents. Рассмотрим подробнее, как это делается. В данной строке кода вызывается статический метод renderComponent () класса JComponentHelper из файла libraries/joomla/application/component/helper.php. Первая часть исходного кода этого метода приведена в листинге ниже.
 
Метод renderComponent () из класса JComponentHelper.
public static function renderComponent($option, $params = array())
{
// Инициализировать переменные
$app = JFactory::getApplication();
 
// Загрузить файлы шаблонов языковой поддержки
$template = $app->getTemplate(true)->template;
$lang = JFactory::getLanguage();
$lang->load('tpl_' . $template, JPATH_BASE, null, false, false)
|| $lang->load('tpl_' . $template, JPATH_THEMES . "/$template", null, false, false)
|| $lang->load('tpl_' . $template, JPATH_BASE, $lang->getDefault(), false, false)
|| $lang->load('tpl_' . $template, JPATH_THEMES . "/$template", $lang->getDefault(), false, false);
 
if (empty($option))
{
// Сгенерировать сообщение об ошибке 404, если компонент отсутствует
JError::raiseError(404, JText::_('JLIB_APPLICATION_ERROR_COMPONENT_NOT_FOUND'));
return;
}
 
// Записать область действия
$scope = $app->scope;
 
// Задать имя компонента в области действия
$app->scope = $option;
 
// Сформировать путь к компоненту
$option = preg_replace('/[^A-Z0-9_\.-]/i', '', $option);
$file = substr($option, 4);
 
// Определить путь к компоненту
define('JPATH_COMPONENT', JPATH_BASE . '/components/' . $option);
define('JPATH_COMPONENT_SITE', JPATH_SITE . '/components/' . $option);
define('JPATH_COMPONENT_ADMINISTRATOR', JPATH_ADMINISTRATOR . '/components/' . $option);
 
// Получить путь к компоненту
if ($app->isAdmin() && file_exists(JPATH_COMPONENT . '/admin.' . $file . '.php'))
{
JLog::add('Files in the format admin.COMPONENTNAME.php are considered deprecated and will not be loaded in Joomla 3.0.', JLog::WARNING, 'deprecated');
$path = JPATH_COMPONENT . '/admin.' . $file . '.php';
}
else
{
$path = JPATH_COMPONENT . '/' . $file . '.php';
}
 
// Сгенерировать сообщение об ошибке, если компонент недоступен
if (!self::isEnabled($option) || !file_exists($path))
{
JError::raiseError(404, JText::_('JLIB_APPLICATION_ERROR_COMPONENT_NOT_FOUND'));
}
 
$task = JRequest::getString('task');
 
// Загрузить общие и локальные файлы языковой поддержки
$lang->load($option, JPATH_BASE, null, false, false) || $lang->load($option, JPATH_COMPONENT, null, false, false)
|| $lang->load($option, JPATH_BASE, $lang->getDefault(), false, false)
|| $lang->load($option, JPATH_COMPONENT, $lang->getDefault(), false, false);
В приведенной выше первой части метода renderComponent () загружается шаблон и его язык. Затем имя компонента сохраняется в поле scope объекта типа JSite ($арр->scope = $option). Это очень удобное поле, поскольку в любой момент цикла выполнения команд мы можем проверить содержимое этого поля, чтобы выяснить, какой именно компонент выполняется. Например, мы можем воспользоваться этим обстоятельством, чтобы выполнить подключаемый модуль только для выбранных компонентов.
 
В строке кода с командой preg_replace проверяется наличие в переменной $option только букв, чисел и знаков подчеркивания. А все остальные символы заменяются знаками тире. Благодаря этому исключаются любые символы, способные так или иначе исказить имя файла. В следующей строке кода выполняется буквально следующее: использовать часть имени в переменной $option после четвертой позиции в качестве имени файла. Это условное обозначение имен компонентов. В рассматриваемом здесь примере компонент называется com_content, и поэтому файл, который нужно выполнить, называется content.php. Более подробно эти и другие условные обозначения имен будут рассмотрены в следующем разделе.
 
Итак, мы практически готовы выполнить заданный нами компонент! В следующем фрагменте кода определяется путь к файлам компонента в пользовательской и административной частях веб-сайта, а переменная $path устанавливается в зависимости от принадлежности данного компонента к пользовательской или административной части веб-сайта. После этого мы должны убедиться в том, что компонент активизирован. И наконец, мы вновь прибегаем к логической операции или для загрузки файлов языковой поддержки из одного из возможных мест их расположения.
 

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


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


Защитный код