在Prestashop 1.7的后台中显示自定义钩子

时间:2020-01-17 12:03:11

标签: php twig prestashop prestashop-1.7

我正在尝试在Prestashop的默认产品表中显示一些内容。我已经设法覆盖了树枝模板{% extends 'PrestaShopBundle:Admin/Product/CatalogPage/Lists:list.html.twig' %}

我通过在替代模板中输入随机字符串来验证它,并将其成功显示在产品列表中。

在那之后,我在模块中创建了一个自定义钩子:

$this->registerHook('displayModProfit');

我验证了该挂钩已在ps_hook数据库中注册。是的。

我在模块中添加了一个方法,以显示带有挂钩的测试消息。该方法称为hookDisplayModProfit

然后我在覆盖的{{ renderhook('displayModProfit') }}模板中使用了list.html.twig

但是,它没有用。我希望测试消息出现的地方什么都没有显示。我检查了数据库,并意识到我的模块未连接到挂钩。我也无法在“后台”“位置”选项卡中找到该钩子。

我对此进行了一些阅读,人们建议在custom_hooks文件中添加一个theme.yml条目。问题是,我没有制作主题特定的挂钩。我正在制作后台挂钩。如何将我的模块连接到它?

1 个答案:

答案 0 :(得分:2)

在我看来,您似乎只是在添加自定义钩子后忘记重置模块。有必要在系统中注册您的钩子。或者,也许您没有在方法hookDisplayModProfit中添加return语句。

如果您正确地遵循以下说明,则所有内容都应像超级按钮一样工作

  1. 覆盖您的树枝模板文件。将具有相同名称的文件放在模块内部的正确目录中。在您的情况下,它是your_module/views/PrestaShop/Admin/Product/CatalogPage/Lists/list.html.twig,并扩展了原始文件{% extends 'PrestaShopBundle:Admin/Product/CatalogPage/Lists:list.html.twig' %}。不要忘记,我们只能扩展原始模板中存在的一个块。例如:

    {% block product_catalog_form_table_row %} {{ renderhook('displayModProfit') }} {% endblock %}

  2. 在模块的主php文件中,将$this->registerHook('displayModProfit')添加到安装方法。

    public function install() { return parent::install() && $this->registerHook('displayModProfit'); }

  3. 在您的主要php文件中,添加带有返回语句的方法hookDisplayModProfit

    public function hookDisplayModProfit() { return 'Hello world!'; }

  4. 重置模块以注册新的挂钩。