Das Erweitern des HTML-Kopfes für das Frontend funktioniert nicht für das Backend?

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

  •  16-10-2019
  •  | 
  •  

Frage

Ich habe eine Weile versucht, das richtig hinzubekommen, aber wenn ich mir das ansehe adminhtml_head Block Ich sehe, dass er über den Block hinausragt html_head Block.Ich habe das erweitert html_head blockieren, damit ich ein CDN-Element hinzufügen kann.Auf der Vorderseite funktioniert es einwandfrei, wenn ich die Layout-XML anpasse, aber wenn ich die Layout-XML für das Back-End anpasse, werden die erweiterten Klassen übersprungen, sodass das Überschreiben nicht funktioniert.Im Grunde habe ich es getestet, indem ich ein Javascript hinzugefügt habe adminhtml/page_head und das funktioniert mit dem Normalen add_js Typ.Aber wenn ich das benutze cdn_js Typ, da es meine Methode nicht trifft, wird es einfach übersprungen.

Gibt es einen Grund dafür, dass der Administrator meine Überschreibung nicht aufgreift, selbst wenn beide Administratoren am Ende über den Kern hinausgehen? Mage_Page_Block_Html_Head ?

In meiner Konfiguration habe ich das

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

Was für vorne funktioniert.Ich habe viele verschiedene Kombinationen ausprobiert, um auch das Admin-HTML zum Laufen zu bringen, ohne Erfolg.

War es hilfreich?

Lösung

Der Standard -Kopfblock im Backend ist eine Instanz von Mage_Adminhtml_Block_Page_Head (adminHtml/page_head). Sie müssen dies auch überschreiben und Ihre Methode hinzufügen.
Selbst wenn Mage_Adminhtml_Block_Page_Head erweitert Mage_Page_Block_Html_Head Und du hast überschrieben Mage_Page_Block_Html_Head Der im Backend verwendete Block erweitert immer noch die ursprüngliche Magento -Klasse, und Ihre Methoden sind nicht darin enthalten.
BEARBEITEN
Ihre Blöcke Umschreiben sollten so aussehen:

<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>

Erstellen Sie dann die Datei Wsu/Storeutilities/Block/Adminhtml/Page/Head.php Mit diesem Inhalt:

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

Andere Tipps

Es hört sich so an, als ob Sie nicht ganz verstehen, wie das Umschreiben von Magento-Klassen funktioniert – aber keine Sorge, es ist leicht genug, um verwirrt zu werden.

Das Objektsystem von PHP verfügt nicht über ein Ruby/Python-ähnliches Duck-Typing/Money-Patching-System.Das bedeutet, dass Sie mit Magento nur eine direkt instanziierte Klasse neu schreiben können.

Das heißt, wenn ein Blockobjekt mit einer Factory-Methode instanziiert wird (die in etwa so aussieht)

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

Magento scannt die Konfiguration und sucht nach einer <page/> Knoten mit a <rewrite/> untergeordneter Knoten.Wenn es eines findet, wird es hineinschauen <rewrite/> Knoten für a <html_head/> Knoten.Wenn innerhalb dieses Knotens eine Klasse gefunden wird, instanziiert es das Objekt stattdessen mithilfe dieser Klasse.

In der Admin-Konsolenanwendung wird der Head-Block also mit etwas wie diesem instanziiert

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

Das bedeutet, dass die Admin-Konsole Ihre Klassenumschreibung ignoriert, da Ihre Konfiguration nur die umschreibt page/html_head Block.

Um es kurz zu machen:Sie benötigen dafür eine Umschreibung der zweiten Klasse adminhtml/page_head Block.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top