0

我需要在我的模块中的管理产品网格上为选定的产品创建操作。就像现在 presta 实施了产品组删除、复制、激活/停用。我首先尝试通过官方文档(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 \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',
                    ]) 
            );
    }

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

然后我尝试与产品相同:

  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 \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 会不会是一个问题?

4

1 回答 1

0

参数'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
    }
}

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

于 2021-08-26T21:09:54.660 回答