フロントエンドのHTMLヘッドを拡張することは、バックエンドでは機能しませんか?

magento.stackexchange https://magento.stackexchange.com/questions/5955

  •  16-10-2019
  •  | 
  •  

質問

私はこれを少し正しくしようとしてきましたが、私が見たとき adminhtml_head ブロック私はそれが伸びていることがわかります html_head ブロック。私は拡張しました html_head CDNアイテムを追加できるようにブロックします。レイアウトXMLを調整すると正面で正常に動作しますが、バックエンドのレイアウトXMLを調整すると、拡張クラスでスキップするため、上書きは機能しません。基本的に私がやったことは、JavaScriptを追加してテストすることです 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 Classがどのように仕事を書き直しているのかよくわからないように聞こえますが、心配しないでください。

PHPのオブジェクトシステムには、Duck Tying/Money-PatchingシステムのようなRuby/Pythonがありません。つまり、Magentoは、直接インスタンス化されたクラスを書き直すことのみを可能にします。

つまり、工場の方法でインスタンス化されたブロックオブジェクト(このようなものになります)

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

Magentoは構成をスキャンし、aを探します <page/> とのノード <rewrite/> 子ノード。見つけた場合、内部に見えます <rewrite/> aのノード <html_head/> ノード。そのノード内にクラスが見つかった場合、代わりにそのクラスを使用してオブジェクトをインスタンス化します。

したがって、管理コンソールアプリケーションでは、ヘッドブロックはこのようなものでインスタンス化されます

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

これは、管理コンソールがクラスの書き換えを無視することを意味します。 page/html_head ブロック。

短い話の短い:あなたは2番目のクラスを書き直す必要があります adminhtml/page_head ブロック。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top