Prestashop-产品网格上的批量操作



我需要在模块的管理产品网格上为所选产品创建操作。像现在已经预先实现了产品组删除、复制、激活/停用。我第一次尝试通过官方文档为客户网格创建批量操作(https://devdocs.prestashop.com/1.7/development/components/grid/tutorials/work-with-bulk-actions/)。

  1. 在模块类的方法install((中注册钩子
$this->registerHook('actionCustomerGridDefinitionModifier')
  1. 将批量操作的钩子方法复制到我的模块类
/**
* Use hook to add Bulk action for subscribing multiple customers to newsletter
*/
public function hookActionCustomerGridDefinitionModifier(array $params)
{
// $params['definition'] is instance of PrestaShopPrestaShopCoreGridDefinitionGridDefinition
$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',
]) 
);
}

但不起作用,批量操作中没有显示任何新内容。

然后我尝试同样的产品:

  1. 在模块类的方法install((中注册钩子
$this->registerHook('actionProductGridDefinitionModifier')
  1. 将批量操作的钩子方法复制到我的模块类
/**
* Use hook to add Bulk action for subscribing multiple customers to newsletter
*/
public function hookActionProductGridDefinitionModifier(array $params)
{
// $params['definition'] is instance of PrestaShopPrestaShopCoreGridDefinitionGridDefinition
$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开始将模板转换为trick,这会是一个问题吗?

参数'submit_route'是到控制器的路由,该控制器处理批量操作。这意味着您必须创建一个基于Symfony的控制器。这种控制器的例子存在于标准1.7模块ps_linklist-LinkBlockController (ps_linklistsrcControllerAdminImproveDesignLinkBlockController.php)中。

为了让Prestashop将这些控制器映射到特定的路由,您还必须在模块的根文件夹中创建文件config/routes.yml。您必须以以下格式定义您的路线:

admin_link_block_list:
path: /link-widget/list
methods: [GET]
defaults:
_controller: 'PrestaShopModuleLinkListControllerAdminImproveDesignLinkBlockController::listAction'

如果使用路由admin_link_block_list,则将调用listAction方法。

最后,控制器必须自动加载到Prestashop中。最简单的原因是创建具有以下内容的composer.json

{
"autoload": {
"psr-4": {
"YourNamespace\": "src/"
}
}
}

点击composer install,它将创建自动加载类映射。然后,只需确保您的控制器位于正确的命名空间中。例如,如果{your_module}srcControllerAdminSubscribtionController.php中有SubscribtionController然后在SubscribtionController.php:中添加正确的命名空间

namespace YourNamespaceControllerAdmin;

use SymfonyComponentHttpFoundationRequest;

class SubscribtionControllerextends FrameworkBundleAdminController
{
public function listAction(Request $request)
{
// do your work here
}
}

在这些步骤之后,批量操作应该会出现在您想要的网格中。

最新更新