我需要在我的模块中的管理产品网格上为选定的产品创建操作。就像现在 presta 实现了产品组删除、复制、激活/停用一样。我首先尝试通过官方文档为客户网格创建批量操作(https://devdocs.prestashop.com/1.7/development/components/grid/tutorials/work-with-bulk-actions/)。
$this->registerHook('actionCustomerGridDefinitionModifier')
/**
* Use hook to add Bulk action for subscribing multiple customers to newsletter
*/
public function hookActionCustomerGridDefinitionModifier(array $params)
{
// $params['definition'] is instance of \PrestaShop\PrestaShop\Core\Grid\Definition\GridDefinition
$params['definition']->getBulkActions()->add(
(new SubmitBulkAction('subscribe_newsletter'))
->setName('Subscribe newsletter')
->setOptions([
// in most cases submit action should be implemented by module
'submit_route' => 'admin_my_module_customers_bulk_subscribe_newsletter',
])
);
}
但不起作用,批量操作中没有显示任何新内容。
然后我尝试同样的产品:
$this->registerHook('actionProductGridDefinitionModifier')
/**
* Use hook to add Bulk action for subscribing multiple customers to newsletter
*/
public function hookActionProductGridDefinitionModifier(array $params)
{
// $params['definition'] is instance of \PrestaShop\PrestaShop\Core\Grid\Definition\GridDefinition
$params['definition']->getBulkActions()->add(
(new SubmitBulkAction('subscribe_newsletter'))
->setName('Subscribe newsletter')
->setOptions([
// in most cases submit action should be implemented by module
'submit_route' => 'admin_my_module_customers_bulk_subscribe_newsletter',
])
);
}
但也什么也没发生。
我做错了什么?难道prestashop开始将模板切换到twig有问题吗?
参数
'submit_route'
是控制器的路由,用于处理批量操作。这意味着您必须创建一个基于 Symfony 的控制器。这种控制器的示例存在于标准 1.7 模块 ps_linklist
- LinkBlockController (ps_linklist\src\Controller\Admin\Improve\Design\LinkBlockController.php)
。
为了让 Prestashop 将此类控制器映射到特定路线,您还必须在模块的根文件夹中创建文件
config/routes.yml
。
您必须按以下格式定义您的路线:
admin_link_block_list:
path: /link-widget/list
methods: [GET]
defaults:
_controller: 'PrestaShop\Module\LinkList\Controller\Admin\Improve\Design\LinkBlockController::listAction'
如果使用路线
listAction
,将调用 admin_link_block_list
方法。
最后,控制器必须自动加载到 Prestashop 中。 最简单的原因是使用以下内容创建
composer.json
:
{
"autoload": {
"psr-4": {
"YourNamespace\\": "src/"
}
}
}
点击
composer install
,它将创建自动加载类映射。然后,只需确保您的控制器位于正确的命名空间中。例如,如果 SubscribtionController
中有 {your_module}\src\Controller\Admin\SubscribtionController.php
然后在您的SubscribtionController.php
中添加正确的命名空间:
namespace YourNamespace\Controller\Admin;
use Symfony\Component\HttpFoundation\Request;
class SubscribtionControllerextends FrameworkBundleAdminController
{
public function listAction(Request $request)
{
// do your work here
}
}
完成这些步骤后,批量操作应该出现在您想要的网格中。
在 8.0 中,我们将有一个完整的新产品列表页面,据我所知,它具有您需要的所有挂钩 😄 .
但是您的重点是 1.7.8.5 。不幸的是,在 1.7.8.x 版本上,我们仅提供错误修复,并且添加挂钩将是一项新功能。我们只提供错误修复,以尽可能保持版本稳定,因此我们不会在 1.7.8.6 中添加挂钩。
但是 8.0.0 应该会在夏天发布,所以很快你就应该拥有你需要的所有钩子了 👍
我将这个问题关闭为
对于 8.x 分支来说已经可以了(不要犹豫,检查新产品页面,看看你是否拥有你想要的所有钩子) 对于 1.7.8.x,我们无法添加新功能