Est-il correct de passer outre noyau / Mage / Page en le déplaçant au codePool local?

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

  •  16-10-2019
  •  | 
  •  

Question

Il m'a été demandé d'évaluer les normes de codage pour une installation personnalisée Magento et sont venus dans quatre dossiers qui ont été déplacés dans le dossier local / Mage pour override le noyau / Mage.

Les dossiers qui ont été déplacés sont:

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

La principale préoccupation est la page (pour des raisons évidentes) car il contrôle le modèle qui est utilisé. Je ne sais pas comment je pourrais commencer à séparer le site afin de ne pas passer outre le noyau de cette manière serait donc que quelques conseils s'il vous plaît?

Quelle serait la meilleure approche ici ??

local / Mage / Page / 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>
Était-ce utile?

La solution

Je vais respectueusement en désaccord avec Fabian si juste de prendre le point de vue à contre-courant (son évaluation d'une meilleure façon est sur place):

Il est jamais bien.

Copier des fichiers vers le pool de code local doit être une méthode de dernier recours. Ces dernières stations comprennent les raisons suivantes:

  • Chaque méthode dans la classe doit changer substantiellement (pourrait encore utiliser une ré-écriture, mais ok.)
  • Vous êtes rétroportage un fichier de classe d'une plus récente ou ancienne version de Magento pour soutenir un plug-in ou le module Connect vous travaillez avec. Ceci est un cas rare de bord; la copie de la classe et retombant à la piscine de code local vous permet de le faire gracieusement sans écraser réellement le noyau lui-même.
  • Vous êtes Correctif Magento jusqu'à ce qu'un correctif de base est libéré pour un problème connu ou suspecté (et vous avez probablement signalé comme un bug légitime avec un diff patch)
  • Vous faites tout changement du tout pour Zend Framework ou les fichiers de Varien

Tout le reste peut être fait avec réécritures, observateurs. Je suis d'avis que la copie à app/code/local/Mage est la facilité et ne doit jamais être utilisé à court de débogage.

Utilisation app/code/local/Mage rend difficile aux problèmes de débogage dans les magasins, en particulier en cas de changement des développeurs ou des personnes non familières sont amenés à trier les questions.

Il rend également la mise à niveau plus gênants. Plutôt que de mettre à jour votre base, vous devez maintenant diff manuellement tous les fichiers de classe app/code/local/Mage contre leurs sacerdotaux maintenant mis à niveau. C'est cauchemardesque; Fabian a touché à ce sujet.

Autres conseils

Oui il est, mais ...

Est-il correct de passer outre noyau / Mage / Page en le déplaçant au codePool local?

Tout d'abord: oui, il est, c'est l'intention du include_path. Mais si vous pensez un peu plus profond (est-ce correct anglais?) Puis Non, c'est une très mauvaise idée.

Lorsque vous écrasez la classe de cette façon, vous avez de gros problèmes après les mises à niveau, parce que l'ancien (changé) classe est chargée d'aucun des changements est utilisé de la nouvelle version.

Une meilleure façon

La meilleure façon est d'utiliser <rewrite>s. Le gros avantage est que vous étendez le mettre à jour votre base de magento classe d'origine et donc mage vous êtes en mesure. Après que les modifications apportées explicitement la méthode par écrasement sont encore existants. Les autres mises à jour sont utilisées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top