如何使用前端在Magento 1.9 admin中显示全局消息作为最新消息

时间:2016-01-29 12:25:49

标签: php forms magento magento-1.9

如何使用前端在Magento 1.9 admin中显示全局消息作为最新消息。

<form action = "index.php" method = "post">
<input type = "text" name = "mymsg" />
<input type = "submit" name = "submit" value = "submit" />
</form>

<?php
if(isset($_POST["submit"]))
{
 ??code??
}
?>

当我点击提交时,它必须发送一条消息并在管理面板全局消息区域显示。

1 个答案:

答案 0 :(得分:3)

你不会在notifications区域内找到一些东西。

注意:在下文中,我只触及在全局通知区域中显示消息所需的文件和部件。这还不足以进行完整的扩展。在别处寻求这些信息。一个好的开始是Silk Module Creator

您需要在扩展程序布局文件中使用带有块的参考notifications区域。

文件结构

以下是我们将要介绍的文件:

app/code/local/Yourcompany/Youextension/Block/Adminhtml/Notifications.php     
app/code/local/Yourcompany/Youextension/etc/config.xml
app/code/local/Yourcompany/Youextension/Model/Notification.php
app/code/local/Yourcompany/Youextension/Model/Observer.php
design/adminhtml/default/default/layout/yourcompany/yourextension.xml

配置:app / code / local / Yourcompany / Youextension / etc / config.xml

正如其他所有内容都在config.xml开始。您可能已经为扩展程序定义了块和模型部分,但我已将它们包含在此处以供完成。

需要注意的重要部分是对布局文件的引用以及我们设置用于侦听消息的观察者:

<?xml version="1.0"?>
<config>
    <modules>
        <Yourcompany_Yourextension>
            <version>0.1.0</version>
        </Yourcompany_Yourextension>
    </modules>
    <global>
        ...
        <blocks>
            <yourextension>
                <class>Yourcompany_Yourextension_Block</class>
            </yourextension>
        </blocks>
        <models>
            <yourextension>
                <class>Yourcompany_Yourextension_Model</class>
            </yourextension>
        </models>
        <events>
            <yourextension_notifications_before>
                <observers>
                    <yourextension_observer>
                        <type>singleton</type>
                        <class>Yourcompany_Yourextension_Model_Observer</class>
                        <method>checkMessages</method>
                    </yourextension_observer>
                </observers>
            </yourextension_notifications_before>
        </events>

        ...
    <adminhtml>
        ...
        <layout>
            <updates>
                <yourextension>
                    <file>yourcompany/yourextension.xml</file>
                </yourextension>
            </updates>
        </layout>
        ...
    </adminhtml>
</config>

布局:design / adminhtml / default / default / layout / yourcompany / yourextension.xml

在布局文件中,您必须引用通知区域。它简称为notifications

<default>是要使用此布局的路径。 <default>意味着无处不在。

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>
        <reference name="notifications">
            <block type="yourextension/adminhtml_notifications" name="notifications_yourcompany" />
        </reference>
    </default>
</layout>

块部件类型是让Magento查找块的字符串。

<block type="yourextension/adminhtml_notifications" name="notifications_yourcompany" />

第一部分yourextension显然告诉它要查看您的扩展路径:app/code/local/Yourcompany/Youextension

第二部分adminhtml_notifications变成:Adminhtml/Notifications.php

这两个部分由Block粘合在一起,你有,中提琴:app/code/local/Yourcompany/Youextension/Block/Adminhtml/Notifications.php

<block name="yourextension"/>中的名称必须是唯一的。

应用程序/代码/本地/ Yourcompany / Youextension /砌块/ Notifications.php

在此示例中,块将获取数据并直接呈现HTML。通常你也会包含一个模板,但为此没有必要。

要获取消息,我们使用oberserver模式。这意味着我们发出一条消息,告知我们要写出通知。这意味着扩展程序的其他部分甚至其他扩展程序都可以选择添加邮件。

这是Mage::dispatchEvent('yourextension_notifications_before')部分。

如果扩展程序的另一部分侦听此事件并将消息添加到我们的通知模型,那么我们很幸运。事实上,我们已经从config.xml知道我们的Observer模型会听取此事件。

因此,当我们在getMessages()模型上拨打Notification时,消息会神奇地出现。

_toHtml的最后一部分是呈现通知的内容。

class Yourcompany_Yourextension_Block_Adminhtml_Notifications extends Mage_Adminhtml_Block_Template
{
    public function _toHtml($className = "notification-global")
    {
        // Let other extensions add messages
        Mage::dispatchEvent('yourextension_notifications_before');
        // Get the global notification object
        $messages = Mage::getSingleton('yourextension/notification')->getMessages();
        $html = null;
        foreach ($messages as $message) {
            $html .= "<div class='$className'>" . $message . "</div>";
        }
        return $html;
    }
}

型号:app / code / local / Yourcompany / Youextension / Model / Notification.php

该模型对我们来说非常简单。可以将Notification模型视为消息的容器而不是单个通知。

class Yourcompany_Yourextension_Model_Notification extends Varien_object
{
    protected $messages = [ ];

    public function getMessages()
    {
        return $this->messages;
    }

    public function setMessages($messages)
    {
        $this->messages = $messages;
        return $this;
    }

    public function addMessage($message)
    {
        $this->messages[] = $message;
        return $this;
    }
}

观察者(发件人):app / code / local / Yourcompany / Youextension / Model / Observer.php

观察者是魔法的最后一块。我们在config.xml进行了设置以收听yourextension_notifications_before。因此,当我们的块即将渲染时,我们可以选择首先向Notification模型添加消息。

class Yourcompany_Yourextension_Model_Observer
{

    public function checkMessages($observer)
    {
        $notifications = Mage::getSingleton('yourextension/notification');
        $notifications->addMessage("I was sent by Yourextension");
        return $observer;
    }
}

总结

因此,一旦你的扩展启动它就会注册Model/Observer来监听某个事件 - 我们即将发布通知的事件。

我们创建了一个引用Magento自己的通知区域的布局,在所有页面上我们将渲染我们自己的块。

由于Model\Notification是一个单身人士,我们可以addMessage()来自我们的所有分机(以及外部),当我们致电getMessages()时,我们会全部收到它们。我们不必担心暂时存储多条消息。

就像我开始这个答案一样,我假设你所在的区域已经在你所包含的表格的页面上工作了。您应该将消息设置为Notification模型。

由您决定如何在会话中存储消息或使用模型资源保存在数据库中。