Поговорим немного о том, как облегчить вывод страниц сайта на Joomla 2.5. Ни для кого не открою секрета, что в погоне за универсализацией, разработчики Joomla подгружают на все страницы сайта фреймворк Mootools. Не будем обсуждать решения разработчиков, скажу только, что это не всегда оправдано, прежде всего в плане соотношения Функционал/скорость загрузки страницы.
Но у нас есть все возможности, чтобы самим решать, на каких страницах сайта использовать данный фреймворк, а на каких нет.
Решается данный вопрос на уровне шаблона. Ну что же, приступим к препарации нашего шаблона. Предупреждение, перед всеми изменениями, необходимо сделать резервную копию вашего шаблона.
Вносить изменения будем в файл templates\имя_шаблона\index.php
Для того что бы выяснить какие переменные содержит объект нашего шаблона после строчки
defined('_JEXEC') or die;
добавим строку
print_r($this);
В результате мы увидим структуру объекта, состоящую из массивов, с переменными вашего шаблона, весь вывод приводить не буду, кому интересно сами попробуют, приведу только то что нам пригодится для работы.
JDocumentHTML Object
(
...
[_scripts] => Array
(
[/media/system/js/mootools-core.js] => Array
(
[mime] => text/javascript
[defer] =>
[async] =>
)
[/media/system/js/core.js] => Array
(
[mime] => text/javascript
[defer] =>
[async] =>
)
[/media/system/js/caption.js] => Array
(
[mime] => text/javascript
[defer] =>
[async] =>
)
[/media/system/js/mootools-more.js] => Array
(
[mime] => text/javascript
[defer] =>
[async] =>
)
)
[_script] => Array
(
[text/javascript] => window.addEvent('load', function() {
new JCaption('img.caption');
});
)
...
)
Теперь, когда мы знаем имена нужных нам переменных нашего шаблона, произведем действия, по обеспечению вывода всего этого богатства только там где это требуется или другими словами вырежем на тех страницах где он не нужен.
Когда нам может погрузка этих скриптов? На ум приходит создание нового материала или редактирование существующего. Сделаем в шаблоне проверку на эти условия.
$view = JRequest::getVar('view', null, 'get', 'word');
$layout = JRequest::getVar('layout', null, 'get', 'word');
if (!(($view=='form')and($layout='edit'))) {
//выполняем код по ограничению вывода mootools
if (isset($this->_scripts)and(count($this->_scripts))){
foreach ($this->_scripts as $key => $value) {
if (preg_match("/media\/system\/js/i", $key)) {
unset ($this->_scripts[$key]);
}
}
}
//вырезаем строку window.addEvent('load', function() { new JCaption('img.caption'); });
if (isset($this->_script)and(count($this->_script))){
preg_match("/window\.addEvent\('load',\sfunction\(\)\s\{[\s]*new\sJCaption\('img\.caption'\);[\s]*\}\);/iU", $this->_script['text/javascript'],$match);
if (isset($match[0])) {
$this->_script['text/javascript']=str_replace($match[0],'',$this->_script['text/javascript']);
}
//вырезаем тултип
preg_match("/window\.addEvent\('domready',\sfunction\(\)\s\{[\s]*[$]+\('\.hasTip'\)\.each\(function\(el\)\s\{[\s]*var\stitle\s=\sel\.get\('title'\);[\s]*if\s\(title\)\s\{[\s]*var\sparts\s=\stitle\.split\('::', 2\);[\s]*el\.store\('tip:title',\sparts\[0\]\);[\s]*el\.store\('tip:text',\sparts\[1\]\);[\s]*\}[\s]*\}\);[\s]*var\sJTooltips\s=\snew\sTips\([$]+\('\.hasTip'\),\s\{\smaxTitleChars:\s50,\sfixed:\sfalse\}\);[\s]*\}\);/iU", $this->_script['text/javascript'],$match2);
if (isset($match2[0])) {
$this->_script['text/javascript']=str_replace($match2[0],'',$this->_script['text/javascript']);
}
}
}
Почему я не стал обнулять объекты _scripts и _scripts, а сделал по ним поиск, да потому что на страницах могут быть установлены компонент или модули использующие свои скрипты, без которых страница будет отображаться не корректно.
Для тех, кто хочет добиться полного уничтожения всех скриптов на страницах своего сайта, код будет следующим:
$view = JRequest::getVar('view', null, 'get', 'word');
$layout = JRequest::getVar('layout', null, 'get', 'word');
if (!(($view=='form')and($layout='edit'))) {
//выполняем код по ограничению вывода mootools
if (isset($this->_scripts)and(count($this->_scripts))){
$this->_scripts=array();
}
if (isset($this->_script)and(count($this->_script))){
$this->_script['text/javascript']='';
}
}
Статья сделана по материалам JoomlaForum joomlaforum.ru/index.php/topic,197566.0.html
Выражаю благодарность участнику форума Poznakomlus за раскрытие данной темы.
Благодарю читателей за внимание!