0

我正在尝试创建我的第一个 Magento 扩展程序,但我已经陷入了第一步。

添加{{block type="rick_printer/print" text="Hello world"}}到 CMS 页面或块时,我希望显示“Hello world”。不幸的是,什么也没有发生。这是我的代码:

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_Print</class>
            </rick_printer>
        </blocks>
    </global>
</config>

app\etc\modules\Rick_Printer.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Rick_Printer>
            <active>true</active>
            <codePool>local</codePool>
        </Rick_Printer>
    </modules>
</config>

app\code\local\Rick\Printer\Block\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;
    }
}

app\design\frontend\default\default\template\rick\printer\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
4

1 回答 1

2

首先,您的块类前缀是错误的。尽管存在节点名称<class>,但您实际指定的是类前缀
另一种看待它的方式是,该节点声明了模块的块所在的目录。
正确的方法是

<!-- language: xml -->
<global>
    <blocks>
        <rick_printer>
            <class>Rick_Printer_Block</class>
        </rick_printer>
    </blocks>
</global>

其次,在您的模板中,您正在调用$this->spinIt();而不是$this->printIt();. 只是一个错字...

否则代码看起来没问题。

更新 错误消息表明类名不匹配的文件系统路径。检查外壳和拼写错误。
此外,由于您希望您的块呈现模板,因此您希望扩展Rick_Printer_Block_PrintMage_Core_Block_Template不是_Abstract块类。

于 2013-10-17T08:42:27.737 回答