Геннадий А.
178 сообщений
#12 лет назад
Всем добрый вечер, нужна помощь гуру.
Есть сайт на Joomla 2.5 и там подключаются автоматом два мне не нужных скрипта
Один я отключил таким образом:
if( isset($this->_script) ) {
$this->functions = preg_replace('%window\.addEvent\(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%', '', $this->_script);
if( empty($this->_script) )
unset( $this->_script );
};

А вот второй не получается, может вы увидите где у меня ошибка в preg_replace
Мой код:
preg_replace('%window\.addEvent\(\'domready\',\s*function\(\)\s*{\s*SqueezeBox.initialize\(\{\}\)\;\s*SqueezeBox.assign\(\$\$\(\'a.modal\'\)\,\s*{\s*parse:\s*\'rel\'\s*}\);\s*}\);\s*%', '', $this->functions);

Сам скрипт:

<script type="text/javascript">

window.addEvent('domready', function() {

SqueezeBox.initialize({});
SqueezeBox.assign($$('a.modal'), {
parse: 'rel'
});
});
</script>

P.S. Не надо мне рассказывать зачем нужны эти скрипты, я это и так знаю Просто без авторизации я поотключал вообще mootol и соответственно данный скрипт выдаёт ошибку. Редактирование ядра Joomla также не рассматривается
Алексей Г.
169 сообщений
#12 лет назад
Попробуйте вот так
preg_replace('/window\.addEvent\(\'domready\',\s*function\(\)\s*{\s*SqueezeBox.initialize\(\{\}\)\;\s*SqueezeBox.assign\(\$\$\(\'a.modal\'\)\,\s*{\s*parse:\s*\'rel\'\s*}\);\s*}\);/si', '', $this->functions);
Геннадий А.
178 сообщений
#12 лет назад
Цитата ("rasiell"):
Попробуйте вот так

Не сработало
Алексей Глухов
2 сообщения
#12 лет назад
$text = <<<END

<script type="text/javascript">

window.addEvent('domready', function() {

SqueezeBox.initialize({});
SqueezeBox.assign($$('a.modal'), {
parse: 'rel'
});
});
</script>

END;

echo preg_replace('%window\.addEvent\(\'domready\',\s*function\(\)\s*{\s*SqueezeBox.initialize\(\{\}\)\;\s*SqueezeBox.assign\(\$\$\(\'a.modal\'\)\,\s*{\s*parse:\s*\'rel\'\s*}\);\s*}\);\s*%', '', $text);

Ваш regexp успешно справляется проблема не в нем.
Остается только гадать, как и где вызывается ваш код.
Допустим, что вы используете свой плагин и событие onBeforeCompileHead тогда у вас должно быть что-то вроде:
$document = JFactory::getDocument();
$headData = $document->getHeadData();
$script = $headData;
// тут ваш regexp
$headData = $script;
$document->setHeadData($headData);

Если используете onAfterRender то страница уже собрана целиком и что-либо изменить можно так:
$content  = JResponse::getBody();

JResponse::setBody($content);
Сергей Л.
616 сообщений
#12 лет назад
Если прям в шаблоне отключаешь, то должно сработать так:
$this->_script = preg_replace('%window\.addEvent\(\'domready\',\s*function\(\)\s*{\s*SqueezeBox.initialize\(\{\}\)\;\s*SqueezeBox.assign\(\$\$\(\'a.modal\'\)\,\s*{\s*parse:\s*\'rel\'\s*}\);\s*}\);\s*%', '', $this->_script);
Сергей Л.
616 сообщений
#12 лет назад
Подключаемые библиотеки в шаблоне можно отключить так:

unset(
$this->_scripts,
$this->_scripts,
$this->_scripts,
$this->_scripts
);
Геннадий А.
178 сообщений
#12 лет назад
Цитата ("art-apple"):
Если прям в шаблоне отключаешь, то должно сработать так:

Спасибо, помогло
Насчет отключения, подключаемых библиотек в курсе.
Кстати может кому-то пригодится, код для отключения теперь всех стандартных надписей, скриптов и стилей


// Unset Joomla standart scripts and style
$user = JFactory::getUser();
if ($user->guest) {
unset(
$this->_scripts,
$this->_scripts,
$this->_scripts,
$this->_scripts,
$this->_scripts,
$this->_styleSheets);

if( isset($this->_script) ) {
$this->_script = preg_replace('%window\.addEvent\(\'load\',\s*function\(\)\s*{\s*new\s*JCaption\(\'img.caption\'\);\s*}\);\s*%', '', $this->_script);
$this->_script = preg_replace('%window\.addEvent\(\'domready\',\s*function\(\)\s*{\s*SqueezeBox.initialize\(\{\}\)\;\s*SqueezeBox.assign\(\$\$\(\'a.modal\'\)\,\s*{\s*parse:\s*\'rel\'\s*}\);\s*}\);\s*%', '', $this->_script);
if( empty($this->_script) )
unset( $this->_script );
};
}
//Hide "Joomla! - Open Source Content Management"
$this->setGenerator(null);