首页 文章

Magento 2.1自定义模块关系

提问于
浏览
0

我为我的Magento 2.1商店开发了一些自定义模块,用于在一些CMS页面中智能地处理内容 .

为了做到这一点,我使用了本教程https://www.ashsmith.io/magento2/module-from-scratch-introduction/和此示例https://github.com/ashsmith/magento2-blog-module-tutorial .

现在,我在页面上有FAQ列表,但每个FAQ都属于FAQ类别(不是目录类别) . 所以这里有两个自定义模块(FAQ类别和FAQ问题) . FAQ类别只有Title字段 . FAQ问题有 Headers 字段,答案(文本编辑器)字段和常见问题解答问题下拉列表(选择所有可用常见问题解答类别列表框)

我不知道怎么做到这一点 .

做正确的方法是什么?特别是管理部分 .

谢谢

1 回答

  • 0

    我假设你想加入字段 . 您不能通过在di.xml中使用虚拟类型来执行此操作,因此您需要按照这些步骤操作并更新文件

    #File 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 Your Resource Model File Model/Resource/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',
                    '*'
                );
        }
    }
    ?>
    

    Now your Model/Resource/ModuleName/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;
        }
    }
    
    ?>
    

    现在,您可以在网格中的任何位置以及调用集合时使用连接表列 .

相关问题