簡體   English   中英

Magento自定義模塊-無法從模板調用塊方法

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM