当前位置: 首页 > 知识库问答 >
问题:

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

昌琪
2023-03-14

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

  1. 在我的模块类中注册方法install()中的钩子
$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',
                    ]) 
            );
    }

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

然后我尝试同样的产品:

  1. 在我的模块类中注册方法install()中的钩子
$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可能是个问题吗?

共有1个答案

郑乐池
2023-03-14

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

为了让Prestashop将这些控制器映射到特定的路由,您还必须在模块的根文件夹中创建fileconfig/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安装,它将创建自动加载类映射。然后,只需确保控制器位于正确的命名空间中。例如,如果在{your_module}\src\Controller\Admin\SubscribtionController中有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
    }
}

完成这些步骤后,批量操作应显示在所需的网格中。

 类似资料:
  • 我发现所有产品的数量不等于< code>home类别中的产品数量。这是因为在添加产品时,并不总是选择最大的父类别。因此,有些产品属于< code>home,而有些则不属于。 虽然我需要为类别<code>主页<code>页面显示正确数量的产品,但我在数据库中查找了包含类别的列,但在<code>ps_product</code>或<code>ps_product_lang</code>中未找到它们。

  • 我正在为Prestashop编写一个模块,该模块覆盖AdminProductsController,并向BackOffice产品视图中的批量操作菜单中添加另外两个操作。这是我在重写类的构造中添加批量操作的代码 结果是这样的 我想在“删除选定项”和“导出选定项”之间添加分隔符。我的意思是,在我新添加的条目之前添加它。我怎样才能做到这一点?

  • 你好,堆栈溢出社区。 我有一个问题的产品页面在我的prestashop后端办公室。我会在附件截图上显示一切。 例如:我尝试添加新产品:-我无法从标准产品切换到具有组合的产品-要选择的类别显示不正确-brutto价格计算不正确-没有供应商可供选择 尝试添加新产品时的控制台日志: 我已经尝试过:-在互联网上进行了大量搜索,但我没有找到解决方案(除了类似的未解决问题)-将admin文件夹覆盖到原始文件夹

  • 我想从一个类别中获得新产品,所以我试图改变控制器。 在prestashop 1.7中 里面有这个功能 我把它改成了 但它仍在展示所有产品,而不是该类别的产品。 我决定用不同的方式, 在产品中。我写的php 在我的控制器中,我从product controller中的新函数中获取产品id,然后获取产品属性 它正在工作,但我认为与相比,操作太多了。

  • 我试图获取正在BackOffice(产品页面)中编辑的产品的产品ID。那里使用的控制器是AdminProducts。我试图通过使用工具类来获取值,就像我们在前台获取产品ID一样,但这在这里不起作用。这是我在那个页面上得到的链接,经过分析,你可以看到这里没有产品标识。虽然1是产品ID,但这意味着没有像prestashop 1.6中那样指定。我使用prestashop 1.7。任何想法,我如何可以在产

  • 当我尝试打开我的后台产品页面时,它只显示空白的白色页面。 前台没有问题。 当我启用调试模式时,当我尝试打开前台时,它会显示此消息 在后台没有显示任何产品,但没有空白页。 请帮帮我。我使用prestashop 1.7