2016-09-20 2 views
0

Magento 2.1ストア用のカスタムモジュールがいくつか開発され、一部のCMSページのコンテンツのスマートな管理が可能になりました。Magento 2.1カスタムモジュールの関係

私はこのチュートリアルhttps://www.ashsmith.io/magento2/module-from-scratch-introduction/とこの例ではhttps://github.com/ashsmith/magento2-blog-module-tutorialを使用しました。

ここではよくある質問のリストがありますが、各FAQはFAQカテゴリ(カタログカテゴリではありません)に属しています。 ここには2つのカスタムモジュールがあります(FAQカテゴリとFAQ質問)。 FAQカテゴリにはタイトルフィールドしかありません。 FAQフィールドには、タイトルフィールド、回答(テキストエディタ)フィールド、FAQ質問ドロップダウンリスト(すべての有効なFAQカテゴリのリストを含む選択ボックス)があります。

私はこれをどうやって実現するのか分かりません。

これを行う正しい方法は何ですか?特に管理部分。

ありがとうございました

+0

Stack Overflowは[プログラミング関連](http://stackoverflow.com/help/on-topic)のQ&Aサイトであるため、このトピックをトピックとしてクローズすることにしました。あなたの質問はプログラミングに関するものではありません。おそらくあなたは代わりにhttp://magento.stackexchange.comに投稿する必要がありますか? – Enigmativity

答えて

0

フィールドに参加するとします。あなたはdi.xmlで仮想タイプを使用することによってこれを行うことはできませんので、あなたのファイル

#FILEなど/ di.xmlリソース・モデルファイルで

<type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory"> 
     <arguments> 
      <argument name="collections" xsi:type="array"> 
       <item name="namespace_modulename_listing_data_source" xsi:type="string">Namespace\Modulename\Model\Resource\Modulename\Grid\Collection</item> 
      </argument> 
     </arguments> 
</type> 
<type name="Namespace\Modulename\Model\Resource\Modulename\Grid\Collection"> 
    <arguments> 
     <argument name="mainTable" xsi:type="string">tablename</argument> 
     <argument name="eventPrefix" xsi:type="string">namespace_modulename_grid_collection</argument> 
     <argument name="eventObject" xsi:type="string">namespace_grid_collection</argument> 
     <argument name="resourceModel" xsi:type="string">Namespace\Modulename\Model\Resource\Modulename</argument> 
    </arguments> 
</type> 

を次の手順を実行して更新する必要がありますモデル/リソース/ MODULENAME/Collection.php

<?php 
namespace Namespace\Modulename\Model\Resource\Modulename; 

use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection; 

class Collection extends AbstractCollection 
{ 
    /** 
    * Define model & resource model 
    */ 
    const YOUR_TABLE = 'tablename'; 

    public function __construct(
     \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory, 
     \Psr\Log\LoggerInterface $logger, 
     \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, 
     \Magento\Framework\Event\ManagerInterface $eventManager, 
     \Magento\Store\Model\StoreManagerInterface $storeManager, 
     \Magento\Framework\DB\Adapter\AdapterInterface $connection = null, 
     \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null 
    ) { 
     $this->_init(
      'Namespace\Modulename\Model\Modulename', 
      'Namespace\Modulename\Model\Resource\Modulename' 
     ); 
     parent::__construct(
      $entityFactory, $logger, $fetchStrategy, $eventManager, $connection, 
      $resource 
     ); 
     $this->storeManager = $storeManager; 
    } 
    protected function _initSelect() 
    { 
     parent::_initSelect(); 

     $this->getSelect()->joinLeft(
       ['join_table' => $this->getTable('tablename')], 
       'main_table.columnname = join_table.column_name', 
       '*' 
      ); 
    } 
} 
?> 

今、あなたのモデル/リソース/ ModuleNameを/グリッド/ Collection.php

<?php 
namespace Namespace\Modulename\Model\Resource\Modulename\Grid; 

use Magento\Framework\Api\Search\SearchResultInterface; 
use Magento\Framework\Search\AggregationInterface; 
use Namespace\Modulename\Model\Resource\Modulename\Collection as ModulenameCollection; 

/** 
* Class Collection 
* Collection for displaying grid 
*/ 
class Collection extends ModulenameCollection implements SearchResultInterface 
{ 
    /** 
    * Resource initialization 
    * @return $this 
    */ 
    public function __construct(
     \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory, 
     \Psr\Log\LoggerInterface $logger, 
     \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy, 
     \Magento\Framework\Event\ManagerInterface $eventManager, 
     \Magento\Store\Model\StoreManagerInterface $storeManager, 
     $mainTable, 
     $eventPrefix, 
     $eventObject, 
     $resourceModel, 
     $model = 'Magento\Framework\View\Element\UiComponent\DataProvider\Document', 
     $connection = null, 
     \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null 
    ) { 
     parent::__construct(
      $entityFactory, 
      $logger, 
      $fetchStrategy, 
      $eventManager, 
      $storeManager, 
      $connection, 
      $resource 
     ); 
     $this->_eventPrefix = $eventPrefix; 
     $this->_eventObject = $eventObject; 
     $this->_init($model, $resourceModel); 
     $this->setMainTable($mainTable); 
    } 

    /** 
    * @return AggregationInterface 
    */ 
    public function getAggregations() 
    { 
     return $this->aggregations; 
    } 

    /** 
    * @param AggregationInterface $aggregations 
    * 
    * @return $this 
    */ 
    public function setAggregations($aggregations) 
    { 
     $this->aggregations = $aggregations; 
    } 


    /** 
    * Get search criteria. 
    * 
    * @return \Magento\Framework\Api\SearchCriteriaInterface|null 
    */ 
    public function getSearchCriteria() 
    { 
     return null; 
    } 

    /** 
    * Set search criteria. 
    * 
    * @param \Magento\Framework\Api\SearchCriteriaInterface $searchCriteria 
    * 
    * @return $this 
    * @SuppressWarnings(PHPMD.UnusedFormalParameter) 
    */ 
    public function setSearchCriteria(
     \Magento\Framework\Api\SearchCriteriaInterface $searchCriteria = null 
    ) { 
     return $this; 
    } 

    /** 
    * Get total count. 
    * 
    * @return int 
    */ 
    public function getTotalCount() 
    { 
     return $this->getSize(); 
    } 

    /** 
    * Set total count. 
    * 
    * @param int $totalCount 
    * 
    * @return $this 
    * @SuppressWarnings(PHPMD.UnusedFormalParameter) 
    */ 
    public function setTotalCount($totalCount) 
    { 
     return $this; 
    } 

    /** 
    * Set items list. 
    * 
    * @param \Magento\Framework\Api\ExtensibleDataInterface[] $items 
    * 
    * @return $this 
    * @SuppressWarnings(PHPMD.UnusedFormalParameter) 
    */ 
    public function setItems(array $items = null) 
    { 
     return $this; 
    } 
} 

?> 

これで、グリッド内とコレクションを呼び出すときに、結合テーブルの列を使用できます。

+0

わかりません、私は2つのモジュールが必要ですか? – Nir

+0

あなたは1つのモジュールを持っているかもしれませんが、2つのモデルをFAQカテゴリ用ともう1つのFAQ用に用意する必要があります。上記の手順で関係を作成できます。 – Priyank

+0

このコードはどのモデルですか? – Nir

関連する問題