タグ付けされた質問 「best-practice」

Magentoのベストプラクティスに関連する質問を示します。

2
Magento 2:ヘルパーの適切な使用
テンプレートファイルで以下を使用できるようにするために、ヘルパークラスを宣言する人がますます増え始めています。 $this->helper('Path/To/Helper/Class')->customMethod(); この種のコードを使用すると、オブジェクトマネージャーを直接使用しないという制限を回避できますが、これらのヘルパーでブロックコードになるコードが表示される傾向があります。 だからここに私の質問があります: ヘルパークラスに何を書けばよいですか? テンプレートでヘルパーメソッドを使用するのはどの場合に適切ですか。

1
Magento 2:PSRコンプライアンスに関するM2のステータスは何ですか?
だから、公式ドキュメントによると、私は、Magentoの2は、PSR-1とPSR-2に準拠していることを理解しています。 Magento 2は他のMagento 2に準拠しているか(または準拠する予定か)疑問に思っています。 PSR-3:ロガーインターフェイス PSR-4:オートローディング標準 PSR-6:キャッシングインターフェイス PSR-7:HTTPメッセージインターフェイス 私が期待する答えは、PSRドラフトを検討することもできます



2
リソースモデルを書き換えるときに非推奨の「Mysql4」クラスを処理する方法
書き直さなければならないMage_Catalog_Model_Resource_Category_Flat。 古いリソースクラスMage_Catalog_Model_Resource_Eav_Mysql4_Category_Flatは、下位互換性のためにMagento 1.7に引き続き存在し、新しいリソースクラスを拡張します。 完全なモデルエイリアスをコードベースで検索してresource_eav_mysql4_category_flatも、結果は得られませんでした。しかし、config.xmlMage_Catalogの次の行が含まれています。 <deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode> また、どこでどのようdeprecatedNodeに使用されているのかわかりません。 このようなリソースモデルを書き換えるときに予想される困難は何ですか?両方のクラスを書き直す必要がありますか?または、mysql4クラスを安全に無視できますか?

3
Magento 2-現在の日付を取得するためのベストプラクティス
updated_atカスタムエンティティの属性を保存し、Magento 2がそれをどのように処理するかを調べたベストプラクティスを知る必要があります。 私は\Magento\Eav\Model\Entity\Attribute\Backend\Time\Updated属性バックエンドモデルクラスを見て、ここにコードがあります: public function beforeSave($object) { $object->setData( $this->getAttribute()->getAttributeCode(), (new \DateTime())->format(\Magento\Framework\Stdlib\DateTime::DATETIME_PHP_FORMAT) ); return $this; } 私の最初の疑問は、どのタイムゾーンが考慮に入れられるかです。 DateTimeコンストラクタのシグネチャは次のとおりです。 public DateTime::__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] ) コンストラクタのドキュメントによると: $ timezoneを省略すると、現在のタイムゾーンが使用されます。 現在のタイムゾーンはサーバーレベルで構成されているタイムゾーンだと思います。 それを証明するには、次のPHPスニペットを実行します。 <?php var_dump(new DateTime()); 期待される結果は次のとおりです。 object(DateTime)#1 (3) { ["date"]=> string(26) "2016-05-10 12:47:11.000000" ["timezone_type"]=> int(3) ["timezone"]=> …

1
Magento 2ワークフローと開発ツール
コミュニティの他のメンバーが何を使用しているかを知り、M2開発のために提案します。 「推奨されるMagento 2.Xワークフローにはどのようなものがありますか?」 「Magento 2.Xの開発に使用されているツール/構成/プラグインは何ですか?」 これは主観的ですが、コミュニティのフィードバックを求めたいと思います。 ありがとうございました!

2
デメテルの法則違反を回避する方法(「新規オブジェクトは、注入可能なオブジェクトへのフィールド参照を保持してはなりません」)
依存性注入を使用するためのルールで、Magento 2 devdocsは次のように述べています。 Newableオブジェクトは、注入可能なオブジェクトへのフィールド参照を保持したり、コンストラクターでフィールド参照を要求したりしてはなりません。これはデメテルの法則違反です。 これは良い目標だと私は理解していますが、Magento 2モデルでこれを実際にどのように実現できますか? 新しいアーキテクチャの優れた例として示されているCustomerモジュールを見ると、顧客モデルコンストラクターのシグネチャは次のようになります。 public function __construct( \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Eav\Model\Config $config, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Customer\Model\ResourceModel\Customer $resource, \Magento\Customer\Model\Config\Share $configShare, \Magento\Customer\Model\AddressFactory $addressFactory, \Magento\Customer\Model\ResourceModel\Address\CollectionFactory $addressesFactory, \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder, GroupRepositoryInterface $groupRepository, \Magento\Framework\Encryption\EncryptorInterface $encryptor, \Magento\Framework\Stdlib\DateTime $dateTime, CustomerInterfaceFactory $customerDataFactory, DataObjectProcessor $dataObjectProcessor, \Magento\Framework\Api\DataObjectHelper $dataObjectHelper, \Magento\Customer\Api\CustomerMetadataInterface $metadataService, \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, …

1
コアテーブルとモジュールテーブルの関係に関する良い習慣
これはMagentoの開発に関する質問です。M1とM2の両方に適用できます。 ここ数週間、ネイティブMagentoエンティティ/データベーステーブルに直接関連するいくつかのモジュールに取り組んできました。 次に例を示しますが、これはいくつかのモジュール開発の場合に有効です。 (電子メールで説明されている)1人の顧客のみのショッピングカートルールを制限できるモジュール。 私はそれを行うには2つの可能な方法があるという結論に達しました、そして私はどちらが推奨されるものであるか疑問に思っています: 最初の方法:Magentoコアテーブルを使用する コアを編集しないでください。コアテーブルに適用できますか? テーブルにemail列を追加するsalesrule_rule 制限の適用は、モデルが読み込まれたときに行うことができます。 2番目の方法:カスタムテーブルを使用する カスタムモデルを使用しsalesrule_idてemailリンクされたカスタムテーブルを作成する 制限の適用は、(カスタムモデルの)追加の結合またはロードを実行することで実行できます。 戻る日に私はいつも直接コアテーブルを変更するために使用するが、今、これは正しい方法であるような気がしません。ただし、2番目の方法についてはパフォーマンスが心配です。 これに対処するための最良の/推奨される方法は何ですか?

2
Block関数がResourceModel関数を呼び出すことはベストプラクティスですか?
Blockクラスが、Modelクラスではなく、ResourceModelクラスの関数を介してデータを取得することは適切ですか? または、ブロックはモデルを呼び出し、次にリソースモデルに呼び出しを渡す必要がありますか? BlockからResourceModelに直接移動するのが最も簡単で、考えられるかなりの数の関数の重複を回避できますが、それは悪い形式であり、ベストプラクティスのパターンを壊すと思いますか?

1
複数の個別のストアを実行および更新するためのベストプラクティス
3年前、私は多くの独立した顧客のためにマジェントのウェブショップを運営する会社の一員でした。最後に経験したことは、すべてのショップに影響する変更(バグ修正)またはmagentoのアップグレードを行う場合、ケースバイケースでそれを行わなければならなかったということです。 すべてのショップを一度にアップグレードし、すべての一般的な問題を簡単な方法で修正できる構造を設定する方法がある場合は、ご意見をお寄せください。 すべてのショップのコアは同じですが、モジュールなどは異なる場合があります。それぞれが個別の店舗なので。

2
クラスを書き換えるための戦略
[TL:DR] 私はとを持っCore_Class_AていCore_Class_B extends Core_Class_Aます。 両方を書き直して、共通の機能を追加する必要があります。 だから私はこれを作りました: Custom_Class_A extends Core_Class_A。 問題は、下からどれを使用するかです(それぞれに賛成と反対)。 Custom_Class_B extends Custom_Class_A Custom_Class_B extends Core_Class_B [フルバージョン] レイヤードナビゲーションに新しいフィルターを追加する拡張機能に取り組んでいます:在庫あり/在庫なし(数日で公開されます)。 コード、今のところ大きな問題はない、戦略...私は私の疑問を持っています。 レイヤードナビゲーションセクションで新しいフィルターを追加するために使用できるイベントがないため、2つのブロックを書き換える必要がMage_Catalog_Block_Layer_ViewありましたMage_CatalogSearch_Block_Layer。(誰かがより良いアイデアを持っている場合は、共有してくださいが、これは質問の範囲ではありません)。 Mage_Catalog_Block_Layer_ViewVinaiが間接的に私を思ったように私はそれをしなかった(Vinaiの拡張子のいずれかについて、このレビューを参照)。 書き換えたいメソッドを追加し、parent::methodName()誰もが監視できるイベントを呼び出してディスパッチしました。 メソッドの例を次に示し_initBlocksます。私の新しいメソッドは次のようになります: protected function _initBlocks() { parent::_initBlocks(); //call the parent method //dispatch an event that I can observe and add my logic. Mage::dispatchEvent('catalog_layer_view_init_blocks', array('block' => $this)); } しかし、問題は生じますMage_CatalogSearch_Block_Layer。このブロックは最初のものを拡張しMage_Catalog_Block_Layer_Viewます。 たとえば、_initBlocks上記のようにメソッドを書き直す必要があります。しかし問題はMage_CatalogSearch_Block_Layer、独自の_initBlocks方法がないことです。親クラスからのものを使用しMage_Catalog_Block_Layer_Viewます。 …

3
ステージング/開発サイトのベストプラクティス
私はmagentoを初めて使用し、最初のサイトで作業してきました。これで、稼働する準備が整いました。一度ライブに移行すると、ステージングサイトや開発サイトも構築して、今後はライブサイトに新しい変更を加える前にそれを解決できるようにするようアドバイスされています。 これを設定するためのベストプラクティスは何ですか?私のWebホスティングでは、既存のドメインのサブディレクトリ内にセットアップすることを提案できると述べていますが、これはファイルとデータベースのコピーになるため(必要なディスク容量が2倍になります)、手動で移動してコピーする必要がありますファイルとデータベース情報。これが唯一の方法ですか? 記事を1つ見ましたが、設定の知識がない、または知識のないテストサイトを格納する仮想サーバーが必要でした

1
Attrbributesセットと属性:非技術概要/ロジック
私はMagentoの「ビジネス」側で働いています(つまり、私は開発者ではありません)。属性と属性セットの背後にある理論をよりよく理解したいと思っています。 私の目標:属性セットと属性を作成する際に考慮すべきいくつかのルールを考え出します。 たとえば、属性をできるだけ広く使用するのが最善でしょうか。または、属性をより具体的にする必要がありますか?セットはカテゴリベースにする必要がありますか?または、他の何か。 ありがとう!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.