首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Magento 2:覆盖/重写块、模型、控制器、使用插件和首选项的助手

Magento 2:覆盖/重写块、模型、控制器、使用插件和首选项的助手
EN

Stack Overflow用户
提问于 2016-09-10 08:43:28
回答 1查看 20.8K关注 0票数 4

Magento 2:覆盖/重写块、模型、控制器、使用插件和首选项的助手。

如何覆盖助手、块、模型视图?

EN

回答 1

Stack Overflow用户

发布于 2017-01-12 14:00:39

有两个步骤可以覆盖块、模型和控制器文件

1)在di.xml中添加覆盖首选项

2)在模块中创建块、模型和控制器文件。

命名空间: Prince 模块名称: Helloworld

用于覆盖目录产品ListProduct块.

1)在Prince/Helloworld/etc文件夹中创建di.xml文件

代码语言:javascript
复制
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
 <preference for="Magento\Catalog\Model\Product" type="Prince\Helloworld\Model\Rewrite\Catalog\Product" />
</config>

2)在Prince/Helloworld/ Block /Rewrite/Product文件夹中创建ListProduct.php块文件

代码语言:javascript
复制
<?php
    namespace Prince\Helloworld\Block\Rewrite\Product;

    class ListProduct extends \Magento\Catalog\Block\Product\ListProduct
    {
        public function _getProductCollection()
        {
            // Do your code here
        }
    }

用于覆盖目录产品模型的.

1)在di.xml前添加首选项

代码语言:javascript
复制
<preference for="Magento\Catalog\Model\Product" type="Prince\Helloworld\Model\Rewrite\Catalog\Product" /> 

2)在Prince/Helloworld/ Model /Rewrite/Catalog文件夹中创建Product.php模型文件

代码语言:javascript
复制
<?php
namespace Prince\Helloworld\Model\Rewrite\Catalog;

class Product extends \Magento\Catalog\Model\Product
{
    public function isSalable()
    {
        // Do your code here

        return parent::isSalable();
    }

}

覆盖控制器

1)在di.xml前添加首选项

代码语言:javascript
复制
<preference for="Magento\Catalog\Controller\Product\View" type="Prince\Helloworld\Controller\Rewrite\Product\View" />

2)在Prince/Helloworld/ Controller /Rewrite/Product文件夹中创建View.php控制器文件

代码语言:javascript
复制
class View extends \Magento\Catalog\Controller\Product\View
{
    /**
     * @return \Magento\Framework\Controller\Result\Redirect|\Magento\Framework\View\Result\Page
     */
    public function execute()
    {
        // Do your stuff here
        return parent::execute();
    }
}

您可以使用相同的方法覆盖其他块、模型和控制器。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39424290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档