Magento - 特定の属性値を持つ製品を取得する
質問
私のブロックコードでは、特定の値を持つ属性を持つ製品のリストをプログラム的に取得しようとしています。
それが不可能な場合、どのようにすべての製品を取得し、特定の属性を持つ製品のみをリストするためにそれらをフィルタリングするのでしょうか?
標準的なブーリアンフィルターを使用して、どのように検索を実行すればよいのでしょうか。
AND
または
OR
を使用して、製品のサブセットに一致させることができますか?
どのように解決するのですか?
ほとんどすべての Magento モデルには、対応するコレクションオブジェクトがあり、これを使用してモデルの複数のインスタンスを取得することができます。
Product コレクションをインスタンス化するには、次のようにします。
$collection = Mage::getModel('catalog/product')->getCollection();
ProductsはMagentoのEAVスタイルのモデルなので、返したい属性がある場合は追加で追加する必要があります。
$collection = Mage::getModel('catalog/product')->getCollection();
//fetch name and orig_price into data
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
コレクションにフィルタを設定するには、複数の構文があります。 私はいつも下記の冗長構文を使いますが、Magento のソースを調べて、フィルタリングメソッドのその他の使い方を確認したほうがいいかもしれません。
以下は、値の範囲(より大きい、より小さい)でフィルタリングする方法を示しています。
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
//filter for products whose orig_price is greater than (gt) 100
$collection->addFieldToFilter(array(
array('attribute'=>'orig_price','gt'=>'100'),
));
//AND filter for products whose orig_price is less than (lt) 130
$collection->addFieldToFilter(array(
array('attribute'=>'orig_price','lt'=>'130'),
));
これは、あるものOR別のものに等しい名前でフィルタリングしますが。
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
//filter for products who name is equal (eq) to Widget A, or equal (eq) to Widget B
$collection->addFieldToFilter(array(
array('attribute'=>'name','eq'=>'Widget A'),
array('attribute'=>'name','eq'=>'Widget B'),
));
サポートされている短い条件文 (eq, lt, など) の完全な一覧は
_getConditionSql
メソッドにあります。
lib/Varien/Data/Collection/Db.php
最後に、Magento のすべてのコレクションは反復処理できます (ベースコレクションクラスはイテレータインターフェイスのいずれかを実装しています)。 これは、フィルターが設定された後、製品を取得する方法です。
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
//filter for products who name is equal (eq) to Widget A, or equal (eq) to Widget B
$collection->addFieldToFilter(array(
array('attribute'=>'name','eq'=>'Widget A'),
array('attribute'=>'name','eq'=>'Widget B'),
));
foreach ($collection as $product) {
//var_dump($product);
var_dump($product->getData());
}
関連
-
[解決済み] * vchiqインスタンスを開くのに失敗しました。
-
[解決済み】SSLピア証明書またはSSHリモートキーがOKでなかった
-
[解決済み】Netbeans 7.4 for PHPで「スーパーグローバルな$_POST配列に直接アクセスしないでください」という警告が発生する。
-
[解決済み] Uncaught SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
thinkphp5 timestamp 非整形の数値に遭遇した。
-
[解決済み】警告: file_get_contents(): https:// ラッパーがサーバー構成ですべて無効になっています。
-
[解決済み] オートロードとは何ですか; spl_autoload、__autoload、spl_autoload_register はどのように使うのですか?
-
[解決済み] PHPの配列を別の配列にコピーする関数はありますか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
-
[解決済み] エンティティ・アトリビュート・バリュー データベース vs. 厳密なリレーショナルモデル Ecommerce
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] Fatal error: メンバ関数prepare()のNULLでの呼び出し
-
[解決済み] コマンドの同期がとれていない。
-
[解決済み】++と*+の意味は何ですか?
-
[解決済み】php, mysql - データベースへの接続数が多すぎるエラー
-
[解決済み】foreach()に与えられた引数が無効です。)
-
phpのAllowed memory size of 134217728 bytes枯渇問題の解決法
-
[解決済み】MySQLのカラム数が1行目の値数と一致しない【非公開
-
[解決済み】mysqli::query(): mysqli をフェッチできない
-
[解決済み] SSLエラー SSL3_GET_SERVER_CERTIFICATE:証明書の検証に失敗しました。
-
[解決済み] PHP 未定義関数への呼び出し