Magento扩展:如何在CMS页面或块上输出字符串

时间:2013-10-17 01:54:21

标签: php magento

我正在尝试创建我的第一个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

1 个答案:

答案 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