我正在尝试为 Magento 1.9.1 创建自己的模块。在我的模块中,我试图在 CMS 内容中调用一个块,如下所示:
{{block type="core/template" template="myNamespace/myModulOutput.phtml"}}
该myModulOutput.phtml
模板包含来自我自己的控制器的集合:
class myNamespace_myModelname_Block extends Mage_Core_Block_Template
{
public function getCollection()
{
// some code
return $collection;
}
}
该模块似乎处于活动状态,并使用以下配置显示在 Magento 后端:
<config>
<modules>
<myNamespace_myModulname>
<version>0.1.0</version>
</myNamespace_myModulname>
</modules>
<global>
<blocks>
<myNamespace_myModulname>
<class>myNamespace_myModulname_Block</class>
</myNamespace_myModulname>
</blocks>
</global>
</config>
块类在文件中定义app/code/local/myNamespace/myModulname/Blocks/Index.php
。
这是一个有效的配置吗?我在前端收到错误:Fatal error: Call to a member function getCollection() on a non-object
.
编辑
解决了
通过@b.enoit.be 的解释,我尝试了以下设置......它正在运行;-)
应用程序/etc/modules/Mynamespace_Mymodulname.xml:
<?xml version="1.0"?>
<config>
<modules>
<Mynamespace_Mymodulname>
<active>true</active>
<codePool>local</codePool>
<depends/>
</Mynamespace_Mymodulname>
</modules>
</config>
应用程序/代码/本地/Mynamespace/Mymodulname/Block/Index.php:
<?php
class Mynamespace_Mymodulname_Block_Index extends Mage_Core_Block_Template
{
public function getTest()
{
// some code
return "mymodul:test";
}
}
?>
应用程序/代码/本地/Mynamespace/Mymodulname/etc/config.xml:
<?xml version="1.0"?>
<config>
<modules>
<Mynamespace_Mymodulname>
<version>0.1.0</version>
</Mynamespace_Mymodulname >
</modules>
<global>
<blocks>
<mynamespace_mymodulname>
<class>Mynamespace_Mymodulname_Block</class>
</mynamespace_mymodulname >
</blocks>
</global>
</config>
CMS-呼叫
{{block type="mynamespace_mymodulname/index" template="mynamespace/myoutput.phtml"}}
应用程序/设计/前端/myTheme/default/mynamespace/myoutput.phtml:
<?php /** @var $this Mynamespace_Mymodulname_Block_Index */ ?>
<?php echo $this->getTest() ?>
非常感谢您提供如此详细而有意义的解释:-)