estendendo la testa html per frontend non funziona per il back-end?
Domanda
Ho cercato di ottenere questo diritto per un po ', ma quando guardo il blocco adminhtml_head
vedo che si estende fuori del blocco html_head
. Ho esteso il blocco html_head
modo che io possa aggiungere una voce di CDN. Funziona bene sul fronte quando ho regolare il codice XML di layout, ma quando ho regolare il xml layout per il back-end che salta di classe sopra estesa, in modo che il sovrascrittura non funziona. Fondamentalmente quello che ho fatto è prova facendo aggiunto un javascript per il adminhtml / page_head e che i lavori utilizzando il tipo di add_js
normale. Ma quando vado a utilizzare il tipo cdn_js
, poiché non è colpire il mio metodo, semplicemente salta esso.
C'è qualche ragione per cui l'amministratore non si sarebbe ripresa la mia scrittura sopra anche tu sia la fine di amministrazione per estendere al largo della Mage_Page_Block_Html_Head
nucleo?
Nel mio config ho questo
<blocks>
<page>
<rewrite>
<html_head>Wsu_Storeutilities_Block_Html_Head</html_head>
</rewrite>
</page>
</blocks>
che lavora per il fronte. Ho provato molte combinazioni diverse per ottenere l'adminhtml di raccogliere così senza fortuna.
Soluzione
La testata predefinita nel backend è un'istanza di Mage_Adminhtml_Block_Page_Head
(adminhtml / page_head). È necessario ignorare che anche e aggiungere il tuo metodo.
Anche se Mage_Adminhtml_Block_Page_Head
estende Mage_Page_Block_Html_Head
e hai Mage_Page_Block_Html_Head
sovrascritto il blocco utilizzata nel backend estende ancora la classe originale Magento, ei tuoi metodi non è presente in essa.
[EDIT]
I suoi blocchi di riscrivere la sezione dovrebbe essere simile a questo:
<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>
Quindi creare il file Wsu/Storeutilities/Block/Adminhtml/Page/Head.php
con questo contenuto:
<?php
class Wsu_Storeutilities_Block_Adminhtml_Page_Head extends Mage_Adminhtml_Block_Page_Head{
//your methods here
}
Altri suggerimenti
Sembra che tu non capisco come classe Magento riscrive lavoro - ma non preoccupatevi, è una cosa abbastanza facile da essere confuso circa.
sistema a oggetti di PHP non ha un rubino / python come l'anatra tipizzazione / sistema monetario-patch. Ciò significa Magento consente solo di riscrivere una classe direttamente un'istanza.
Cioè, quando un oggetto blocco in istanziato con un metodo factory (che sembra qualcosa di simile)
$layout->createBlock('page/html_head');
Magento esplorerà la configurazione e il look per un nodo <page/>
con un nodo <rewrite/>
bambino. Se ne trova uno, apparirà all'interno del nodo <rewrite/>
per un nodo <html_head/>
. Se trova una classe dentro quel nodo, esso un'istanza dell'oggetto utilizzando tale classe invece.
Quindi, nell'applicazione di console di amministrazione, il blocco di testa viene creata un'istanza con qualcosa di simile
$layout->createBlock('adminhtml/page_head')
Questo significa che la console di amministrazione ignorerà il vostro riscrittura di classe, dal momento che la configurazione riscrive solo il blocco page/html_head
.
Per farla breve: Avete bisogno di una seconda classe di riscrittura per il blocco adminhtml/page_head
.