Grid 如何从销售订单网格页面中的“发货到自定义”字段中提取数据
我将自定义列添加到销售订单页面,该页面包含以下字段:订单号、名字、姓氏、街道名、门牌号、其他门牌号、电子邮件地址、邮政编码和区号。但我无法获取所有字段的值 以下是我已经尽了最大努力的水平。任何帮助都将不胜感激Grid 如何从销售订单网格页面中的“发货到自定义”字段中提取数据,grid,field,admin,Grid,Field,Admin,我将自定义列添加到销售订单页面,该页面包含以下字段:订单号、名字、姓氏、街道名、门牌号、其他门牌号、电子邮件地址、邮政编码和区号。但我无法获取所有字段的值 以下是我已经尽了最大努力的水平。任何帮助都将不胜感激 /Ahmad/OrderGrid/view/adminhtml/ui_component/sales_order_grid.xml <?xml version="1.0" encoding="UTF-8"?> <listing xmlns:xsi="http://www
/Ahmad/OrderGrid/view/adminhtml/ui_component/sales_order_grid.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">
<container name="listing_top">
<filters name="listing_filters">
<filterInput name="order_items">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="dataScope" xsi:type="string">order_items</item>
<item name="label" xsi:type="string" translate="true">Order items</item>
</item>
</argument>
</filterInput>
</filters>
</container>
<columns name="sales_order_columns">
<column name="order_items">
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
</item>
<item name="config" xsi:type="array">
<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
<item name="dataType" xsi:type="string">text</item>
<item name="align" xsi:type="string">left</item>
<item name="sortable" xsi:type="boolean">false</item>
<item name="label" xsi:type="string" translate="true">Order Items</item>
</item>
</argument>
</column>
<column name="first_name">
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
</item>
<item name="config" xsi:type="array">
<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
<item name="dataType" xsi:type="string">text</item>
<item name="align" xsi:type="string">left</item>
<item name="sortable" xsi:type="boolean">false</item>
<item name="label" xsi:type="string" translate="true">First Name</item>
</item>
</argument>
</column>
<column name="last_name">
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
</item>
<item name="config" xsi:type="array">
<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
<item name="dataType" xsi:type="string">text</item>
<item name="align" xsi:type="string">left</item>
<item name="sortable" xsi:type="boolean">false</item>
<item name="label" xsi:type="string" translate="true">Last Name</item>
</item>
</argument>
</column>
<column name="street_name">
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
</item>
<item name="config" xsi:type="array">
<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
<item name="dataType" xsi:type="string">text</item>
<item name="align" xsi:type="string">left</item>
<item name="sortable" xsi:type="boolean">false</item>
<item name="label" xsi:type="string" translate="true">Street Name</item>
</item>
</argument>
</column>
<column name="house_number">
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
</item>
<item name="config" xsi:type="array">
<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
<item name="dataType" xsi:type="string">text</item>
<item name="align" xsi:type="string">left</item>
<item name="sortable" xsi:type="boolean">false</item>
<item name="label" xsi:type="string" translate="true">House Number</item>
</item>
</argument>
</column>
<column name="additional _housenumber">
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
</item>
<item name="config" xsi:type="array">
<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
<item name="dataType" xsi:type="string">text</item>
<item name="align" xsi:type="string">left</item>
<item name="sortable" xsi:type="boolean">false</item>
<item name="label" xsi:type="string" translate="true">Additional Housenumber</item>
</item>
</argument>
</column>
<column name="emailaddress">
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
</item>
<item name="config" xsi:type="array">
<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
<item name="dataType" xsi:type="string">text</item>
<item name="align" xsi:type="string">left</item>
<item name="sortable" xsi:type="boolean">false</item>
<item name="label" xsi:type="string" translate="true">Email Address</item>
</item>
</argument>
</column>
<column name="postcode">
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
</item>
<item name="config" xsi:type="array">
<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
<item name="dataType" xsi:type="string">text</item>
<item name="align" xsi:type="string">left</item>
<item name="sortable" xsi:type="boolean">false</item>
<item name="label" xsi:type="string" translate="true">Post Code</item>
</item>
</argument>
</column>
<column name="landcode">
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
</item>
<item name="config" xsi:type="array">
<item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
<item name="dataType" xsi:type="string">text</item>
<item name="align" xsi:type="string">left</item>
<item name="sortable" xsi:type="boolean">false</item>
<item name="label" xsi:type="string" translate="true">Land Code</item>
</item>
</argument>
</column>
</columns>
</listing>
/Ahmad/OrderGrid/view/adminhtml/ui\u component/sales\u order\u grid.xml
到目前为止,您的代码看起来如何?你会犯什么错误?你还试了什么?在你要求别人花时间解决你的问题之前,请展示你的努力。@Jane:用代码更新了我的问题。。请检查也许你应该选择其他标签来吸引更多有经验的人在这里。比如magento、php和xml怎么样?接下来详细描述如何执行代码并添加生成的日志消息。也许做一些调试来检查代码偏离轨道的地方,并将这些见解添加到您的问题中。
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
<arguments>
<argument name="collections" xsi:type="array">
<item name="sales_order_grid_data_source" xsi:type="string">Ahmad\OrderGrid\Model\ResourceModel\Order\Grid\Collection</item>
</argument>
</arguments>
</type>
<virtualType name="Ahmad\OrderGrid\Model\ResourceModel\Order\Grid\Collection">
<arguments>
<argument name="mainTable" xsi:type="string">sales_order_grid</argument>
<argument name="resourceModel" xsi:type="string">Magento\Sales\Model\ResourceModel\Order</argument>
</arguments>
</virtualType>
</config>
<?php
namespace Ahmad\OrderGrid\Model\ResourceModel\Order\Grid;
use Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult;
/**
* Class Collection
* @package Ahmad\OrderGrid\Model\ResourceModel\Order\Grid
*/
class Collection extends SearchResult
{
/**
* Initialize the select statement.
*
* @return $this
*/
protected function _initSelect()
{
parent::_initSelect();
// Add the sales_order_item model to this collection
$this->join(
[$this->getTable('sales_order_item')],
"main_table.entity_id = {$this->getTable('sales_order_item')}.order_id",
[]
);
// Group by the order id, which is initially what this grid is id'd by
$this->getSelect()->group('main_table.entity_id');
return $this;
}
/**
* Add field to filter.
*
* @param string|array $field
* @param string|int|array|null $condition
* @return SearchResult
*/
public function addFieldToFilter($field, $condition = null)
{
if ($field === 'products' && !$this->getFlag('product_filter_added')) {
// Add the sales/order_item model to this collection
$this->getSelect()->join(
[$this->getTable('sales_order_item')],
"main_table.entity_id = {$this->getTable('sales_order_item')}.order_id",
[]
);
// Group by the order id, which is initially what this grid is id'd by
$this->getSelect()->group('main_table.entity_id');
// On the products field, let's add the sku and name as filterable fields
$this->addFieldToFilter([
"{$this->getTable('sales_order_item')}.sku",
"{$this->getTable('sales_order_item')}.name",
], [
$condition,
$condition,
]);
$this->setFlag('product_filter_added', 1);
}
return parent::addFieldToFilter($field, $condition);
}
/**
* Perform operations after collection load.
*
* @return SearchResult
*/
protected function _afterLoad()
{
$items = $this->getColumnValues('entity_id');
if (count($items)) {
$connection = $this->getConnection();
// Build out item sql to add products to the order data
$select = $connection->select()
->from([
'sales_order_item' => $this->getTable('sales_order_item'),
], [
'order_id',
'product_skus' => new \Zend_Db_Expr('GROUP_CONCAT(`sales_order_item`.sku SEPARATOR "|")'),
'product_names' => new \Zend_Db_Expr('GROUP_CONCAT(`sales_order_item`.name SEPARATOR "|")'),
'product_qtys' => new \Zend_Db_Expr('GROUP_CONCAT(`sales_order_item`.qty_ordered SEPARATOR "|")'),
])
->where('order_id IN (?)', $items)
->where('parent_item_id IS NULL') // Eliminate configurable products, otherwise two products show
->group('order_id');
$itemCollection = $connection->fetchAll($select);
// Loop through this sql an add items to related orders
foreach ($itemCollection as $item) {
$row = $this->getItemById($item['order_id']);
$productSkus = explode('|', $item['product_skus']);
$productQtys = explode('|', $item['product_qtys']);
$productNames = explode('|', $item['product_names']);
$html = '';
foreach ($productSkus as $index => $sku) {
$html .= sprintf('<div>%d x [%s] %s </div>', $productQtys[$index], $sku, $productNames[$index]);
}
$row->setOrderItems($html);
}
}
return parent::_afterLoad();
}
/**
* Get the record count.
*
* @return int
*/
public function getSize()
{
if ($this->_totalRecords === null) {
$sql = $this->getSelectCountSql();
$this->_totalRecords = count($this->getConnection()->fetchAll($sql, $this->_bindParams));
}
return (int) $this->_totalRecords;
}
}