Ist es in Ordnung, Core/Mage/Seite zu überschreiben, indem Sie es in den lokalen Codepool verschieben?

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

  •  16-10-2019
  •  | 
  •  

Frage

Ich wurde gebeten, die Codierungsstandards für eine maßgeschneiderte Magento -Installation zu bewerten und bin auf vier Ordner gestoßen, die in den lokalen/magierenden Ordner verschoben wurden, damit die Kern-/Magierin überschreibt.

Die Ordner, die bewegt wurden, sind:

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

Das Hauptanliegen ist Seite (aus offensichtlichen Gründen), da es die verwendete Vorlage kontrolliert. Ich bin mir nicht sicher, wie ich anfangen könnte, die Website zu trennen, um den Kern auf diese Weise nicht außer Kraft zu setzen.

Was wäre hier der beste Ansatz?

Lokal/Magier/Seite/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>
War es hilfreich?

Lösung

Ich werde respektvoll nicht zustimmen mit Fabian, wenn auch nur den kontrarischen Standpunkt einnehmen (seine Einschätzung eines besseren Weges ist genau richtig):

Es ist nie in Ordnung.

Das Kopieren von Dateien in den lokalen Codepool sollte eine Methode des letzten Auswegs sein. Diese letzten Resorts enthalten die folgenden Gründe:

  • Jede Methode in der Klasse muss sich erheblich ändern (könnte immer noch ein Umschreiben verwenden, aber ok.)
  • Du bist Backporting Eine Klassendatei aus einer neueren oder älteren Version von Magento zur Unterstützung eines Plugin- oder Verbindungsmoduls, mit dem Sie arbeiten. Dies ist ein seltener Randfall; Wenn Sie die Klasse kopieren und auf den lokalen Codepool zurückfallen, können Sie dies anmutig tun, ohne den Kern selbst tatsächlich zu überschreiben.
  • Du bist Patching Magento Bis ein Kernpatch für ein bekanntes oder mutmaßliches Problem veröffentlicht wird (und Sie haben es wahrscheinlich als legitimer Fehler mit einem Diff -zu -Patch -Patch gemeldet)
  • Du machst Änderungen überhaupt Zend Framework oder VIERIEN LIB -Dateien

Alles andere kann mit Umschreiben, Beobachtern gemacht werden. Ich bin die Ansicht, dass das Kopieren zu app/code/local/Mage ist der einfache Ausweg und sollte niemals kurz vor dem Debuggen eingesetzt werden.

Verwendung app/code/local/Mage Ermöglicht es schwierig, Probleme in Geschäften zu debuggen, insbesondere wenn sich die Unbekannten von Entwicklern oder Menschen um Probleme kümmern müssen.

Es macht auch das Upgrade mehr problematisch. Anstatt Ihren Kern zu aktualisieren, müssen Sie jetzt alle manuell alle differenzieren app/code/local/Mage Klassendateien gegen ihre inzwischen hochgestuften Kanoniken. Das ist albtraumhaft; Fabian hat das angesprochen.

Andere Tipps

Ja, aber ...

Ist es in Ordnung, Core/Mage/Seite zu überschreiben, indem Sie es in den lokalen Codepool verschieben?

Erstens: Ja, dies ist die Absicht des Include_Paths. Aber wenn Sie ein bisschen tiefer denken (ist das richtig Englisch?) Dann ist es eine sehr schlechte Idee.

Wenn Sie die Klasse auf diese Weise überschreiben, haben Sie nach Upgrades große Probleme, da die alte (veränderte) Klasse geladen wird und keine der Änderungen der neueren Version verwendet wird.

Besserer Weg

Der bessere Weg ist zu verwenden <rewrite>s. Der große Vorteil ist, dass Sie die ursprüngliche Magierklasse erweitern und daher Ihren Magento -Kern aktualisieren können. Danach gibt es nur die Änderungen, die Sie explizit durch Überschreiben der Methode vorgenommen haben. Die anderen Updates werden verwendet.

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