Magento块未加载

时间:2019-06-21 21:08:01

标签: php xml magento

我正在Magento中构建我的第一个模块,并且有几个与该过程有关的问题。

在尝试模块之前,我只有一个模板,并使用此代码将其加载到app\design\frontend\rwd\default\layout\local.xml

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>
        <reference name="after_body_start">
            <block type="checkout/cart_sidebar" template="mgw/mwCartRebuild.phtml"/>
        </reference>
    </default>
</layout>

生活很好,一切正常,直到我决定需要扩展Mage_Checkout_Block_Cart_Sidebar类。

因此,我创建了一个模块来这样做。这是我的代码。

阻止 app\code\local\mgw\Cart\Block\ModalCart.php

<?php 
class mgw_Cart_Block_Modal_Cart extends Mage_Checkout_Block_Cart_Sidebar{
    public function __construct(){
        perent::__construct();
        $this->setTemplate('mgw/mwCartRebuild.phtml');
    }
}

config.xml app\code\local\mgw\Cart\etc\config.xml

<config>
    <global>
        <modules>
            <mgw_Cart>
                <version>0.0.0</version>
            </mgw_Cart>
        </modules>
        <blocks>
            <mgw_Cart>
                <class>mgw_Cart_Block_Modal_Cart</class>
            </mgw_Cart>
        </blocks>
        <helpers>
            <cart>
                <class>mgw_Cart_Helper</class>
            </cart>
        </helpers>
    </global>
</config>

新的local.xml app\design\frontend\rwd\default\layout\local.xml

<layout version="0.1.0">
    <default>
        <reference name="after_body_start">
            <block type="cart/modal_cart"/>
        </reference>
    </default>
</layout>

模块xml app\etc\modules\mgw_Cart.xml

<config>
    <modules>
        <mgw_Cart>
            <active>true</active>
            <codePool>local</codePool>
            <depends />
        </mgw_Cart>
    </modules>
</config>

现在我的模板无法加载。我已经检查了管理员,以查看是否正在加载我的模块并列出该模块。那为什么不加载我的模板?

我的问题是:

  • 我能否像我正在尝试的那样扩展核心块?
  • 如何加载我的块/模板?

1 个答案:

答案 0 :(得分:1)

我是Magento的新手,我可以为您解决问题。 首先,我建议为您的自定义模块和文件使用明确的命名法,“ ModalCart.php”可以重命名为“ Modalcart.php”,以避免任何参考问题。

如果要扩展/覆盖Mage类,则需要在模块的config.xml中指定它,如下所示:

<blocks>
    <checkout>
        <rewrite>
            <cart_sidebar>PkgName_ModuleName_Block_YourClassThatOverrides</cart_sidebar>
        </rewrite>
    </checkout>
</blocks>

在上面的代码中,您声明要用新的类重写checkout / cart_sidebar块。

所以这是config.xml,现在您要创建覆盖的类。在模块的Block目录中,创建扩展/重写核心类的类文件.php:

<?php
  class PkgName_ModuleName_Block_YourClassThatOverrides extends Mage_Checkout_Block_Cart_Sidebar {
      // check for the methods to rewrite or create new methods
  }

,还有关于如何设置特定模板或布局的最后一个问题: 开始编码之前,我的个人建议是从不同的来源研究同一事物3或4次,然后再进行3或4次编码,直到您可以理解并记住所有内容。 因此,对于布局/模板部分,我建议阅读以下Alan Storm主题: https://alanstorm.com/layouts_blocks_and_templates/