我一直在努力使这一点有一点,但是当我看着 adminhtml_head 我看到它延伸了 html_head 堵塞。我已经扩展了 html_head 阻止我可以添加一个CDN项目。当我调整布局XML时,它在正面正常工作,但是当我调整后端的布局XML时,它跳过了扩展类,因此覆盖物不起作用。基本上我所做的是通过在 Adminhtml/page_head 这是使用普通的 add_js 类型。但是当我去使用 cdn_js 键入,因为它没有达到我的方法,所以它只是跳过它。

是否有任何理由让管理员也不会接我的我的写作 Mage_Page_Block_Html_Head ?

在我的配置中,我有这个

<blocks>
<page>
<rewrite>
    <html_head>Wsu_Storeutilities_Block_Html_Head</html_head>
</rewrite>
</page>
</blocks>

哪个适合前线。我尝试了许多不同的组合来使AdminHTML也没有运气。

有帮助吗?

解决方案

后端中的默认头块是 Mage_Adminhtml_Block_Page_Head (adminhtml/page_head)。您还需要覆盖该方法并添加您的方法。
即使 Mage_Adminhtml_Block_Page_Head 扩展 Mage_Page_Block_Html_Head 而且您已经覆盖了 Mage_Page_Block_Html_Head 后端使用的块仍然扩展了原始的Magento类,并且您的方法不存在。
编辑
您的块重写部分应该看起来像这样:

<blocks>
    <page><!-- rewrite the frontend head block -->
        <rewrite>
            <html_head>Wsu_Storeutilities_Block_Html_Head</html_head>
        </rewrite>
    </page>
    <adminhtml><!-- rewrite admin head block -->
        <rewrite>
            <page_head>Wsu_Storeutilities_Block_Adminhtml_Page_Head</page_head>
        </rewrite>
    </adminhtml>
</blocks>

然后创建文件 Wsu/Storeutilities/Block/Adminhtml/Page/Head.php 使用此内容:

<?php
class Wsu_Storeutilities_Block_Adminhtml_Page_Head extends Mage_Adminhtml_Block_Page_Head{
    //your methods here
}

其他提示

听起来您不太了解Magento班级的重写如何 - 但是不用担心,这是一件容易的事,可以混淆。

PHP的对象系统没有Ruby/Python,例如Duck-Typing/MoneyPatching System。这意味着Magento仅允许您重写直接实例化的类。

也就是说,当用工厂方法实例化的块对象(看起来像这样)

$layout->createBlock('page/html_head');

Magento将扫描配置并寻找 <page/> 带有A的节点 <rewrite/> 儿童节点。如果找到一个,它将看着 <rewrite/> a的节点 <html_head/> 节点。如果它在该节点内找到一个类,它将使用该类实例化对象。

因此,在管理控制台应用程序中,将头部块与这样的东西实例化

$layout->createBlock('adminhtml/page_head')

这意味着管理控制台将忽略您的类重写,因为您的配置仅重写 page/html_head 堵塞。

长话短说:您需要重写第二类 adminhtml/page_head 堵塞。

许可以下: CC-BY-SA归因
scroll top