タグ付けされた質問 「flat-catalog」

5
Mage_Catalog_Model_Resource_Product_CollectionにストアIDを設定する方法は?
タスクは簡単です。フラットカタログを有効にして、特定のストアビューの製品のリストを取得する必要があります。最も明白な解決策は次のとおりです。 $collection = Mage::getResourceModel('catalog/product_collection') ->setStore($storeId); 実際、setStore()メソッドはストアIDに基づいてフラットテーブルの名前を取得する_initSelect()メソッドの後に呼び出されるため、ここでは何の違いもありませんMage_Catalog_Model_Resource_Product_Collection。ストアIDはまだ設定されていないため、現在のストアIDが使用されます。 したがって、明らかな回避策は、モデルを取得する前に現在のストアIDを設定することです。 Mage::app()->setCurrentStore($storeId); $collection = Mage::getResourceModel('catalog/product_collection'); それが動作します。ただし、コレクションを1回取得する必要がある場合のみ。ループ内でコレクションを取得する必要がある場合、または2つのバックツーバックコレクションだけが必要な場合は、コレクションに特定のストアを設定できません。 その理由は Mage_Catalog_Model_Resource_Product_Flatクラスには独自の_storeIdプロパティがあり、コンストラクターでは現在のストアIDに設定されるためです。それが最初に設定される理由です。それから、何らかの理由で(天国は私が希望していることを知っていMage_Eav_Model_Entity_Collection_Abstract::_initます)、各リソースモジュールはシングルトンとしてフェッチされます。したがって、2回目の呼び出しのコンストラクタはありません。 これはすべて非常に間違っているように見えるので、私は間違っていると確信しており、Magentoの別のバグ(または2つ)ではありません。誰かがそれに光を当てることを願っています。

3
Magento 2:フラットテーブルはまだものですか?
Magento 2では、フラットテーブルはまだ心配する必要がありますか?フラットテーブルをオンにできるUIがあることは知っていますが、フラットテーブルがどれだけうまくテストされているか、さらに必要であるかどうかはわかりません。 フラットテーブルが依然として存在する場合-フラットテーブルの属性は、いつどこで生成および/または再生成されますか。これはインデックスの再作成時にのみ発生しますか?または、他のUIアクションでフラットテーブル生成をトリガーできますか?で起こりphp bin/magento setup:di:compileますか?他の場所? また、Magentoは、属性をフラット属性にする必要があるかどうかをどのように決定しますか?されているすべての EAV属性が平坦化?または、そうでないかもしれない他のものがありますか?

2
カテゴリフラットテーブルオプションはいつ使用する必要がありますか?
前の質問へのフォローアップとして、私は知りたい: カテゴリフラットテーブルオプションはいつ使用する必要がありますか? グーグル検索中に、「非常に多くのカテゴリがある場合」に有効にするアドバイスを見つけました。しかし、多くは何ですか? 製品のフラットテーブルをアクティブにすることは、パフォーマンスの観点から適切な決定であることは簡単に理解できますが、カタログにとっても同じくらい重要ですか? そして、これからどのような意味がありますか?フラットカテゴリテーブルを有効にすると、カテゴリ製品のポジションを保存できなくなることがわかりました。少なくとも、フラットオプションを使用しない場合ほど簡単ではありません(マリウスに感謝します)。他に言及できるものはありますか? 前もって感謝します :)

3
製品コレクションにフラットテーブルの代わりにEAVを使用させる
Magento 2でフラットカタログを一時的に無効にするにはどうすればよいですか?フロントエンドストアに関連付けられた製品コレクションがあり、EAVテーブルを介してそれをロードしたいと考えています。 コレクションがフラットテーブルを使用する必要があるかどうかをどのように判断するかを調べましたが、設定をどこにでも挿入する方法が見つかりませんでした。 Magento 1では、「フラットカタログが有効」の場合、読み込まれた構成値を変更していました。 Mage::app()->getStore($storeId)->setConfig('catalog/frontend/flat_catalog_product', 0); このようなグローバルな状態に頼る必要がありますか?もしそうなら、どうですか?それとももっとエレガントな方法がありますか?

4
Magentoインデクサーがカスタム属性のフラットテーブルに属性を追加しない
Magentoフラットテーブルにカスタム属性を追加しない.....マーケットプレイスの拡張機能があります。いくつかの属性がありますが、一部の属性はフラットテーブルに追加されていません...私の拡張機能が機能しないため... 属性設定は... $catalogEavSetup->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'approval', array( 'group' => 'General', 'sort_order' => 21, 'type' => 'int', 'backend' => '', 'frontend' => '', 'label' => 'Approval', 'note' => '', 'input' => 'select', 'class' => '', 'source' => 'vendorsproduct/source_approval', 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, 'visible' => true, 'required' => false, 'user_defined' => false, 'default' => '1', …

1
フラットカタログを有効にすると、カテゴリコレクションをフィルタリングすると不正な動作が発生する
カテゴリの基本的な検索を実行するためのコードがあります。カテゴリ名と説明を検索することで機能します-両方がコアである属性。 私が持っているコードは次のとおりです: $_categories = Mage::getModel('catalog/category')->getCollection() ->addAttributeToSelect('name') ->addAttributeToSelect('description') ->addAttributeToSelect('associated_brand') ->addAttributeToSelect('image') ->setPageSize(12) ->setCurPage(1) ->addAttributeToFilter('level',['gt' => 2]) ->addAttributeToFilter('is_active',['eq'=>true]) ->addAttributeToFilter( [ ['attribute' => 'name', 'like' => '%'.$searchterm.'%'], ['attribute' => 'description', 'like' => '%'.$searchterm.'%'] ] )->load(); カテゴリに対してフラットカタログを有効にする前に、期待される結果(名前または説明が検索語と一致するカテゴリ)が返されました。 フラットカタログを有効にすると、名前または説明の検索が機能しません。基になるコレクションクエリを出力すると、次のようになります。 SELECT `main_table`.`entity_id`, `main_table`.`level`, `main_table`.`path`, `main_table`.`position`, `main_table`.`is_active`, `main_table`.`is_anchor`, `main_table`.`name`, `main_table`.`description`, `main_table`.`associated_brand`, `main_table`.`image` FROM `catalog_category_flat_store_1` AS `main_table` WHERE (level …

2
FLATカテゴリが有効な場合、親カテゴリのサブカテゴリを取得します
現在のカテゴリのサブカテゴリのみを表示するカスタムメニューを作成するために、ブロッククラスMage_Catalog_Block_Navigation(署名へのリンク)をオーバーライドします。 内部メソッドrenderCategoriesMenuHtml(署名へのリンク)選択した親カテゴリの子カテゴリを取得しようとしています。だから私はデフォルトのコードを置き換えました: foreach ($this->getStoreCategories() as $child) { //... } 次のように: /** * @param $parent ID of category from which we start * @param $recursionLevel How many levels of subcategories retrieve * getCategories(...) is a method from model Mage_Catalog_Model_Category */ $category = Mage::getModel('catalog/category'); $storeCategories = $category->getCategories($parent, $recursionLevel); foreach ($storeCategories as $child) …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.