我正在使用自定义模块来显示CMS内容。我有一个自定义前端控制器,按预期工作。我可以从控制器调用各种前端动作。我正在使用现有的模板,它也正在显示它应该。我还加载了一个布局更新xml文件,从中我可以删除我不需要的产品菜单,并为我的自定义块的模板文件添加一个参考块。 / p>
我知道正在加载正确的模板覆盖文件,因为我正在测试以下内容:
<?php echo __FILE__ . " loaded <br>"; ?>
回显正确的文件名。
但是,当我从同一模板文件中调用自定义块方法时,我什么都没得到。
我的模块命名空间/模块是Cmpreshn / Projects。以下是我到目前为止:
配置文件 应用程序/代码/本地/ Cmpreshn /项目的/ 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>
前置控制器 应用程序/代码/本地/ Cmpreshn /项目/控制器/ 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();
}
}
XML中的更新 应用程序/设计/前端/默认/ PMC1 /布局/ projects.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>
模板覆盖并调用自定义块 应用程序/设计/前端/默认/ PMC1 /模板/ cmpreshn /项目/ list.phtml
<?php echo __FILE__ . " loaded <br>"; ?>
<?php echo $this->getProjectsList(); ?>
最后但并非最不重要的是,我的自定义块类 应用程序/代码/本地/ Cmpreshn / Proejcts /砌块/ 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()的输出方法或者)
感谢任何帮助。我准备好把眼睛拉出来......
答案 0 :(得分:2)
我刚刚观察了您的代码并发现了以下错误:
注册模块文件中的块注册(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
。
可能会有更多错别字。但我只能找到上面两个。我希望这能解决你的问题。
答案 1 :(得分:1)
将items.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>
你现在可以得到输出。