【发布时间】:2015-08-15 10:11:10
【问题描述】:
我正在尝试为 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 的解释,我尝试了以下设置...它运行了 ;-)
app/etc/modules/Mynamespace_Mymodulname.xml:
<?xml version="1.0"?>
<config>
<modules>
<Mynamespace_Mymodulname>
<active>true</active>
<codePool>local</codePool>
<depends/>
</Mynamespace_Mymodulname>
</modules>
</config>
app/code/local/Mynamespace/Mymodulname/Block/Index.php:
<?php
class Mynamespace_Mymodulname_Block_Index extends Mage_Core_Block_Template
{
public function getTest()
{
// some code
return "mymodul:test";
}
}
?>
app/code/local/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"}}
app/design/frontend/myTheme/default/mynamespace/myoutput.phtml:
<?php /** @var $this Mynamespace_Mymodulname_Block_Index */ ?>
<?php echo $this->getTest() ?>
非常感谢您提供如此详细而有意义的解释:-)
【问题讨论】:
-
看起来你正在混淆控制器和块
标签: php magento module magento-layout-xml