Magento不显示自定义块

时间:2012-08-27 17:06:35

标签: magento module block

我正在尝试像模块这样的“hello world”来学习如何制作模块。我在Mac OSX 10.6本地服务器上安装了相当全新的Magento 1.7。我正在关注Pierrefay's Turtorial,我无法显示该块。我一直在网上,但没有任何工作。该模块的页面仅显示“狗”和“返校”广告的默认外观。我有Alan的Layoutviewer模块。我目前处于调试模式并像疯了一样清空缓存。我已经告诉Mag了。反正不要缓存任何东西。我已经设法达到了我没有生成错误消息的程度(我也处于调试模式并且execption.log和system.log被拉起)。

我的控制器:

<?php
class Nationwide_Cartonplugin_IndexController extends Mage_Core_Controller_Front_Action {
    public function indexAction ()
   {
     $this->loadLayout();
     $this->renderLayout();
     //var_dump(Mage::getSingleton('core/layout')->getUpdate()->getHandles());
    //exit("bailing early at ".__LINE__." in ".__FILE__);
     //echo "Carton Exists";

     //Mage::log(
     //   $this->getLayout()->getUpdate()->getHandles(),
     //   null, ‘layout.log’ );
     //Mage::log(
     //  $this->getLayout()->getUpdate()->asString(),
     //  null, ‘layout.log’ );
   }
   public function mamethodeAction ()
   {
     echo 'test mymethod';
    }
}

我的配置:

<?xml version="1.0"?>

<config>
    <modules>
        <Nationwide_Cartonplugin>
            <version>1.1.0</version>
        </Nationwide_Cartonplugin>
    </modules>
    <global>
        <blocks>
            <cartonplugin>
                <class>Nationwide_Cartonplugin_Block</class>
            </cartonplugin>
        </blocks>
    </global>
    <frontend>
        <routers>
            <cartonplugin>
                <use>standard</use>
                <args>
                    <module>Nationwide_Cartonplugin</module>
                    <frontName>carton</frontName>
                </args>
            </cartonplugin>
        </routers>
        <layout>
            <updates>
                <cartonplugin>
                    <file>carton.xml</file>
                </cartonplugin>
            </updates>
        </layout>
    </frontend>
</config>

我的布局:(前端/默认/全国/布局/ carton.xml)(我在管理设置中使用默认和全国范围)

<?xml version="1.0"?>

<layout version="0.1.0">
      <default>
          <reference name="content">
          </reference>
      </default>
      <cartonplugin_index_index>
           <reference name="content">
                <block output="toHtml" type="cartonplugin/myblock"  name="myblock"
                          template="cartonplugin/cartondisplay.phtml"/>
           </reference>
      </cartonplugin_index_index>
</layout>

取消引用引用会生成“无效模板”错误。

我的模板:(前端/默认/全国/模板/ cartonplugin / cartondisplay.phtml)

<?php
//echo $this->methodcarblock();
?>

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Hello World</title>
    <style type="text/css">
        body {
            background-color:#f00;
        }
    </style>
</head>
<body>
    <div class="test1">
        <?php echo $this->methodcarblock(); ?>
    </div>
</body>
</html> 

我的阻止:

<?php

class Nationwide_Cartonplugin_Block_Myblock extends Mage_Core_Block_Template
{
     public function methodcarblock()
     {
         return 'informations about my block !!';
     }
}

似乎我跟随网络上的每一个人,除了从索引动作回应之外什么都不行。我非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

一目了然,改变

<block type="cartonplugin/myblock" name="myblock" template="cartonplugin/cartondisplay.phtml"/>

<block output="toHtml" type="cartonplugin/myblock" name="myblock" template="cartonplugin/cartondisplay.phtml"/>

这是必要的,因为Mage_Core_Controller_Varien_Action::renderLayout()假设输出块已被设置为渲染的入口点。通常不需要设置输出块和方法,因为page.xml中定义的 root 块是输出块。

答案 1 :(得分:0)

取消注释时没有错误,因为Magento没有尝试调用块:)所以这是一个无声的错误...

事实上,正如错误所述,Magento正试图达到文件前端/基础/ 默认 /template/cartonplugin/cartondisplay.phtml这意味着您的设计配置(我猜)不正确文件前端/默认/ 全国范围 /template/cartonplugin/cartondisplay.phtml确实存在。

那么,您确定在系统配置,设计选项卡中正确配置了包/主题吗?确保包是“默认”,主题模板是“全国范围”。

如下图所示是一个很好的配置,告诉Magento调用驻留在前端/默认/ 全国范围 / template /而不是前端/ base / 默认的模板/ template /(可能需要一些微调,具体取决于您现有的配置和商店视图)

enter image description here