Tabs 如何在管理产品编辑页面Magento2中创建选项卡和网格

Tabs 如何在管理产品编辑页面Magento2中创建选项卡和网格,tabs,grid,magento2,Tabs,Grid,Magento2,在这里,我使用事件观察者“控制器\动作\布局\呈现\在\管理HTML \目录\产品\编辑”来呈现产品选项卡中的自定义模块网格,但不起作用 这里我创建了Grid.php文件 请帮忙 我已经创建了下面的观察者文件。 app/code/Namespace/Module/Observer/AddStockMovementsTab.php 正在尝试在此文件中编写代码 app/code/Namespace/Module/Block/Adminhtml/Watch/Grid.php namespace\Mo

在这里,我使用事件观察者“控制器\动作\布局\呈现\在\管理HTML \目录\产品\编辑”来呈现产品选项卡中的自定义模块网格,但不起作用

这里我创建了Grid.php文件

请帮忙

  • 我已经创建了下面的观察者文件。 app/code/Namespace/Module/Observer/AddStockMovementsTab.php 正在尝试在此文件中编写代码

  • app/code/Namespace/Module/Block/Adminhtml/Watch/Grid.php

  • namespace\Module\Block\Adminhtml\Watch;
    使用Magento\Framework\Registry;
    使用Magento\Backend\Block\Template\Context;
    使用Magento\Store\Model\Store;
    使用Magento\CatalogInventory\Model\Stock\Item;
    类网格扩展\Magento\Backend\Block\Widget\Grid\Extended{
    受保护的$u注册表;
    /**
    *@var\Magento\Framework\Module\Manager
    */
    受保护的$moduleManager;
    /**
    *@var\Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory]
    */
    受保护的工厂;
    /**
    *@var\Magento\Catalog\Model\ProductFactory
    */
    受保护的$\u产品工厂;
    /**
    *@var\Magento\Catalog\Model\Product\Type
    */
    受保护的$\u类型;
    /**
    *@var\Magento\Catalog\Model\Product\Attribute\Source\Status
    */
    受保护的$u状态;
    受保护的$\u收集工厂;
    /**
    *@var\Magento\Catalog\Model\Product\Visibility
    */
    受保护的$\u可见性;
    /**
    *@var\Magento\Store\Model\WebsiteFactory
    */
    受保护的$\u网站工厂;
    /**
    *@param\Magento\Backend\Block\Template\Context$Context
    *@param\Magento\Backend\Helper\Data$backendHelper
    *@param\Magento\Store\Model\WebsiteFactory$WebsiteFactory
    *@param\Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory$setsFactory
    *@param\Magento\Catalog\Model\ProductFactory$ProductFactory
    *@param\Magento\Catalog\Model\Product\Type$Type
    *@param\Magento\Catalog\Model\Product\Attribute\Source\Status$Status
    *@param\Magento\Catalog\Model\Product\Visibility$Visibility
    *@param\Magento\Framework\Module\Manager$moduleManager
    *@param数组$data
    *
    *@SuppressWarnings(PHPMD.ExcessiveParameterList)
    */
    公共函数构造(
    上下文$Context,
    \Magento\Backend\Helper\Data$backendHelper,
    \Magento\Store\Model\WebsiteFactory$WebsiteFactory,
    \名称空间\Module\Model\ResourceModel\Watch\Collection$collectionFactory,
    \Magento\Framework\Module\Manager$moduleManager,
    注册表$注册表,
    数组$data=[]
    ) {
    $this->_collectionFactory=$collectionFactory;
    $this->_websiteFactory=$websiteFactory;
    $this->moduleManager=$moduleManager;
    $this->_registry=$registry;
    父项::_构造($context、$backendHelper、$data);
    }
    公共功能(构造)
    {
    父项::_构造();
    $this->setId('StockWatchGrid');
    $this->setSaveParametersInSession(true);
    $this->setfiltervability(!$this->getProduct());
    $this->setDefaultSort('created_at');
    $this->setDefaultDir('DESC');
    $this->setUseAjax(false);
    }
    受保护函数\u prepareCollection()
    {
    $objectManager=\Magento\Framework\App\objectManager::getInstance();
    $collection=$this->_collectionFactory->load();
    如果($this->getProduct()){
    $stockItem=$objectManager->get('Magento\CatalogInventory\Api\StockRegistryInterface')->getStockItem($this->getProduct()->getId());
    如果($stockItem->getId()){
    $collection->addFieldToFilter('item_id',$stockItem->getId());
    }
    }否则{
    $collection->joinProduct();
    }
    $this->setCollection($collection);
    返回父项::_prepareCollection();
    }
    /**
    *@return$this
    *@SuppressWarnings(PHPMD.ExcessiveMethodLength)
    */
    受保护函数\u prepareColumns()
    {
    如果(!$this->getProduct()){
    $this->addColumn(
    “sku”,
    [
    'header'=>SKU',
    “索引”=>“sku”,
    '过滤器索引'=>'产品.sku',
    '类型'=>'文本',
    'frame_callback'=>[$this'decorateSku'],
    'header\u css\u class'=>'col id',
    “column\u css\u class'=>“coll id”,
    ]
    );
    }
    $this->addColumn(
    “数量”,
    [
    'header'=>\'Quantity',
    “索引”=>“数量”,
    “类”=>“排序顺序”
    ]
    );
    $this->addColumn(
    “运动”,
    [
    'header'=>\'Movement',
    “索引”=>“移动”,
    “类”=>“排序顺序”
    ]
    );
    $this->addColumn(
    “是否有库存”,
    [
    'header'=>\'In Stock',
    “索引”=>“是库存中的”,
    '类型'=>'选项',
    “选项”=>[
    “1”=>“‘是’”,
    “0”=>\uuuu(“否”),
    ],
    “类”=>“排序顺序”
    ]
    );
    $this->addColumn(
    "讯息",,
    [
    'header'=>\'Message',
    '索引'=>'消息',
    “类”=>“排序顺序”
    ]
    );
    $this->addColumn(
    “用户”,
    [
    'header'=>\'User',
    “索引”=>“用户”,
    “类”=>“排序顺序”
    ]
    );
    $this->addColumn(
    “创建于”,
    [
    'header'=>\'Date',
    '索引'=>'已在'',
    '类型'=>'日期时间',
    “类”=>“排序顺序”
    ]
    );
    返回父项::_prepareColumns();
    }
    公共函数getProduct()
    {
    返回$this->_registry->registry('product');
    }
    公共函数decorateSku($value,$row)
    {
    $html=sprintf(
    '',
    $this->getUrl('catalog/product/edit',array('id'=>$row->getProductId()),uuuu('edit product'),
    美元价值
    );
    返回$html;
    }}
    
    您能发布您到目前为止所做的工作来修复它吗?您需要根据UI组件更改自定义网格,因为magento 2使用了它。@rrd我刚刚为它创建了网格,不知道
    namespace Namespace\Module\Block\Adminhtml\Watch;
    
    use Magento\Framework\Registry;
    use Magento\Backend\Block\Template\Context;
    use Magento\Store\Model\Store;
    use Magento\CatalogInventory\Model\Stock\Item;
    
    class Grid extends \Magento\Backend\Block\Widget\Grid\Extended {
    
    protected $_registry;
    
    /**
     * @var \Magento\Framework\Module\Manager
     */
    protected $moduleManager;
    
    /**
     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory]
     */
    protected $_setsFactory;
    
    /**
     * @var \Magento\Catalog\Model\ProductFactory
     */
    protected $_productFactory;
    
    /**
     * @var \Magento\Catalog\Model\Product\Type
     */
    protected $_type;
    
    /**
     * @var \Magento\Catalog\Model\Product\Attribute\Source\Status
     */
    protected $_status;
    protected $_collectionFactory;
    
    /**
     * @var \Magento\Catalog\Model\Product\Visibility
     */
    protected $_visibility;
    
    /**
     * @var \Magento\Store\Model\WebsiteFactory
     */
    protected $_websiteFactory;
    
    /**
     * @param \Magento\Backend\Block\Template\Context $context
     * @param \Magento\Backend\Helper\Data $backendHelper
     * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setsFactory
     * @param \Magento\Catalog\Model\ProductFactory $productFactory
     * @param \Magento\Catalog\Model\Product\Type $type
     * @param \Magento\Catalog\Model\Product\Attribute\Source\Status $status
     * @param \Magento\Catalog\Model\Product\Visibility $visibility
     * @param \Magento\Framework\Module\Manager $moduleManager
     * @param array $data
     *
     * @SuppressWarnings(PHPMD.ExcessiveParameterList)
     */
    public function __construct(
        Context $context,
        \Magento\Backend\Helper\Data $backendHelper,
        \Magento\Store\Model\WebsiteFactory $websiteFactory,
        \Namespace\Module\Model\ResourceModel\Watch\Collection $collectionFactory,
        \Magento\Framework\Module\Manager $moduleManager,
        Registry $registry,
        array $data = []
    ) {
        $this->_collectionFactory = $collectionFactory;
        $this->_websiteFactory = $websiteFactory;
        $this->moduleManager = $moduleManager;
        $this->_registry = $registry;
        parent::__construct($context, $backendHelper, $data);
    }
    
    public function _construct()
    {
        parent::_construct();
    
        $this->setId('StockWatchGrid');
        $this->setSaveParametersInSession(true);
        $this->setFilterVisibility(!$this->getProduct());
        $this->setDefaultSort('created_at');
        $this->setDefaultDir('DESC');
        $this->setUseAjax(false);
    }
    
    protected function _prepareCollection()
    {
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
        $collection = $this->_collectionFactory->load();
    
        if ($this->getProduct()) {
            $stockItem = $objectManager->get('Magento\CatalogInventory\Api\StockRegistryInterface')->getStockItem($this->getProduct()->getId());
            if ($stockItem->getId()) {
                $collection->addFieldToFilter('item_id', $stockItem->getId());
            }
        } else {
            $collection->joinProduct();
        }
    
        $this->setCollection($collection);
    
        return parent::_prepareCollection();
    }
    
    /**
     * @return $this
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
     */
    protected function _prepareColumns()
    {
    
        if (!$this->getProduct()) {
            $this->addColumn(
                'sku',
                [
                    'header'           => __('SKU'),
                    'index'            => 'sku',
                    'filter_index'     => 'product.sku',
                    'type'             => 'text',
                    'frame_callback'   => [$this, 'decorateSku'],
                    'header_css_class' => 'col-id',
                    'column_css_class' => 'col-id',
                ]
            );
        }
    
        $this->addColumn(
            'qty',
            [
                'header'        => __('Quantity'),
                'index'         => 'qty',
                'class' => 'sort_order'
            ]
        );
    
        $this->addColumn(
            'movement',
            [
                'header' => __('Movement'),
                'index'  => 'movement',
                'class' => 'sort_order'
            ]
        );
    
        $this->addColumn(
            'is_in_stock',
            [
                'header'  => __('In Stock'),
                'index'   => 'is_in_stock',
                'type'    => 'options',
                'options' => [
                    '1' => __('Yes'),
                    '0' => __('No'),
                ],
                'class' => 'sort_order'
            ]
        );
    
        $this->addColumn(
            'message',
            [
                'header' => __('Message'),
                'index'  => 'message',
                'class' => 'sort_order'
            ]
        );
    
        $this->addColumn(
            'user',
            [
                'header' => __('User'),
                'index'  => 'user',
                'class' => 'sort_order'
            ]
        );
    
        $this->addColumn(
            'created_at',
            [
                'header'       => __('Date'),
                'index'        => 'created_at',
                'type'         => 'datetime',
                'class' => 'sort_order'
            ]
        );
    
        return parent::_prepareColumns();
    }
    
    public function getProduct()
    {
        return $this->_registry->registry('product');
    }
    
    public function decorateSku($value, $row)
    {
        $html = sprintf(
            '<a href="%s" title="%s">%s</a>',
            $this->getUrl('catalog/product/edit', array('id' => $row->getProductId())), __('Edit Product'),
            $value
        );
    
        return $html;
    }}