0

我正在尝试使用一个像模块一样的“hello world”来学习如何制作模块。我在 Mac OSX 10.6 本地服务器上安装了相当全新的 Magento 1.7。我正在关注Pierrefay 的教程,但无法显示该块。我一直在网上,但没有任何工作。该模块的页面仅显示带有“狗”和“返校”广告的默认外观。我有 Alan 的 Layoutviewer 模块。我目前处于调试模式并疯狂地清空缓存。我已经告诉麦格了。无论如何,不​​要缓存任何东西。我已经成功地达到了不生成错误消息的地步(我也处于调试模式并且已启动 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>

我的布局:(frontend/default/nationalwide/layout/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 !!';
     }
}

似乎我关注了网络上的所有内容,除了从索引操作中呼应之外,没有任何效果。我将不胜感激任何帮助。

4

2 回答 2

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是输出块。

于 2012-08-27T17:22:15.643 回答
0

取消注释时您不会收到任何错误,因为 Magento 只是不尝试调用该块:) 所以这是一个无声错误...

事实上,正如错误所说,Magento 正在尝试访问文件 frontend/base/ default /template/cartonplugin/cartondisplay.phtml,这意味着如果文件 frontend/default/全国范围内的/template/ ,您的设计配置(我猜)不正确cartonplugin/cartondisplay.phtml 确实存在。

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

下图是一个很好的配置,可以告诉 Magento 调用驻留在 frontend/default/全国范围内/template/ 而不是 frontend/base/ default /template/ 的模板(可能需要根据您现有的配置和商店视图进行一些微调)

在此处输入图像描述

于 2012-08-27T20:37:07.453 回答