我正在尝试像模块这样的“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 !!';
}
}
似乎我跟随网络上的每一个人,除了从索引动作回应之外什么都不行。我非常感谢任何帮助。
答案 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 /(可能需要一些微调,具体取决于您现有的配置和商店视图)