2017-05-16 7 views
1

管理販売注文グリッドコレクションをカスタマイズしようとしています。 sale_orderカスタムstore_managerというカスタムを作成しました。これらの店舗管理者は管理者ユーザーです(例: 'manager1'、 'manager2')。Magento 2:管理販売注文グリッドコレクションをカスタマイズするにはどうすればいいですか?

1)注文は、手動で「マネージャ1」または「マネージャ2」に割り当てられている - この部分を

2に行われている)今私は売り注文グリッドコレクションにフィルタを設定しようとしていますので、管理者がログインしたときそこには彼らだけがそこに命令を見ることができます。

Magento 1では、この要件のためにsales_order_grid_collection_load_before,sales_order_grid_collection_load_afterがあります。

Magento 2ではこのようなイベントが試行されましたが、成功しませんでした。

マイクエリ:

は完全な私の要件を満たしMagentoの1で(sales_order_grid_collection_load_after)などのいずれかのようなイベントがありますか?

フィルタを販売注文グリッドコレクションに設定できる他の方法はありますか?

注:私はすでにこれをgoogleで検索していますが、完璧な解決策はありませんでした。

答えて

1

私はsales_order_grid_collection_load_afterとsales_order_grid_collection_load_beforeのイベントを検索して、受注グリッドをカスタマイズしていました。

Magento 2にはこのようなイベントはありません。Magento 2 Adminのすべてのグリッドをレンダリングするための一般的なイベント 'core_collection_abstract_load_after'または 'core_collection_abstract_load_before'ディスパッチ。

_renderFiltersBefore()関数をオーバーライドして、受注グリッドに列を追加したり、sales_order_gridを使用してテーブルを結合することができます。ここでの手順は以下のとおりです。

ステップ1: /アプリ/コードで販売注文グリッドデータソースのベンダー/モジュールの/ 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"> 
<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">Vendor\Module\Model\ResourceModel\Order\Grid\Collection</item> 
     </argument> 
    </arguments> 
</type> 

ステップ2クラスを指定します:)が_renderFiltersBeforeを(上書きするアプリ/コード/ベンダー/モジュール/モデル/ ResourceModel /発注/グリッドに

<?php 
    namespace Vendor\Module\Model\ResourceModel\Order\Grid; 

    use Magento\Sales\Model\ResourceModel\Order\Grid\Collection as OriginalCollection; 
    use Magento\Framework\Data\Collection\Db\FetchStrategyInterface as FetchStrategy; 
    use Magento\Framework\Data\Collection\EntityFactoryInterface as EntityFactory; 
    use Magento\Framework\Event\ManagerInterface as EventManager; 
    use Psr\Log\LoggerInterface as Logger; 
    class Collection extends OriginalCollection 
    { 
     protected $_authSession; 
     public function __construct(
      EntityFactory $entityFactory, 
      Logger $logger, 
      FetchStrategy $fetchStrategy, 
      EventManager $eventManager, 
      \Magento\Backend\Model\Auth\Session $authSession 
     ) 
     {   
      $this->_authSession = $authSession; 
      parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager); 
     } 

     protected function _renderFiltersBefore() { 
      $user = $this->_authSession->getUser(); 
      $joinTable = $this->getTable('your_table'); 
      $this->getSelect()->joinLeft($joinTable, 'main_table.entity_id = your_table.order_id', ['user_id']); 
      parent::_renderFiltersBefore(); 
     } 
    } 
?>  
をコレクションクラスを追加します。

ステップ3 - オプション: 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"> 
    <columns name="sales_order_columns"> 
     <column name="user_id"> 
      <argument name="data" xsi:type="array"> 
       <item name="config" xsi:type="array"> 
        <item name="filter" xsi:type="string">text</item> 
        <item name="label" xsi:type="string" translate="true">User ID</item> 
       </item> 
      </argument> 
     </column> 
    </columns> 
</listing> 
/アプリ/コード/ベンダー/モジュール/ビューで標準のグリッド・コンポーネントを変更し、受注グリッドのユーザIDの新しい列を表示するには

リファレンスはhere

関連する問題