2016-09-20 3 views
0

Ich habe einige Custom Module für meinen Magento 2.1 Store entwickelt, um Inhalte auf einigen CMS-Seiten intelligent verwalten zu können.Magento 2.1 Benutzerdefinierte Modulbeziehung

Ich habe dieses Tutorial verwendet https://www.ashsmith.io/magento2/module-from-scratch-introduction/ und dieses Beispiel https://github.com/ashsmith/magento2-blog-module-tutorial, um es zu tun.

Jetzt habe ich auf der Seite mit Liste der FAQ, aber jede FAQ gehört zu FAQ-Kategorie (nicht die Katalogkategorie). So gibt es hier zwei benutzerdefinierte Module (FAQ Kategorie und FAQ Frage). Die FAQ-Kategorie hat nur Titelfeld. Die FAQ Frage haben Titelfeld, Antwort (Texteditor) Feld und FAQ Frage Dropdown (wählen Sie Box mit Liste aller verfügbaren FAQ Kategorien)

Ich weiß nicht, wie dies zu erreichen ist.

Was ist der richtige Weg? Vor allem der Admin-Teil.

Danke

+0

Ich stimme für das Schließen dieser Frage als Off-Topic ab, da Stack Overflow eine [programmierungsbezogene] (http://stackoverflow.com/help/on-topic) Q & A-Site ist. Bei Ihrer Frage geht es nicht um Programmierung. Vielleicht sollten Sie es stattdessen auf http://magento.stackexchange.com veröffentlichen? – Enigmativity

Antwort

0

Ich nehme an, Sie möchten Felder beitreten. Sie können dies nicht tun, indem virtuelle Art in di.xml verwenden, so müssen Sie die folgenden Schritte ausführen und aktualisieren Sie Ihre Dateien

#Datei etc/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> 

in Ihrer Ressource-Modelldatei Modell/Ressource/MODULE/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', 
       '*' 
      ); 
    } 
} 
?> 

Jetzt ist Ihr Modell/Ressource/Module/Grid/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; 
    } 
} 

?> 

Jetzt können Sie die Join-Tabelle Spalten wo in Ihrem Raster und wenn Sie Sammlung aufrufen.

+0

Nicht sicher, ich verstehe, muss ich die 2 Module oder nur eines haben? – Nir

+0

Sie können ein Modul haben, aber Sie müssen zwei Modelle haben, eins für FAQ-Kategorie und ein anderes für FAQ. Frage, die Sie durch den obigen Schritt erstellen können. – Priyank

+0

Dieser Code ist für welches Modell? – Nir

Verwandte Themen