我需要在产品说明和购物车中的添加按钮之间的右边移动钩子,在照片中标记的区域
到目前为止,我只能使用admin将其放在社交网络的按钮之前和之后,但是我需要将模块放在按钮之前。
这是我创建钩子的方式:
public function install()
{
if (!parent::install() || !$this->registerHook('displayProductAdditionalInfo'))
return false;
return true;
}
public function uninstall()
{
if (!parent::uninstall() || !$this->unregisterHook('displayProductAdditionalInfo'))
return false;
return true;
}
public function hookDisplayProductAdditionalInfo($params)
{
return $this->runnable();
}
这是我的文件,其中包含我要显示的iframe
{block name='product_description_short' prepend}
<style type='text/css'>
.products { border: none; width: 100%; height: {$height}px; }
</style>
<iframe class='products' src='{$iframe}{$token}'></iframe>
{/block}
如何在无需触摸主题源代码的情况下将挂钩移动到需要的位置?
答案 0 :(得分:1)
这正是小部件的概念所针对的。 Widgets是PS 1.7中引入的一项高级功能,它扩展了hooks功能。
借助小部件,模块开发人员可以在 模块被要求这样做。当模块在其模块中实现小部件时 代码,它允许:
1个主题,可以直接使用{widget name =“ module_name”}
调用模块2如果调用了已注册的钩子,但其方法hook()不存在,则要回退的核心。
通过单击相同的链接,您可以使模块小部件兼容,然后在templates/catalog/product.tpl
中的所需位置调用该小部件。
在1.7.5.0的经典主题中,您可以在<div class="product-actions">
之前的98行中调用该小部件。
希望有帮助。
修改:
让我们假设您的模块名称为“ my_module”,而您的自定义钩子名称为“ myCustomHook”,这就是模块类的外观:
class MyModule extends Module implements WidgetInterface
{
public function __construct()
{
$this->name = 'my_module';
$this->version = '1.0.0';
$this->author = 'me';
$this->tab = 'front_office_features';
$this->need_instance = 0;
$this->bootstrap = true;
parent::__construct();
$this->description = ...
$this->displayName = ...
$this->confirmUninstall = ...
}
public function install()
{
if(!parent::install())
{
return false;
}
return true;
}
public function uninstall()
{
return(parent::uninstall());
}
public function renderWidget($hookName = null, array $configuration = [])
{
$this->smarty->assign($this->getWidgetVariables($hookName, $configuration));
return $this->display(__FILE__, 'views/templates/widget/my_template.tpl');
}
public function getWidgetVariables($hookName = null, array $configuration = [])
{
if($hookName === 'MyCustomHook')
{
$your_height_value, $your_iframe_value, $your_token_value... // Get the values depending on your logic
return [
'token' => $your_token_value;
'height' => $your_height_value;
'iframe' => $your__iframe_value;
];
}
}
在模板文件中,只需调用小部件即可:
{widget module='my_module' hook='myCustomHook'}
答案 1 :(得分:0)
这是一个内置的Prestashop挂钩,它必须留在那里。
您可以做的是注册一个自己的自定义钩子,例如displayMyHookHere,这里是如何做的指南hooks in PS 1.7+
将模块挂在其上,并在页面上的任何位置显示,例如{hook h ='displayMyHookHere'}