扩展HTML前端的HTML头不适用于后端吗?
题
我一直在努力使这一点有一点,但是当我看着 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
堵塞。