[英]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.