Come sovrascrivere i file del modello principale da un modulo personalizzato?


10

Voglio sovrascrivere due file. Vale a dire il view.phtmle print.phtmldegli ordini di vendita.
(percorso: app/design/frontend/base/default/template/sales/order/)

Sto creando un modulo in cui voglio creare un percorso in app/design/frontend/base/default/template/<My Module Name>/sales/order/modo che il core view.phtmle i print.phtmlfile non vengano sovrascritti.

Quindi, per favore, guidami come realizzare questo compito.

Risposte:


13

Puoi farlo con un file XML di layout all'interno del tuo modulo. È necessario disporre di una sezione del modulo in config.xmlquesto modo per consentire a Magento di caricare l'XML di layout del modulo (percorso:) app/design/frontend/base/default/layout/mymodulename.xml:

<config>
    [...]
    <frontend>
        [...]
        <layout>
            <updates>
                <mymodulename_layout module="MyModuleName">
                    <file>mymodulename.xml</file>
                </mymodulename_layout>
            </updates>
        </layout>
    </frontend>

In questo file XML di layout è possibile fare riferimento ai blocchi specifici e modificarne il modello.

<layout>
    <sales_order_view>
        <reference name="sales.order.view">
            <action method="setTemplate">
                <template>mymodulename/sales/order/view.phtml</template>
            </action>
        </reference>
    </sales_order_view>
    <sales_order_print>
        <reference name="sales.order.print">
            <action method="setTemplate">
                <template>mymodulename/sales/order/print.phtml</template>
            </action>
        </reference>
    </sales_order_print>
</layout>

@ 7ochem, come ottenere lo stesso in magento2?
prasad maganti,

Dovresti porlo come una nuova domanda in quanto è troppo ampio per inserirlo in un commento qui e non è quello che l'OP sta chiedendo
7ochem

3

Supponiamo che il nostro nome del modulo 'CustomSales' e il nome del pacchetto "Esercizio".

Passaggio 1: creare un file di configurazione del modulo in app / etc / modules / Exercise_CustomSales.xml

<config>
<modules>
    <Exercise_CustomSales>
        <active>true</active>
        <codePool>local</codePool>
    </Exercise_CustomSales>
</modules>

Passaggio 2: creare un file di configurazione in app / code / local / Exercise / CustomSales / etc / config.xml

<config>
<modules>
    <Exercise_CustomSales>
        <version>1.7.0.2</version>
    </Exercise_CustomSales>
</modules>
<global>
    <blocks>
        <customsales>
            <class>Exercise_CustomSales_Block</class>
        </customsales>
        <sales>
            <rewrite>
                <order_view>Exercise_CustomSales_Block_Sales_Order_View</order_view>
            </rewrite>
        </sales>
    </blocks>
</global>

Passaggio 3: Creare un file php che sia sovrascrivere il file view.phtml effettivo, app / code / local / Exercise / CustomSales / Block / Sales / Order / View.php

class Exercise_CustomSales_Block_Sales_Order_View estende Mage_Sales_Block_Order_View
{
    funzione protetta _construct ()
    {
        parent :: _ construct ();
        $ This-> setTemplate ( 'customsales / vendite / ordine / view.phtml');
    }
}

Passaggio 4: è necessario creare un file local.xml all'interno della cartella di layout (Percorso possibile: app / design / frontend / pacchetto / tema / layout). Questo è per print.phtml.

ad es. (app / design / frontend / rwd / default / layout / local.xml)

<layout>
<sales_order_print>
    <reference name="sales.order.print">
        <action method="setTemplate">
            <template>customsales/sales/order/print.phtml</template>
        </action>
    </reference>
</sales_order_print>

Sposta il file view.phtml e print.phtml all'interno di "app / design / frontend / pacchetto / tema / modello / dogana / vendite / ordine".

Cancella cache magento.


Non è necessario riscrivere l'intero blocco. Nella mia risposta il costruttore di Mage_Sales_Block_Order_Viewget viene chiamato per primo e imposta il modello, quindi setTemplateviene chiamato avviato dal XML del layout dal mio esempio e imposta il modello personalizzato. Vorrei cercare soluzioni che non usino le riscritture in quanto potrebbero potenzialmente causare conflitti.
ottobre

7ochem ha ragione. Non è necessario impostare il modello in blocco. La soluzione di 7ochem è buona e ha funzionato per me.
Rajan Faldu,

Dipende da te. Se si sovrascrive o si aggiunge un metodo php, è necessario sovrascrivere il blocco, altrimenti è sufficiente modificare il modello tramite module.xml o local.xml. La mia soluzione non ha effetto su nessuna versione di Magento, immagino.
Sohel Rana,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.