Bạn cần phải thiết lập một giá trị cho tham số render_url trên insertListing và sau đó cập nhật này bên URL của nhà cung cấp dữ liệu của bạn. Cần thực hiện hành động này hai lần vì bạn sẽ cần phải có một Nhà cung cấp dữ liệu cho thành phần biểu mẫu của mình và một hành động cụ thể khác cho thành phần liệt kê.
1 - Khai báo đúng của thành phần insertListing:
(Nhà cung cấp / Mô-đun / view / adminhtml / ui_component / eller_module_form.xml)
<insertListing name="testInsertListing">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="dataLinks" xsi:type="array">
<item name="imports" xsi:type="boolean">false</item>
<item name="exports" xsi:type="boolean">true</item>
</item>
<item name="autoRender" xsi:type="boolean">true</item>
<!-- the namespace attribute should be the name of the listing XML file -->
<item name="ns" xsi:type="string">vendor_module_listing</item>
<!-- This is the default render_url. We are going to update this value
in the DataProvider -->
<item name="render_url" xsi:type="url" path="mui/index/render"/>
<!-- Here we add the parameters that we want to add to the render_url. -->
<item name="filter_url_params" xsi:type="array">
<!-- You can add as many as you want -->
<item name="id" xsi:type="string">*</item>
</item>
<item name="storageConfig" xsi:type="array">
<item name="indexField" xsi:type="string">id</item>
</item>
</item>
</argument>
</insertListing>
2 - Thêm các thay đổi sau vào Nhà cung cấp dữ liệu của trang Biểu mẫu. Điều này sẽ thay đổi render_url bằng cách thêm tham số "id" vào cuối URL:
(Nhà cung cấp / Mô-đun / Ui / DataProvider / [đường dẫn đến dữ liệu của bạn-nhà cung cấp.php] )
- Thêm lớp RequestInterface:
- Khai báo thuộc tính $ request trên lớp Nhà cung cấp dữ liệu của bạn.
- Thêm một đối tượng RequestInterface vào phương thức __construct; gọi phương thức chuẩn bịUpUpateUrl ().
- Thêm chuẩn bịUpUpateUrl () vào lớp của bạn:
Lưu ý: không sao chép / dán toàn bộ khối bên dưới vào Nhà cung cấp dữ liệu của bạn. Thay vào đó, hãy chọn các phần bị thiếu trong mã của bạn
<?php use Magento\Framework\App\RequestInterface;
use Magento\Framework\UrlInterface;
class MyListingDataProvider extends AbstractDataProvider
{
protected $data;
protected $meta;
protected $collection;
protected $urlBuilder;
public function __construct(
string $name,
string $primaryFieldName,
string $requestFieldName,
Collection $collection,
RequestInterface $request,
UrlInterface $urlBuilder,
array $meta = [],
array $data = []
)
{
$this->collection = $collection;
$this->data = $data;
$this->meta = $meta;
$this->request = $request;
$this->urlBuilder = $urlBuilder;
$this->prepareUpdateUrl();
parent::__construct($name, $primaryFieldName, $requestFieldName, $this->meta, $data);
}
protected function prepareUpdateUrl()
{
$id = $this->request->getParam('id');
$this->meta = array_replace_recursive(
$this->meta,
[
'testInsertListing' =>
['arguments' => [
'data' => [
'config' => [
'render_url' => $this->urlBuilder
->getUrl('mui/index/render/id/' . $id),
'update_url' => $this->urlBuilder->getUrl('mui/index/render/id/' . $id)
]
],
]
]
]
);
}
//Implement the other methods you need
}
3 - Cập nhật thành phần danh sách của bạn. Nó phải có một tham số updateUrl bên trong thành phần DataSource:
(Nhà cung cấp / Mô-đun / lượt xem / adminhtml / ui_component / eller_module_listing.xml)
<?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="provider" xsi:type="string">
vendor_module_listing.module_listing_data_source
</item>
</item>
</argument>
<settings>
<spinner>vendor_module_listing_columns</spinner>
<deps>
<dep>vendor_module_listing.module_listing_data_source</dep>
</deps>
</settings>
<dataSource name="module_listing_data_source">
<argument name="dataProvider" xsi:type="configurableObject">
<argument name="class" xsi:type="string">Vendor\Module\Ui\DataProvider\[name-of-your-listing-data-provider-class]</argument>
<argument name="name" xsi:type="string">module_listing_data_source</argument>
<argument name="primaryFieldName" xsi:type="string">id</argument>
<argument name="requestFieldName" xsi:type="string">id</argument>
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
<item name="update_url" xsi:type="url" path="mui/index/render"/>
<item name="storageConfig" xsi:type="array">
<item name="indexField" xsi:type="string">id</item>
</item>
<!-- fields to be added to the URL when retrieving the data -->
<item name="filter_url_params" xsi:type="array">
<item name="id" xsi:type="string">*</item>
</item>
</item>
</argument>
</argument>
</dataSource>
<columns name="vendor_module_listing_columns">
<!-- Declare your columns here -->
</columns>
</listing>
4 - Cập nhật Nhà cung cấp dữ liệu danh sách của bạn để thay đổi updateUrl trên thành phần liệt kê ở trên
(Nhà cung cấp / Mô-đun / Ui / DataProvider / [path-to-your-LISTING-data-day.php] )
Lưu ý: không sao chép / dán toàn bộ khối bên dưới vào Nhà cung cấp dữ liệu của bạn. Thay vào đó, hãy chọn các phần bị thiếu trong mã của bạn
<?php
use Magento\Framework\App\RequestInterface;
class MyListingDataProvider extends AbstractDataProvider
{
protected $request;
public function __construct(
string $name,
string $primaryFieldName,
string $requestFieldName,
Collection $collection,
RequestInterface $request,
array $meta = [],
array $data = []
)
{
$this->collection = $collection;
$this->request = $request;
$this->data = $data;
parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data);
$this->prepareUpdateUrl();
}
protected function prepareUpdateUrl()
{
if (!isset($this->data['config']['filter_url_params'])) {
return;
}
foreach ($this->data['config']['filter_url_params']
as $paramName => $paramValue) {
if ('*' == $paramValue) {
$paramValue = $this->request->getParam($paramName);
}
if ($paramValue) {
$this->data['config']['update_url'] = sprintf(
'%s%s/%s/',
$this->data['config']['update_url'],
$paramName,
$paramValue
);
}
}
}
//Get the parameter "id" inside of the getData() method:
public function getData()
{
$item_id = $this->request->getParam('id');
//Apply a filter to your collection using $item_id
/**
Return your data in the appropriate format
$totalRecords should be an integer
$items should be an array
*/
return array('totalRecords' => $totalRecords, 'items' => $items);
}
}
Hãy cho tôi biết nếu bạn vẫn có bất kỳ vấn đề. Tôi có thể không trả lời được các bình luận nhưng tôi có thể cập nhật câu trả lời của mình.