我正在尝试创建我的第一个Magento扩展,我已经陷入了第一步。
将{{block type="rick_printer/print" text="Hello world"}}
添加到CMS页面或块时,我希望显示“Hello world”。
不幸的是没有任这是我的代码:
应用\代码\本地\瑞克\打印机\等\ config.xml中
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Rick_Printer>
<version>0.0.1</version>
</Rick_Printer>
</modules>
<global>
<blocks>
<rick_printer>
<class>Rick_Printer_Block_Print</class>
</rick_printer>
</blocks>
</global>
</config>
应用\等\模块\ Rick_Printer.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Rick_Printer>
<active>true</active>
<codePool>local</codePool>
</Rick_Printer>
</modules>
</config>
应用\代码\本地\瑞克\打印机\块\ Print.php
class Rick_Printer_Block_Print extends Mage_Core_Block_Abstract
{
protected function _construct()
{
$this->setTemplate('rick/printer/view.phtml');
parent::_construct();
}
public function printIt()
{
$text = $this->getText();
if (!$text) {
$msg = "Please provide a text!";
echo $msg;
return array();
}
return $text;
}
}
应用\设计\前端\默认\默认\模板\瑞克\打印机\ print.phtml
<?php
$text = $this->spinIt();
echo $text;
?>
我知道代码是丑陋的,我可能做错了。 任何帮助都非常感谢!
由于
更新:在应用Vinai的答案后,我的 app \ code \ local \ Rick \ Printer \ etc \ config.xml 现在看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Rick_Printer>
<version>0.0.1</version>
</Rick_Printer>
</modules>
<global>
<blocks>
<rick_printer>
<class>Rick_Printer_Block</class>
</rick_printer>
</blocks>
</global>
</config>
我在访问CMS页面时显示以下错误消息(未显示):
class Rick_Printer_Block_Print extends Mage_Core_Block_Abstract
{
protected function _construct()
{
$this->setTemplate('rick/printer/view.phtml');
parent::_construct();
}
public function printIt()
{
$text = $this->getText();
if (!$text) {
$msg = "Please provide a text!";
echo $msg; return array();
}
return $text;
}
}
Fatal error: Class 'Rick_Printer_Block_Print' not found in /home/www/xyz/htdocs/app/code/core/Mage/Core/Model/Layout.php on line 491
答案 0 :(得分:2)
首先,你的块类前缀是错误的。尽管节点名称为<class>
,但您实际指定的是类前缀
查看它的另一种方法是该节点声明目录,模块的块位于该目录中
正确的方法是
<!-- language: xml -->
<global>
<blocks>
<rick_printer>
<class>Rick_Printer_Block</class>
</rick_printer>
</blocks>
</global>
其次,在您的模板中,您拨打$this->spinIt();
而不是$this->printIt();
。
只是一个错字...
否则代码看起来没问题。
<强>更新强>
错误消息指示类名不匹配的文件系统路径。检查外壳和拼写错误
此外,由于您希望块用于呈现模板,因此您希望从Rick_Printer_Block_Print
而不是Mage_Core_Block_Template
块类扩展_Abstract
。