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

Display a custom hook in the Back Office in Prestashop 1.7

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

我通过在覆盖模板中输入随机字符串进行验证,它成功出现在产品列表中。

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

$this->registerHook('displayModProfit');

我确认挂钩已在 ps_hook 数据库中注册。是的。

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

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

然而,它没有用。我希望显示测试消息的地方没有显示任何内容。我检查了数据库,发现我的模块没有挂钩。我在后台 "Positions" 选项卡中也找不到挂钩。

我读了一些这方面的内容,人们建议在 theme.yml 文件中添加一个 custom_hooks 条目。问题是,我没有制作特定于主题的挂钩。我正在做一个后台挂钩。如何将我的模块附加到它?

在我看来,您只是在添加自定义挂钩后忘记了重置模块。有必要在系统中注册您的挂钩。或者您可能没有在方法 hookDisplayModProfit.

中添加 return 语句

如果您正确地按照接下来的说明进行操作,一切都会顺利进行

  1. 覆盖您的 twig 模板文件。将具有相同名称的文件放在模块内的正确目录中。在您的情况下,它是 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 文件中添加一个带有 return 语句

    的方法 hookDisplayModProfit

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

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