如何在Magento中指定块名?

时间:2014-09-29 15:18:05

标签: php magento zend-framework

这是一个基本问题,但过去几天让我失眠了。

我用控制器,phtml模板和块类编写了一个自定义模块,如下所示:     应用程序/代码/本地/华翰/的HelloWorld /座         Helloworld.php(Huahan_Helloworld_Block_Helloworld扩展Mage_Core_Block_Template)     应用程序/代码/本地/华翰/的HelloWorld /控制器         IndexController.php(定义索引控制器的indexAction)     应用程序/设计/前端/基/默认/模板/华翰/的HelloWorld         helloworld.phtml(定义视图)     应用程序/设计/前端/碱/默认/布局         helloworld.xml(文件名" helloworld.xml"在etc / config.xml中指定)

我知道Magento中的每个请求处理都是从控制器及其操作方法开始的。

在布局helloworld.xml中,我在块标记

中指定模板文件
<helloworld_index_nihao>
<block type="core/template" name="just_an_arbitary_name" output="toHtml" template="huahan/helloworld/nihao.phtml"/>
</helloworld_index_nihao>
</layout> 

因此控制器在处理请求时知道要使用哪个模板。

问题是如何让Magento知道Huahan_Helloworld_Block_Helloworld是我希望它在渲染任何输出之前加载的块类?

如果有关于Magento xml的详细文档?我总是对Magento xml语法的复杂性和随意性感到沮丧

Magento的版本是ver.1.9.0.1

config.xml如下

<?xml version="1.0"?>
<config>
<modules>
<huahan_helloworld>
<version>
0.1.0
</version>
</huahan_helloworld>
</modules>


<frontend>
<routers>
<!-- the <helloworld> tagname appears to be arbitrary, but by
convention is should match the frontName tag below-->
        <helloworld>
                <use>standard</use>
                <args>
                        <module>Huahan_HelloWorld</module>
                        <frontName>helloworld</frontName>
                </args>
        </helloworld>
</routers>

<layout>
        <updates>
                <helloworld>
                        <file>helloworld.xml</file>
                </helloworld>
        </updates>
</layout>
</frontend>

<global>
        <blocks>
                <helloworld>
                        <class>Huahan_Helloworld_block</class>
                </helloworld>
        </blocks>
</global>

</config>

提前致谢。我真的很感激你在这里读到它。

2 个答案:

答案 0 :(得分:1)

块类型

type属性是配置块使用的类的项。不鼓励使用type中的完整班级名称。

Magento中的类别名系统的目的是在您自己的模块中扩展/覆盖核心/模块功能时允许您的灵活性。

如果每个人都使用了类别名,那么您可以使用自己的类替换/覆盖别名,并“注入”您的行为而不是原始行为。它是一种解耦代码以允许扩展。

阻止配置

在您的模块声明中,您必须指定一个块前缀,例如:

<blocks>
    <huahan_helloworld>
        <class>Huahan_Helloworld_Block</class>
    </huahan_helloworld>
</blocks>

根据Magento惯例,<class>部分应为huahan_helloworldhelloworld

由于这些配置和其他Magento约定,您的阻止类型应分别为huahan_helloworld/helloworldhelloworld/helloworld

答案 1 :(得分:0)

我明白了。

布局xml文件是我应该工作的地方。

只需更改type =&#34; core / template&#34;的值在helloworld.xml的块项中输入=&#34; Huahan_Helloworld_Block_Helloworld&#34;

然后就完成了!

我讨厌Magento,&#34;核心/模板&#34;从任何视角看起来都不像是一个类名!