Prestashop - 对产品网格进行批量操作

问题描述 投票:0回答:2

我需要在我的模块中的管理产品网格上为选定的产品创建操作。就像现在 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有问题吗?

prestashop prestashop-1.7 prestashop-modules
2个回答
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
    }
}

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


0
投票

在 8.0 中,我们将有一个完整的新产品列表页面,据我所知,它具有您需要的所有挂钩 😄 .

但是您的重点是 1.7.8.5 。不幸的是,在 1.7.8.x 版本上,我们仅提供错误修复,并且添加挂钩将是一项新功能。我们只提供错误修复,以尽可能保持版本稳定,因此我们不会在 1.7.8.6 中添加挂钩。

但是 8.0.0 应该会在夏天发布,所以很快你就应该拥有你需要的所有钩子了 👍

我将这个问题关闭为

对于 8.x 分支来说已经可以了(不要犹豫,检查新产品页面,看看你是否拥有你想要的所有钩子) 对于 1.7.8.x,我们无法添加新功能

https://github.com/PrestaShop/PrestaShop/issues/28239

© www.soinside.com 2019 - 2024. All rights reserved.