Я пытаюсь удалить нежелательные скрипты из моего настраиваемого заголовка joomla, который мне удалось удалить все, кроме этого:
<script type="text/javascript"> jQuery(document).ready(function() { jQuery('.hasTooltip').tooltip({}); }); </script>
Я искал часы, и я пробовал множество вещей, чтобы удалить его, но я не могу избавиться от него. Вот что я сделал, чтобы удалить другие сценарии, которые я не хочу (для тех, у кого есть эта проблема):
# unset frameworks JHtml::_('bootstrap.framework',false); JHtml::_('jquery.framework',false); # unset scripts unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery.min.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery-noconflict.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/bootstrap.min.js']);
с# unset frameworks JHtml::_('bootstrap.framework',false); JHtml::_('jquery.framework',false); # unset scripts unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery.min.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery-noconflict.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/bootstrap.min.js']);
с# unset frameworks JHtml::_('bootstrap.framework',false); JHtml::_('jquery.framework',false); # unset scripts unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery.min.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery-noconflict.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/bootstrap.min.js']);
Если кто-то может помочь мне удалить эту всплывающую подсказку javascript, это будет фантастично. О, и я не хочу касаться основных файлов, поэтому я пытаюсь удалить его из самого файла index.php.
Некоторые компоненты / Module / Plugin вызывают функцию JHTML :: _ ('behavior.tooltip'). и эта функция добавляет ваш код.
ты можешь сделать:
Грязный путь: перейдите в библиотеки \ cms \ html \ bootstrap.php и измените файл на методе tooltip (). но помните, что это основной файл, поэтому обновление может переопределить ваши изменения.
Чистым способом, найдите компонент, который добавляет этот код и удаляет или меняет его.
Удачи
Вам придется вручную разобрать $doc->_script
. Массив $doc->_scripts
содержит сценарии, связанные с другим источником, в то время как $doc->_script
предназначен для объявлений сценариев, таких как всплывающая подсказка.
В конце вашего веб-корня index.php (не шаблон, http://domain.com/index.php ) замените $ app-> execute (); выполните следующие действия:
// Start the output buffer. ob_start(); // Execute the application. $app->execute(); // Get buffer $buffer = ob_get_clean(); // Change HTML $buffer = str_replace('<script type="text/javascript">'.chr(10).'jQuery(document).ready(function(){'.chr(10).' jQuery(\'.hasTooltip\').tooltip({"html": true,"container": "body"});'.chr(10).'});'.chr(10).' </script>','',$buffer); // Output buffer echo($buffer);
Обратите внимание, что вам нужно будет использовать EXACT HTML, который создается модулем. Это то, что мой модуль создает, твой может немного отличаться.
В дополнение к выполнению перезаписи HTML, например, вы могли бы также убрать выход, удалить ссылки на модули и т. Д.
Я также использую это для выполнения таких действий, как изменение года авторских прав на веб-сайте. В позиции модуля я ссылаюсь на текущий год как «{год}», а затем добавляю еще одну str_replace, которая выполняет следующие действия:
$buffer = str_replace('{year}',date('Y'),$buffer);
Бинго, всегда показывает текущий год.
Наслаждаться…
Мне удалось избавиться от встроенного javascript, используя этот код в файле index.php моего шаблона:
unset($this->_script['text/javascript']);
отказ от ответственности: я не разработчик PHP, поэтому используйте код выше на свой страх и риск 🙂
Основываясь на документах Joomla , нужно рассмотреть два вопроса:
a) В приведенном ниже коде вы фактически включаете / включаете bootstrap и jquery:
# unset frameworks JHtml::_('bootstrap.framework',false);// including bootstrap! JHtml::_('jquery.framework',false);// including jquery!
Когда загрузочный бот включен, joomla автоматически включает jquery, и если joomla включен jquery, joomla автоматически включает всплывающую подсказку.
Просто не называйте эти функции. unset
вами unset
удалит bootstrap и jquery правильно:
unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery.min.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery-noconflict.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/bootstrap.min.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery-migrate.min.js']);
сunset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery.min.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery-noconflict.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/bootstrap.min.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery-migrate.min.js']);
сunset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery.min.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery-noconflict.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/bootstrap.min.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery-migrate.min.js']);
сunset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery.min.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery-noconflict.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/bootstrap.min.js']); unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery-migrate.min.js']);
б) если скрипт всплывающей подсказки по-прежнему включен, он, вероятно, вставлен JHtml::_('behavior.tooltip');
где-то в используемом компоненте.
Наконец, никогда никогда не изменяйте основные файлы Joomla. это худшая практика.
PS. Для тех, кто упомянул, что скрипт всплывающей подсказки вставлен, но он не находит его в $doc
, это связано с тем, что $doc
не содержит встроенных скриптов.
Я уже встречаю эту проблему, я использую Joomla 3. Если это ваш случай, вы можете решить ее, выполнив это: Joomla 3 поставляется с jQuery на борту, поэтому, добавив Joomla самостоятельно, это может вызвать проблему. Также убедитесь, что вы включили jQuery поверх <jdoc:include type="head" />
. Если вам необходимо включить его. Но я не рекомендую этого. Надеюсь это поможет
У меня была такая же проблема, когда я строил шаблон / сайт Joomla только с HTML5, CSS3 и некоторыми небольшими плагинами jQuery для эффектов. Было недостойно включать тяжелый Bootstrap просто, чтобы показать некоторые подсказки, которые я также не использовал вообще.
Хотя я уже отключил media / jui / js / bootstrap.min.js из JDocument, но эти строки кода
jQuery(document).ready(function(){ jQuery('.hasTooltip').tooltip({"html": true,"container": "body"}); });
были добавлены в библиотеки / cms / html / bootstrap.php. Так что я получил ошибку "function tooltip not found".
Я решил, что добавив пустую функцию в JS-файл моего шаблона.
jQuery.fn.tooltip = function (option) { };
Существует доступный плагин Joomla, который отключает Bootstrap, а также удаляет фрагмент функции всплывающей подсказки, который вставляется JHtml::_('behavior.tooltip');
где-то в любом компоненте.
См. Здесь: Отключить плагин Bootstrap