拥有prestashop并需要全局替换所有页面中的某些html属性(在显示之前)。
我使用扩展:
protected function smartyOutputContent($content)
一些替换代码。
一切运行良好。 (但这不是正确的重写)
但有问题,如果有人知道如何做到这一点的正确方法。 在prestashop中,或者如果某种方式如何正确地重写一些聪明并扩展它...
(理想情况下,如果可以在prestashop模块中使用它)
感谢所有想法。
更改
在我的情况下,需要替换/重命名itemprop,itemscope,itemtype。 (在模块中更改为json结构)
并且想要在安装modul时理想地做。 但是用户可以拥有自定义主题......所以覆盖模板不是正确的方法。
我现在这样做:
模块/ modul_name /手柄/类/控制器/ Controller.php这样 内容:
protected function smartyOutputContent($content)
{
$this->context->cookie->write();
$html = '';
$js_tag = 'js_def';
$this->context->smarty->assign($js_tag, $js_tag);
if (is_array($content)) {
foreach ($content as $tpl) {
$html .= $this->context->smarty->fetch($tpl);
}
} else {
$html = $this->context->smarty->fetch($content);
}
$html = trim($html);
if (in_array($this->controller_type, array('front', 'modulefront')) && !empty($html) && $this->getLayout()) {
$live_edit_content = '';
if (!$this->useMobileTheme() && $this->checkLiveEditAccess()) {
$live_edit_content = $this->getLiveEditFooter();
}
$dom_available = extension_loaded('dom') ? true : false;
$defer = (bool)Configuration::get('PS_JS_DEFER');
if ($defer && $dom_available) {
$html = Media::deferInlineScripts($html);
}
$html = trim(str_replace(array('</body>', '</html>'), '', $html))."\n";
/* Remove snipped data from attributes html elements */
$html = str_replace(array('itemprop', 'itemscope', 'itemtype'), 'ip', $html);
$this->context->smarty->assign(array(
$js_tag => Media::getJsDef(),
'js_files' => $defer ? array_unique($this->js_files) : array(),
'js_inline' => ($defer && $dom_available) ? Media::getInlineScript() : array()
));
$javascript = $this->context->smarty->fetch(_PS_ALL_THEMES_DIR_.'javascript.tpl');
if ($defer && (!isset($this->ajax) || ! $this->ajax)) {
echo $html.$javascript;
} else {
echo preg_replace('/(?<!\$)'.$js_tag.'/', $javascript, $html);
}
echo $live_edit_content.((!isset($this->ajax) || ! $this->ajax) ? '</body></html>' : '');
} else {
echo $html;
}
}
所有功能都正确。
感谢评论sadlyblue