首页 > 其他分享 >Magento2.4.5 在后台产品列表添加自定义列

Magento2.4.5 在后台产品列表添加自定义列

时间:2023-03-15 15:35:01浏览次数:40  
标签:自定义 Column 列表 productRepository Magento2.4 Magento dataSource Listing

要在Magento 2.4.5后台产品展示列表中添加自定义列,请按照以下步骤进行操作:

1. 创建一个自定义模块。

2. 在自定义模块的 "view/adminhtml/ui_component/product_listing.xml" 文件中添加以下代码:

<?xml version="1.0"?>
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <columns name="product_columns" class="Magento\Catalog\Ui\Component\Listing\Columns">
        <column name="custom_column" class="[Vendor]\[Module]\Ui\Component\Listing\Column\CustomColumn">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="sortOrder" xsi:type="number">999</item>
                    <item name="filter" xsi:type="string">text</item>
                    <item name="label" xsi:type="string" translate="true">Custom Column</item>
                </item>
            </argument>
        </column>
    </columns>
</listing>

其中,`[Vendor]\[Module]` 是你的自定义模块名称。`CustomColumn` 是自定列的类名。

3. 创建自定义列的类 `[Vendor]\[Module]\Ui\Component\Listing\Column\CustomColumn`。该类需要扩展 `Magento\Ui\Component\Listing\Columns\Column` 类,并实现 `_prepareDataSource()` 方法。例如:

<?php

namespace [Vendor]\[Module]\Ui\Component\Listing\Column;


use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Framework\View\Element\UiComponent\ContextInterface;
use Magento\Framework\View\Element\UiComponentFactory;
use Magento\Ui\Component\Listing\Columns\Column;


class CustomColumn extends Column
{
  protected $productRepository;


  public function __construct(
    ContextInterface $context,
    UiComponentFactory $uiComponentFactory,
    ProductRepositoryInterface $productRepository,
    array $components = [],
    array $data = []
  ) {
    $this->productRepository = $productRepository;
    parent::__construct($context, $uiComponentFactory, $components, $data);
  }


  public function prepareDataSource(array $dataSource)
  {
    if (isset($dataSource['data']['items'])) {
      foreach ($dataSource['data']['items'] as &$item) {
        $product = $this->productRepository->getById($item['entity_id']);
        $item[$this->getData('name')] = $product->getCustomAttribute('your_attribute_code')->getValue();
      }
    }
    return $dataSource;
  }
}

 

4. 清除 Magento 的 cache。

现在,你应该在后台产品列表中看到了一个名为 "Custom Column" 的列,该列显示了每个产品的 "your_attribute_code" 属性值。

标签:自定义,Column,列表,productRepository,Magento2.4,Magento,dataSource,Listing
From: https://www.cnblogs.com/Onionlog/p/17218677.html

相关文章