了解Magento中的覆盖:块

对于任何框架而言,在核心本身中支持可扩展性和可伸缩性始终是一项重要功能。 Magento确实如此,它允许程序员创建自定义扩展来满足自定义要求,从而提供可扩展性。 另一方面,它还允许您覆盖核心文件,以更改Magento核心功能的流程和行为。

Magento中有多种方法可以让您覆盖核心文件。 其中之一是事件观察者模式的实现。 使用该方法,您将在模块中定义所需事件的观察者,并在Magento中引发相关事件时将其拾取。 当然,这是对Magento核心模块进行更改的强大而标准的方法。 话虽如此,在某些情况下,您会觉得如果只用核心文件片段替换它们就好了。 您可以使用自定义模块中的XML配置文件来执行此操作。

为什么要覆盖块?

在Magento中,块是前端中任何布局的原始构建组件。 尽管您可以使用自定义主题覆盖任何块的模板文件来更改视觉输出,但是有时您还是想更改核心块代码的逻辑。 在这种情况下,用自定义模块的块文件覆盖核心块确实有助于轻松插入更改。

在本教程中,我们将创建一个自定义模块,以了解Magento中块覆盖的工作原理。 在自定义模块中,我们将覆盖显示在类别页面视图上的产品列表块。 覆盖通过按照Magento的约定设置某些XML标签来起作用。

我假设您熟悉Magento中的基本模块创建过程。 这是一篇很好的文章,解释了自定义模块创建的基础,以防万一您想看看它! 让我们直接进入本教程的内容!

设置概览

我们将创建一个名为“ Catalog”的简单自定义模块,该模块在类别页面视图中设置核心产品列表块的覆盖(app / code / core / Mage / Catalog / Block / Category / View.php)。 以下是所需设置所需的文件列表:

  • app / etc / modules / Envato_All.xml:这是用于启用我们的自定义模块的文件。
  • app / code / local / Envato / Catalog / etc / config.xml:这是一个模块配置文件,在该文件中,我们将根据Magento约定使用某些标签来设置块覆盖。
  • app / code / local / Envato / Catalog / Block / Category / View.php:这是我们的新块文件,它将替换核心块文件。

创建文件和文件夹:自定义模块

首先,我们需要创建一个模块启动器文件。 创建一个文件“ app / etc / modules / Envato_All.xml”,并将以下内容粘贴到该文件中。 我们使用Envato作为模块名称空间,使用Catalog作为模块名称。 默认情况下,它将启用目录模块。

<?xml version="1.0"?>
<config>
  <modules>
    <Envato_Catalog>
      <active>true</active>
      <codePool>local</codePool>
    </Envato_Catalog>
  </modules>
</config>

接下来,我们需要创建一个模块配置文件。 创建“ app / code / local / Envato / Catalog / etc / config.xml”,并将以下内容粘贴到该文件中。

<?xml version="1.0"?>
<config>
  <modules>
    <Envato_Catalog>
      <version>1.0</version>
    </Envato_Catalog>
  </modules>

  <global>
    <blocks>
      <catalog>
        <rewrite>
          <category_view>Envato_Catalog_Block_Category_View</category_view>
        </rewrite>
      </catalog>
    </blocks>
  </global>
</config>

在模块的开头,我们使用<version>标记设置了模块版本号。 之后, <catalog><rewrite>标记用于通知Magento覆盖系统,我们将覆盖“ Catalog”核心模块的“块”之一。

此外, <category_view>标记用于定义一个块标识,该标识将被Envato_Catalog_Block_Category_View类覆盖。 它映射到目录模块“块”目录下的块文件“ Category / View.php”。 这里要注意的重要一点是,我们正在遵循类似于核心模块的目录结构。 尽管这不是绝对必要的,但为了保持可读性,它优于其他目录结构。

最后,剩下的唯一事情就是定义一个块类Envato_Catalog_Block_Category_View 。 让我们创建一个阻止文件“ app / code / local / Envato / Catalog / Block / Category / View.php”,并使用以下内容填充它。

<?php
/**
 * Category View block
 *
 * @category Envato
 * @package Envato_Catalog
 */
class Envato_Catalog_Block_Category_View extends Mage_Catalog_Block_Category_View
{
  public function getProductListHtml()
  {
    // Include your custom code here!
    return $this­>getChildHtml('product_list');
  }
}

我们定义了Envato_Catalog_Block_Category_View类,它扩展了核心Mage_Catalog_Block_Category_View块类。 因此,您可以覆盖基类的每个方法,并在必要时创建新方法。

在上面的示例中, getProductListHtml方法被覆盖,因此将在类别页面视图中调用它! 您可以根据需要更改代码。

尽管这是一个非常基本的示例,但它的目的是覆盖核心块,您可以对其进行调整,以使事情变得更复杂,并创建更有用的东西!

结论

今天,在本系列的第一篇文章中,我们已经学习了如何覆盖Magento的核心模块。 在下一部分中,我将提出更多令人兴奋的东西! 我希望在下面的Feed中听到您的评论和疑问!

翻译自: https://code.tutsplus.com/tutorials/understand-overriding-in-magento-blocks--cms-23325

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值