Antworten:
Danke an @Dhrumin.
Mein Arbeitscode hier:
app/code/[Vendor]/[Module]/registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'[Vendor]_[Module]',
__DIR__
);
app/code/[Vendor]/[Module]/etc/module.xml
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
<module name="[Vendor]_[Module]" setup_version="0.0.1"/>
</config>
app/code/[Vendor]/[Module]/etc/di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid" type="[Vendor]\[Module]\Block\Adminhtml\Order\Create\Search\Grid" />
</config>
app/code/[Vendor]/[Module]/Block/Adminhtml/Order/Create/Search/Grid.php
<?php
namespace [Vendor]\[Module]\Block\Adminhtml\Order\Create\Search;
class Grid extends \Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid
{
/**
* Grid constructor.
* @param \Magento\Backend\Block\Template\Context $context
* @param \Magento\Backend\Helper\Data $backendHelper
* @param \Magento\Catalog\Model\ProductFactory $productFactory
* @param \Magento\Catalog\Model\Config $catalogConfig
* @param \Magento\Backend\Model\Session\Quote $sessionQuote
* @param \Magento\Sales\Model\Config $salesConfig
* @param array $data
*/
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Backend\Helper\Data $backendHelper,
\Magento\Catalog\Model\ProductFactory $productFactory,
\Magento\Catalog\Model\Config $catalogConfig,
\Magento\Backend\Model\Session\Quote $sessionQuote,
\Magento\Sales\Model\Config $salesConfig,
array $data = []
)
{
$this->_productFactory = $productFactory;
$this->_catalogConfig = $catalogConfig;
$this->_sessionQuote = $sessionQuote;
$this->_salesConfig = $salesConfig;
parent::__construct($context, $backendHelper, $productFactory, $catalogConfig, $sessionQuote, $salesConfig, $data);
}
/**
* Prepare collection to be displayed in the grid
*
* @return $this
*/
protected function _prepareCollection()
{
$attributes = $this->_catalogConfig->getProductAttributes();
/* @var $collection \Magento\Catalog\Model\ResourceModel\Product\Collection */
$collection = $this->_productFactory->create()->getCollection();
$collection->setStore(
$this->getStore()
)->addAttributeToSelect(
$attributes
)->addAttributeToSelect(
'sku'
)->addStoreFilter()->addAttributeToFilter(
'type_id',
$this->_salesConfig->getAvailableProductTypes()
)->addAttributeToSelect(
'gift_message_available'
);
$collection->joinField(
'barcode_qty',
'cataloginventory_stock_item',
'qty',
'product_id=entity_id',
'{{table}}.stock_id=1 AND {{table}}.website_id=0',
'left'
);
$this->setCollection($collection);
$p = get_parent_class($this);
$pp = get_parent_class($p);
return $pp::_prepareCollection();
}
/**
* Prepare columns
*
* @return $this
*/
protected function _prepareColumns()
{
$this->addColumn(
'entity_id',
[
'header' => __('ID'),
'sortable' => true,
'header_css_class' => 'col-id',
'column_css_class' => 'col-id',
'index' => 'entity_id'
]
);
$this->addColumn(
'barcode_qty',
[
'header' => __('Quantity'),
'type' => 'number',
'index' => 'barcode_qty'
]
);
$this->addColumn(
'name',
[
'header' => __('Product'),
'renderer' => \Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid\Renderer\Product::class,
'index' => 'name'
]
);
$this->addColumn('sku', ['header' => __('SKU'), 'index' => 'sku']);
$this->addColumn(
'price',
[
'header' => __('Price'),
'column_css_class' => 'price',
'type' => 'currency',
'currency_code' => $this->getStore()->getCurrentCurrencyCode(),
'rate' => $this->getStore()->getBaseCurrency()->getRate($this->getStore()->getCurrentCurrencyCode()),
'index' => 'price',
'renderer' => \Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid\Renderer\Price::class
]
);
$this->addColumn(
'in_products',
[
'header' => __('Select'),
'type' => 'checkbox',
'name' => 'in_products',
'values' => $this->_getSelectedProducts(),
'index' => 'entity_id',
'sortable' => false,
'header_css_class' => 'col-select',
'column_css_class' => 'col-select'
]
);
$this->addColumn(
'qty',
[
'filter' => false,
'sortable' => false,
'header' => __('Quantity'),
'renderer' => \Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid\Renderer\Qty::class,
'name' => 'qty',
'inline_css' => 'qty',
'type' => 'input',
'validate_class' => 'validate-number',
'index' => 'qty'
]
);
$p = get_parent_class($this);
$pp = get_parent_class($p);
return $pp::_prepareColumns();
}
}
Ich hoffe es hilft.
_prepareColumns
Funktion aktualisiert . Wir haben die gesamte Kontrolle über Folgendes übernommen: D Sie müssen hier also keine ui_component überschreiben.
Ja, ich finde die Lösung für meine Frage. Öffnen Sie die folgende Datei für den Pfad und überschreiben Sie sie in Ihrem benutzerdefinierten Modul.
vendor/magento/module-sales/Block/Adminhtml/Order/Create/Search/Grid.php
Und fügen Sie den folgenden Code in der _prepareCollection()
Funktion hinzu:
$collection->joinField(
'qty_in_stock',
'cataloginventory_stock_item',
'qty',
'product_id=entity_id',
'{{table}}.stock_id=1',
'left'
);
Fügen Sie nun den folgenden Code in die _prepareColumns
Funktion ein.
$this->addColumn(
'qty_in_stock',
[
'header' => __('Quantity In Stock'),
'type' => 'number',
'index' => 'qty_in_stock'
]
);
Hoffe es hilft dir.
Mithilfe von können wir eine neue benutzerdefinierte Spalte im Admin-Produktraster hinzufügen product_listing.xml
.
Erstellen wir eine Datei view\adminhtml\ui_component\product_listing.xml
mit folgendem Inhalt:
<?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_field">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">text</item>
<item name="add_field" xsi:type="boolean">true</item>
<item name="label" xsi:type="string" translate="true">Custom Field</item>
<item name="sortOrder" xsi:type="number">75</item>
</item>
</argument>
</column>
</columns>
</listing>
Löschen Sie abschließend den Cache und überprüfen Sie die Ergebnisse.
Schauen Sie sich @hayatbiralem Answer an. Danke
@ Hayatbiralem
Meine di.xml-Datei war gut, weil die leere Spalte gut erstellt wurde. Die Sache ist jedoch, dass keine Daten aus dem verbundenen Feld abgerufen werden konnten.
<?php
/**
* Created by -
* Date: 13/05/2015
* Time: 5:02 PM
*/
namespace Kbethos\Ordercreateqty\Block\Adminhtml;
use Magento\Framework\View\Element\Template;
class Grid extends \Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid
{
protected function _prepareCollection()
{
$attributes = $this->_catalogConfig->getProductAttributes();
/* @var $collection \Magento\Catalog\Model\ResourceModel\Product\Collection */
$collection = $this->_productFactory->create()->getCollection();
$collection
->setStore(
$this->getStore()
)->addAttributeToSelect(
$attributes
)->addAttributeToSelect(
'sku'
)->addStoreFilter()->addAttributeToFilter(
'type_id',
$this->_salesConfig->getAvailableProductTypes()
)->addAttributeToSelect(
'gift_message_available'
)->joinField(
'qty_in_stock',
'cataloginventory_stock_item',
'qty',
'product_id=entity_id',
'{{table}}.stock_id=1',
'left'
);
$this->setCollection($collection);
return parent::_prepareCollection();
}
protected function _prepareColumns()
{
$this->addColumn(
'entity_id',
[
'header' => __('ID'),
'sortable' => true,
'header_css_class' => 'col-id',
'column_css_class' => 'col-id',
'index' => 'entity_id'
]
);
$this->addColumn(
'name',
[
'header' => __('Product'),
'renderer' => 'Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid\Renderer\Product',
'index' => 'name'
]
);
$this->addColumn('sku', ['header' => __('SKU'), 'index' => 'sku']);
$this->addColumn(
'price',
[
'header' => __('Price'),
'column_css_class' => 'price',
'type' => 'currency',
'currency_code' => $this->getStore()->getCurrentCurrencyCode(),
'rate' => $this->getStore()->getBaseCurrency()->getRate($this->getStore()->getCurrentCurrencyCode()),
'index' => 'price',
'renderer' => 'Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid\Renderer\Price'
]
);
$this->addColumn(
'in_products',
[
'header' => __('Select'),
'type' => 'checkbox',
'name' => 'in_products',
'values' => $this->_getSelectedProducts(),
'index' => 'entity_id',
'sortable' => false,
'header_css_class' => 'col-select',
'column_css_class' => 'col-select'
]
);
/*20171031 add show qty */
$this->addColumn(
'qty_in_stock',
[
'header' => __('Quantity In Stock'),
'type' => 'number',
'index' => 'qty_in_stock'
]
);
/*20171031 add show qty */
$this->addColumn(
'qty',
[
'filter' => false,
'sortable' => false,
'header' => __('Qty to Order'),
'renderer' => 'Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid\Renderer\Qty',
'name' => 'qty',
'inline_css' => 'qty',
'type' => 'input',
'validate_class' => 'validate-number',
'index' => 'qty'
]
);
return parent::_prepareColumns();
}
}
return parent::_prepareCollection();
Sie die Zeilen verwenden müssen, die mit$p = get_parent_class($this);