[英]Magento custom module - unable to call block method from template
我正在开发一个自定义模块来显示CMS内容。 我有一个自定义的前端控制器,它可以按预期工作。 我可以从控制器调用各种前端操作。 我正在使用一个现有模板,它也会按原样显示。 我还加载了一个布局更新xml文件,从中可以删除不需要的产品菜单,并为自定义模块的模板文件添加参考模块。
我知道正在加载正确的模板替代文件,因为我正在测试以下内容:
<?php echo __FILE__ . " loaded <br>"; ?>
这回显了正确的文件名。
但是,当我从同一模板文件调用自定义块方法时,我什么也没得到。
我的模块名称空间/模块是Cmpreshn / Projects。 以下是我到目前为止的内容:
app / code / local / Cmpreshn / Projects / etc / config.xml中的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Cmpreshn_Projects>
<version>0.1.0</version>
</Cmpreshn_Projects>
</modules>
<frontend>
<routers>
<projects>
<use>standard</use>
<args>
<module>Cmpreshn_Projects</module>
<frontName>education</frontName>
</args>
</projects>
</routers>
<layout>
<updates>
<projects>
<file>projects.xml</file>
</projects>
</updates>
</layout>
</frontend>
<global>
<blocks>
<projects>
<class>Projects_Block_List</class>
</projects>
</blocks>
</global>
</config>
app / code / local / Cmpreshn / Projects / controllers / ProjectsController.php中的前端控制器
<?php
class Cmpreshn_Projects_ProjectsController extends Mage_Core_Controller_Front_Action {
public function indexAction(){
$this->listAction();
}
public function listAction(){
echo "list action called<br>";
/* get request and save params to object */
$this->request = Mage::app()->getRequest();
/* layout overrides for this module in app/design/frontend/default/pmc1/layout/projects.xml */
$this->loadLayout();
/* use the education template */
$this->getLayout()->getBlock("root")->setTemplate("page/pmc_education.phtml");
/* render the layout */
$this->renderLayout();
}
}
app / design / frontend / default / pmc1 / layout / projects.xml中的XML更新
<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">
<projects_projects_list>
<remove name="top.menu"/>
<reference name="content">
<block type="page/html" name="page" template="cmpreshn/projects/list.phtml" />
</reference>
</projects_projects_list>
</layout>
模板覆盖并调用app / design / frontend / default / pmc1 / template / cmpreshn / project / list.phtml中的自定义块
<?php echo __FILE__ . " loaded <br>"; ?>
<?php echo $this->getProjectsList(); ?>
最后但并非最不重要的一点是,我在app / code / local / Cmpreshn / Proejcts / Block / List.php中的自定义块类
<?php
class Cmpreshn_Projects_Block_List extends Mage_Core_Block_Template {
public function _construct() {
parent::__construct();
echo "projects list block constructor called<br>";
} // end constructor
public function getProjectsList() {
echo "getProjectsList called <br>";
return("getProjectsList called");
}
} // end class
如前所述,我从list.phtml模板文件的第一行获取了输出,但是自定义块方法没有输出,也没有表明我的块正在加载(也没有_construct()方法的输出)
任何帮助表示赞赏。 我已经准备好对此展开关注...
我只是观察您的代码,发现以下错误:
在注册模块文件(config.xml)中注册块似乎是错误的。
<global> <blocks> <projects> <class>Cmpreshn_Projects_Block</class> <!-- Not Projects_Block_List --> </projects> </blocks> </global>
布局文件(projects.xml)的Block元素中的type
属性错误。 您不应调用page/html
而应调用projects/list
。
可能会有更多的错别字。 但我只能找到以上两个。 我希望这能解决您的问题。
将块类型更改为projects.XML文件中的projects/list
<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">
<projects_projects_list>
<remove name="top.menu"/>
<reference name="content">
<block type="projects/list" name="page" template="cmpreshn/projects/list.phtml/>
</reference>
</projects_projects_list>
</layout>
您现在可能会得到输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.