Core/Mage/Pageを地元のCodepoolに移動してオーバーライドしても大丈夫ですか?
-
16-10-2019 - |
質問
カスタマイズされたMagentoのインストールのコーディング基準を評価するように求められており、コア/メイジをオーバーライドするためにローカル/メイジフォルダーに移動された4つのフォルダーに遭遇しました。
移動されたフォルダーは次のとおりです。
Mage/Customer
Mage/Page
Mage/Review
Mage/Wishlist
主な関心事は、使用されているテンプレートを制御するため、ページ(明らかな理由で)です。この方法でコアをオーバーライドしないように、どのようにサイトを分離し始めることができるかわかりませんので、アドバイスをお願いします。
ここで最良のアプローチは何ですか?
ローカル/メイジ/ページ/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>&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>
解決
私は敬意を表します 同意しない 逆の視点をとるだけでファビアンと一緒に(より良い方法の彼の評価はスポットオンです):
それは決して大丈夫です。
ファイルをローカルコードプールにコピーすることは、最後の手段の方法である必要があります。これらの最後の手段には、次の理由が含まれています。
- すべての方法 クラスでは大幅に変更する必要があります(まだ書き直しを使用できますが、わかりました。)
- あなたは バックポート 作業中のプラグインまたは接続モジュールをサポートするMagentoの新しいまたは古いバージョンのクラスファイル。これはまれなエッジケースです。クラスをコピーしてローカルコードプールに戻ると、実際にコア自体を上書きすることなく、これを優雅に行うことができます。
- あなたは Magentoにパッチを当てます 既知または疑わしい問題のコアパッチがリリースされるまで(そしておそらく、パッチする差別を伴う合法的なバグとして報告した可能性があります)
- あなたは作っています 変更はまったくありません Zend FrameworkまたはVarien Libファイルに
他のすべては、書き直し、オブザーバーで行うことができます。私はコピーするという見解を取ります app/code/local/Mage
簡単な方法であり、デバッグ以外では使用しないでください。
使用 app/code/local/Mage
特に、開発者や馴染みのない人々を変える人が問題を整理しなければならない場合、店舗で問題をデバッグすることを困難にします。
また、より厄介なアップグレードを作成します。コアをアップグレードするのではなく、今では手動ですべてを分割する必要があります app/code/local/Mage
現在アップグレードされているCanonicalsに対するクラスファイル。これは悪夢です。ファビアンはこれに触れました。
他のヒント
はい、そうですが...
Core/Mage/Pageを地元のCodepoolに移動してオーバーライドしても大丈夫ですか?
最初:はい、これはcontlude_pathの意図です。しかし、少し深く(これは正しい英語ですか?)と思うなら、いいえ。それは非常に悪い考えです。
このようにクラスを上書きすると、アップグレード後に大きな問題が発生します。これは、古い(変更)クラスにロードされているため、新しいバージョンの変更は使用されないためです。
もっといい方法
より良い方法は使用することです <rewrite>
s。大きな利点は、元のMageクラスを拡張しているため、Magento Coreをアップグレードできることです。その後、メソッドを上書きすることで明示的に行った変更のみがまだ存在します。他の更新が使用されます。