2012 03 октября

Joomla 3.0 убираем ненужные JS с фронтальной части (шаблона)

Joomla 3.0 убираем ненужные JS с фронтальной части (шаблона)По аналогии с 1.5 и 2.5 в шаблоне нам по умолчанию грузят далеко не всегда нужные скрипты, а теперь еще и две библиотеки сразу (mootools\jquery). Лично мне это не нравится, так как в 99% проектах использую только jquery Лечим - в index.php шаблона до вызова head добавляем
1
23
45
67
89
$headlink = $this->getHeadData();
unset($headlink['scripts']['/media/system/js/caption.js']);unset($headlink['scripts']['/media/system/js/validate.js']);
unset($headlink['scripts']['/media/system/js/mootools-core.js']);unset($headlink['scripts']['/media/system/js/mootools-more.js']);
unset($headlink['scripts']['/media/system/js/core.js']);unset($headlink['scripts']['/media/jui/js/bootstrap.min.js']);
unset($headlink['scripts']['/media/jui/js/jquery-noconflict.js']);$this->setHeadData($headlink);
Какие файлы оставлять - решаем самостоятельно, я оставлю только /media/jui/js/jquery.min.js, хотя и его лучше бы грузить с CDN гугля или яндекса. Кто подскажет, как подобным же автоматическим способом убрать вызовы ненужных функций - цены тому человеку не будет, чтобы не руками в файлах ковырять, типа
1
23
45
67
window.addEvent('load', function() {
                                new JCaption('img.caption');                        });
function keepAlive() {  var myAjax = new Request({method: "get", url: "index.php"}).send();} window.addEvent("domready", function(){ keepAlive.periodical(840000); });jQuery(document).ready(function() {
                                        jQuery('.hasTooltip').tooltip({});                                });

Комментарии

0 nikonor пишет нам 08.01.2013 23:58
Использую у себя
if( isset($this->_script['text/javascript']) ) {
        $this->_script['text/javascript'] = preg_replace('%window\.addEvent\(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%', '', $this->_script['text/javascript']);
        if( empty($this->_script['text/javascript']) )
        unset( $this->_script['text/javascript'] );
};
Сообщить модератору
0 Андрей отвечает 30.06.2015 20:25
А можно же проще unset($this->_script['text/javascript' ]); Правда для wrap шаблона пришлось еще и путь скать через $this->wrap['system']->document-> ;_script['text/javascript'] И то удалилось только часть этого скрипта, в этой переменной оказалось только часть кода, вторую не могу отыскать. Кто сталкивался прошу помощь!
Сообщить модератору
0 Beliyadm отвечает 30.06.2015 20:29
Не очень понял, через unset же должны убиться все добавляемые в хедер скрипты, а нам надо отключить только связанные с мутулзом стандартные, а наши в модулях и компонентах (которые нужны) оставить. Поясните задачу, пока не совсем понятно
Сообщить модератору
0 Андрей отвечает 30.06.2015 20:45
Да, они так и убираются. Однако у меня та же проблема что и описана в статье: "Кто подскажет, как подобным же автоматическим способом убрать вызовы ненужных функций — цены тому человеку не будет, чтобы не руками в файлах ковырять, типа window.addEvent('load', function() { new JCaption('img.caption'); }); function keepAlive() { var myAjax = new Request({method: "get", url: "index.php"}).send();} window.addEvent("domready", function(){ keepAlive.periodical(840000); }); jQuery(document).ready(function() { jQuery('.hasTooltip').tooltip({}); }) ; " Я так же не могу убрать этот кусок в J 2.5, выглядит он немного по другому, но принцип думаю тот же... Вы еще не нашли решение этой проблемы?
Сообщить модератору
0 Beliyadm отвечает 30.06.2015 23:32
Тогда понял. К сожалению на уровне шаблона не нашел, приходится каждый раз вырезать напрямую из файлов ядра движка, типа libraries\cms\html\behavior.php строки, функции public static function caption и так далее (собственно, как и в версии 2.5, эти штуки на уровне шаблона не определяются для модификаций)
Сообщить модератору
0 Михаил пишет нам 20.02.2013 19:01
Спасибо, почистил head своей джумлы :)
Сообщить модератору
0 Fedor Vlasenko пишет нам 12.03.2013 19:53
На самом деле можно сделать все гораздо проще. Для этого плагином группы system нужно переопределить класс JHtmlBehavior находящийся в behavior.php для mootools В папку плагина (здесь joomoptions) кладем наш behavior.php. Код плагина <?php // Запрет прямого доступа. defined('_JEXEC') or die; // Заменяем базовый класс JHtmlBehavior переопределенной версией. include_once JPATH_ROOT.'/plugins/system/joomoptions/behav ior.php';
Сообщить модератору
0 Beliyadm отвечает 17.03.2013 05:28
1 - лазить в код долго и муторно 2 - первое же обновление все порушит Такие вещи надо решать на уровне шаблона или в идеале настройкой в админке, коей нет в 3-й версии и не предвидится
Сообщить модератору
0 Fedor пишет нам 17.03.2013 05:42
тогда лови плагин с ответами на все вопросы http://joomlaforum.ru/index.php/topic,253684.msg1295681.html#msg1295681
Сообщить модератору
+1 xlife пишет нам 06.07.2013 03:35
не получается убрать bootstrap.min.js способом описанным в статье. А скрипты убираю во так $this->_scripts = $this->_script = array(); $document = JFactory::getDocument(); и подключаю необходимые $document->addScript('https://ajax .googleapis.com/ajax/libs/jquery/1.7.1/jquery.min. js');
Сообщить модератору
0 Nikel пишет нам 20.01.2014 02:09
Автор, спасибо, решил проблему Вашим способом, полет нормальный!
Сообщить модератору
0 rodion пишет нам 11.03.2014 01:39
по идее unset($headlink['script']['text/javascript']); должно помочь
Сообщить модератору
0 black пишет нам 16.05.2015 01:44
А представленный то вариант работает. Спасибо автору - работает
Сообщить модератору
0 Fedor пишет нам 01.07.2015 01:30
К сожалению на уровне шаблона не нашел, приходится каждый раз вырезать напрямую из файлов ядра движка, типа libraries\cms\html\behavior.php Я же давно написал решение, https://github.com/Poznakomlus/joomla_options че вам не хватает еще
Сообщить модератору
0 Beliyadm отвечает 01.07.2015 01:42
то есть тупо обнулять весь класс того же behavior.php? Если честно - то даже для меня это слишком хардкодное решение, уж лучше на уровне шаблона вырезать ненужные вызовы функций js нежели рубить все на корню
Сообщить модератору
0 Anatoliy отвечает 07.08.2015 15:15
Что касается behavior на примере JCaption('img.caption'). Удалить эту строку можно на уровне шаблона (не меняя файлы ядра джумлы!). Эта строка добавляется в тело документа вот таким способом: JHtml::_('behavior.caption'); Поиск по проекту показал, что встречается в компонентах: - com_contact (view: categories) - com_content (views: archive, article, categories, category, featured) - com_newsfeeds (views: categories, category) Теперь что нужно сделать - это переопределить эти представления в своем шаблоне и удалить/закомментировать строку JHtml::_('behavior.caption'); Переопределенные представления хранятся в папке темы в каталоге html. Например html -com_content --article -- -default.php (его скопировать из \components\com_content\views\article\tmpl\default .php) и удаляем строку JHtml::_('behavior.caption'); По этой аналогии, если нужно, переопределяем другие представления. Всем удачи.
Сообщить модератору
0 Максим пишет нам 08.03.2016 17:20
Или есть способ прописать всем скриптам джумлы загрузку async="async" В файле libraries/joomla/document/html/renderer/head.php д описать в строчку $buffer .= $tab . '<script src="' . $strSrc . '" async="async"';
Сообщить модератору
0 Beliyadm отвечает 08.03.2016 19:20
Это немного не то, асинхронная загрузка и не загружать скрипты вообще - разные вещи А насчет параметра спасибо, забыл про него, попробую в другом своем проблем случае использовать
Сообщить модератору
0 Лола пишет нам 27.03.2016 15:39
Максим , а в какую именно строчку дописать - $buffer .= $tab . ‘<script src="' . $strSrc . '" async="async"'; ? У меня в этом файле строчка - $buffer .= $tab . '' . $lnEnd;
Сообщить модератору
0 Леонид пишет нам 09.02.2017 02:55
unset($this->_tpl->_scripts['/media/system/js/capt ion.js']);
unset($this->_tpl->_script);
unset($this->_tpl->_styleSheets['/components/com_jcomments/tpl/default/style.css?v=3002']);

В джумле 3.6.5 убирал так
А вообще все эти значения переменных и их названия можно просмотреть вписав php строку типа var_dump($this->_tpl);
И там тебе вывалит и скрипты и css
Сообщить модератору

Недостаточно прав для комментирования