Domanda

Mi è stato chiesto di valutare gli standard di codifica per un'installazione di Magento personalizzata e avere incontrato quattro cartelle che sono stati spostati nella cartella locale / Mage al fine di override del core / Mage.

Le cartelle che sono stati spostati sono:

Mage/Customer
Mage/Page
Mage/Review
Mage/Wishlist

La preoccupazione principale è Pagina (per ovvie ragioni) in quanto controlla il modello che viene utilizzato. Non sono sicuro di come avrei potuto cominciare a separare il sito in modo da non sovrascrivere il nucleo in questo modo in modo vorrebbe qualche consiglio per favore?

Quale sarebbe il miglior approccio qui ??

locale / Mage / Pagina / config.xml

<config>
    <modules>
        <Mage_Page>
            <version>1.6.0.0</version>
        </Mage_Page>
    </modules>
    <global>
        <models>
            <page>
                <class>Mage_Page_Model</class>
            </page>
        </models>
        <blocks>
            <page>
                <class>Mage_Page_Block</class>
            </page>
        </blocks>
        <page>
            <layouts>
                <empty module="page" translate="label">
                    <label>Empty</label>
                    <template>page/empty.phtml</template>
                    <layout_handle>page_empty</layout_handle>
                </empty>
                <one_column module="page" translate="label">
                    <label>1 column</label>
                    <template>page/1column.phtml</template>
                    <layout_handle>page_one_column</layout_handle>
                    <is_default>1</is_default>
                </one_column>
                <two_columns_left module="page" translate="label">
                    <label>2 columns with left bar</label>
                    <template>page/2columns-left.phtml</template>
                    <layout_handle>page_two_columns_left</layout_handle>
                </two_columns_left>
                <two_columns_right module="page" translate="label">
                    <label>2 columns with right bar</label>
                    <template>page/2columns-right.phtml</template>
                    <layout_handle>page_two_columns_right</layout_handle>
                </two_columns_right>
                <three_columns module="page" translate="label">
                    <label>3 columns</label>
                    <template>page/3columns.phtml</template>
                    <layout_handle>page_three_columns</layout_handle>
                </three_columns>
                <home module="page" translate="label">
            <label>Home</label>
            <template>page/1column_home.phtml</template>
            <layout_handle>page_home</layout_handle>
        </home>

            </layouts>
        </page>
    </global>
    <frontend>
        <translate>
            <modules>
                <Mage_Page>
                    <files>
                        <default>Mage_Page.csv</default>
                    </files>
                </Mage_Page>
            </modules>
        </translate>
        <layout>
            <updates>
                <page>
                    <file>page.xml</file>
                </page>
            </updates>
        </layout>
    </frontend>
    <adminhtml>
        <translate>
            <modules>
                <Mage_Page>
                    <files>
                        <default>Mage_Page.csv</default>
                    </files>
                </Mage_Page>
            </modules>
        </translate>
    </adminhtml>
    <install>
        <translate>
            <modules>
                <Mage_Page>
                    <files>
                        <default>Mage_Page.csv</default>
                    </files>
                </Mage_Page>
            </modules>
        </translate>
    </install>
    <default>
        <design>
            <head translate="default_description" module="page">
                <default_title>Magento Commerce</default_title>
                <default_description>Default Description</default_description>
                <default_keywords>Magento, Varien, E-commerce</default_keywords>
                <default_robots>*</default_robots>
                <default_media_type>text/html</default_media_type>
                <default_charset>utf-8</default_charset>
            </head>
            <header translate="welcome" module="page">
                <logo_src>images/logo.gif</logo_src>
                <logo_alt>Magento Commerce</logo_alt>
                <welcome>Default welcome msg!</welcome>
            </header>
            <footer translate="copyright" module="page">
                <copyright>&amp;copy; 2012 Magento Demo Store. All Rights Reserved.</copyright>
            </footer>
        </design>
        <system>
            <media_storage_configuration>
                <allowed_resources>
                    <site_favicons>favicon</site_favicons>
                </allowed_resources>
            </media_storage_configuration>
        </system>
    </default>
</config>
È stato utile?

Soluzione

ho intenzione di rispettosamente accordo con Fabian se solo per prendere il punto di vista contrarian (la sua valutazione di un modo migliore è spot-on):

Non è mai bene.

Copia di file nella piscina codice locale dovrebbe essere un metodo di ultima istanza. Queste ultime località sono i seguenti motivi:

  • Ogni metodo nella classe deve cambiare sostanzialmente (potrebbe ancora utilizzare una riscrittura, ma ok.)
  • Non Sei Backport un file di classe da una versione più recente o meno recente di Magento per supportare un plugin o moduli Connect si sta lavorando. Questo è un caso raro bordo; copiando la classe e ricadendo alla piscina codice locale ti permette di fare questo con garbo senza realmente sovrascrivere il nucleo stesso.
  • Non Sei patch Magento fino a quando una patch nucleo è rilasciato per un problema noto o sospetto (e probabilmente avete segnalato come un bug legittima con un diff per patch)
  • Stai facendo tutte le modifiche a tutti per Zend Framework o file Varien lib

Tutto il resto può essere fatto con riscritture, osservatori. Sono del parere che la copia per app/code/local/Mage è la via più facile e non dovrebbe mai essere utilizzato a corto di debugging.

Utilizzando app/code/local/Mage rende difficile i problemi di debug nei negozi, soprattutto quando si cambiano gli sviluppatori o persone che non conoscono stanno avendo per ordinare attraverso i problemi.

Si rende anche l'aggiornamento più fastidioso. Invece di aggiornare il proprio nucleo, è necessario ora diff manualmente tutti i file di classe app/code/local/Mage contro i loro paramenti ormai aggiornati. Questo è da incubo; Fabian toccato questo.

Altri suggerimenti

Sì, lo è, ma ...

Va bene per ignorare core / Mage / Pagina spostandolo al codePool locale?

Per prima cosa: sì, è, questa è l'intenzione del include_path. Ma se si pensa che un po 'più profondo (è questo corretto inglese?) Allora No. È una pessima idea.

Quando si sovrascrive la classe in questo modo, si hanno grossi problemi dopo gli aggiornamenti, perché il vecchio (cambio) classe viene caricata una nessuna delle modifiche viene utilizzata la versione più recente.

Modo migliore

Il modo migliore è quello di utilizzare <rewrite>s. Il grande vantaggio è, che si estende la classe mago originale e quindi si è in grado di aggiornare il vostro core Magento. In seguito solo le modifiche apportate in modo esplicito da parte di sovrascrivere il metodo sono ancora esistenti. vengono utilizzati gli altri aggiornamenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top