Нужна помощь с preg_replace
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. Не надо мне рассказывать зачем нужны эти скрипты, я это и так знаю

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);
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);