Tôi đang phát triển tiện ích mở rộng Magento2 có lưới quản trị viên được tạo bằng Thành phần danh sách giao diện người dùng. Lưới hiển thị các bản ghi (một danh sách các mục blog) tốt. Tiện ích mở rộng cho phép lưu các mục blog cho các lượt xem cửa hàng cụ thể giúp lưu blog_id cùng với store_id trong một bảng cơ sở dữ liệu riêng biệt. Bây giờ những gì tôi muốn làm là hiển thị một cột trong lưới với các mục blog hiển thị lượt xem cửa hàng được chọn cho mỗi mục blog.
Toàn bộ thiết lập khá giống với các trang CMS và cms_page_listing.xml. Có một cột trong blog_listing.xml của tôi cho chế độ xem cửa hàng như thế này:
<column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
<item name="sortable" xsi:type="boolean">false</item>
<item name="label" xsi:type="string" translate="true">Store View</item>
</item>
</argument>
</column>
Khi tải lưới, lỗi sau được hiển thị: " Lưu ý: Chỉ mục không xác định: store_id in .. \ eller \ magento \ module-store \ Ui \ Thành phần \ Liệt kê \ Cột \ Store.php trên dòng 82 "
Rõ ràng là không có store_id trong bộ sưu tập các mục blog mặc định khi nó được kết nối thông qua một bảng khác với store_id thực tế. Nhưng bộ sưu tập của tôi trông như thế này và nó phải ở trong đó: app \ code \ eller \ module \ Model \ ResourceModel \ AbstractCollection.php
protected function performAfterLoadBlog($tableName, $columnName) {
$items = $this->getColumnValues($columnName);
if (count($items)) {
$connection = $this->getConnection();
$select = $connection->select()->from(['blog_entity_store' => $this->getTable($tableName)])
->where('blog_entity_store.' . $columnName . ' IN (?)', $items);
$result = $connection->fetchPairs($select);
if ($result) {
foreach ($this as $item) {
$entityId = $item->getData($columnName);
if (!isset($result[$entityId])) {
continue;
}
if ($result[$entityId] == 0) {
$stores = $this->storeManager->getStores(false, true);
$storeId = current($stores)->getId();
$storeCode = key($stores);
} else {
$storeId = $result[$item->getData($columnName)];
$storeCode = $this->storeManager->getStore($storeId)->getCode();
}
$item->setData('_first_store_id', $storeId);
$item->setData('store_code', $storeCode);
$item->setData('store_id', [$result[$entityId]]);
}
}
}
}
protected function joinStoreRelationTable($tableName, $columnName) {
if ($this->getFilter('store')) {
$this->getSelect()->join(
['store_table' => $this->getTable($tableName)],
'main_table.' . $columnName . ' = store_table.' . $columnName,
[]
)->group(
'main_table.' . $columnName
);
}
parent::_renderFiltersBefore();
}
\ app \ code \ eller \ module \ Model \ ResourceModel \ Blog \ Collection.php
protected function _afterLoad() {
$this->performAfterLoadBlog('vendor_module_store', 'blog_id');
$this->_previewFlag = false;
return parent::_afterLoad();
}
protected function _renderFiltersBefore() {
$this->joinStoreRelationTable('vendor_module_store', 'blog_id');
}
Vì vậy, câu hỏi của tôi là, làm thế nào để tôi đi từ đây để cột store_id có thể được hiển thị với chế độ xem cửa hàng chính xác?