当前位置: 技术文章>> magento2中的UI组件配置流程以及代码示例

文章标题:magento2中的UI组件配置流程以及代码示例
  • 文章分类: Magento
  • 10829 阅读
系统学习magento二次开发,推荐小册:《Magento中文全栈二次开发 》

本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。


在Magento 2中,使用UI组件需要按照以下流程进行配置:

创建一个XML文件,定义UI组件的配置信息。

创建一个PHP类,实现UI组件的数据提供功能(如果需要)。

创建一个或多个PHP类,实现UI组件的列渲染、过滤、排序等功能(如果需要)。

在需要使用UI组件的页面中引用XML文件。

以下是一个完整的UI组件的配置示例:

创建XML文件

在Magento 2中,UI组件的XML文件必须包含一个声明和组件的基本配置。例如,下面是一个名为my_module_listing.xml的XML文件,定义了一个名为my_module_listing的UI组件:

<?xml version="1.0" encoding="UTF-8"?>
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <argument name="data" xsi:type="array">
        <item name="js_config" xsi:type="array">
            <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
        </item>
        <item name="spinner" xsi:type="string">my_module_loading</item>
    </argument>
    <dataSource name="my_module_data_source">
        <argument name="dataProvider" xsi:type="configurableObject">
            <argument name="class" xsi:type="string">My\Module\Model\DataProvider</argument>
            <argument name="name" xsi:type="string">my_module_data_source</argument>
            <argument name="primaryFieldName" xsi:type="string">id</argument>
            <argument name="requestFieldName" xsi:type="string">id</argument>
        </argument>
    </dataSource>
    <columns name="my_module_columns">
        <column name="id" class="My\Module\Ui\Component\Listing\Column\Id">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="sorting" xsi:type="string">asc</item>
                    <item name="label" xsi:type="string" translate="true">ID</item>
                </item>
            </argument>
        </column>
        <column name="name" class="My\Module\Ui\Component\Listing\Column\Name">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="sorting" xsi:type="string">asc</item>
                    <item name="label" xsi:type="string" translate="true">Name</item>
                </item>
            </argument>
        </column>
    </columns>
    <listingToolbar name="listing_top">
        <settings>
            <sticky>true</sticky>
        </settings>
        <filters name="listing_filters">
            <filterSelect name="store_id" provider="${ $.parentName }">
                <argument name="data" xsi:type="array">
                    <item name="config" xsi:type="array">
                        <item name="caption" xsi:type="string" translate="true">--Select Store--</item>
                        <item name="dataScope" xsi:type="string">store_id</item>
                        <item name="label" xsi:type="string" translate="true">Store</item>
                        <item name="placeholder" xsi:type="string" translate="true"></item>
                        <item name="multiple" xsi:type="boolean">false</item>
                        <item name="levelsVisibility" xsi:type="number">1</item>
                        <item name="provider" xsi:type="string">my_module_listing.my_module_listing_data_source</item>
                        <item name="data" xsi:type="array">
                            <item name="config" xsi:type="array">
                                <item name="filterOptions" xsi:type="boolean">true</item>
                                <item name="showCheckbox" xsi:type="boolean">true</item>
                                <item name="disableLabel" xsi:type="boolean">true</item>
                                <item name="multiple" xsi:type="boolean">false</item>
                                <item name="sortOrder" xsi:type="number">20</item>
                                <item name="levelsVisibility" xsi:type="number">1</item>
                                <item name="caption" xsi:type="string" translate="true">--Select Store--</item>
                                <item name="placeholder" xsi:type="string" translate="true">--Please Select--</item>
                                <item name="chipsEnabled" xsi:type="boolean">true</item>
                                <item name="showSelectedInPopup" xsi:type="boolean">false</item>
                            </item>
                        </item>
            </argument>
            <settings>
                <options class="Magento\Store\Ui\Component\Listing\Column\Store\Options"/>
                <caption translate="true">--Select Store--</caption>
                <label translate="true">Store</label>
                <dataScope>store_id</dataScope>
            </settings>
        </filterSelect>
    </filters>
</listingToolbar>
</listing>


在上面的XML文件中,可以看到以下重要的配置:

<listing> 标签:包含了UI组件的所有配置信息。

<dataSource> 标签:定义了UI组件的数据源。

<columns> 标签:定义了UI组件的列信息。

<listingToolbar> 标签:定义了UI组件的工具栏(包括过滤器和分页等)。

创建数据提供类

下面是一个简单的数据提供类DataProvider.php,该类用于从数据源获取数据并返回:

<?php
namespace My\Module\Model;
use Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface;
use My\Module\Model\ResourceModel\MyModule\CollectionFactory;
class DataProvider implements DataProviderInterface
{
    protected $collection;
    protected $loadedData;
    public function __construct(CollectionFactory $collectionFactory)
    {
        $this->collection = $collectionFactory->create();
    }
    public function getData()
    {
        if (isset($this->loadedData)) {
            return $this->loadedData;
        }
        $items = $this->collection->getItems();
        foreach ($items as $item) {
            $this->loadedData[$item->getId()] = $item->getData();
        }
        return $this->loadedData;
    }
}


推荐文章