Magentoの気持ちが少しずつ分かってきた今日この頃。
ドキュメントが少ないし英語だから大変。
商品一覧を表示するのに重~いなぁと思っていたけど、ただ単に商品情報を取得したいときは、Mage::getModel(‘catalog/product’)->getCollection()して$collection->load()するより、こちらのほうがいいそうです
$collection = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect("*");
foreach ($collection as $c){
echo($c->getData("指定のアトリビュート"));
}
これだけ!
じゃあ、あとは最近知った小技を紹介します。
1. 生成されるMySQLクエリを確認したいとき
echo $_productCollection->getSelect()->__toString();
2. アトリビュート(商品属性)のオプションのadmin valueを取得したいとき
※adminとは、全共通ストアのこと。通常は表示しているストアの言語でしか取得できず、不便😢
$attributeDetails = Mage::getSingleton("eav/config")
->getAttribute("catalog_product", 'アトリビュートのコード');
$admin_label = $attributeDetails->setStoreId(0)
->getSource()->getOptionText('アトリビュートのオプション値');
3. アトリビュートのコードによってadminのオプション一覧を取得
$collection = Mage::getModel('eav/entity_attribute')
->loadByCode($entity_type_id, "アトリビュートのコード")->setStoreId(0)
->getSource()->getAllOptions();
$options= array();
foreach ($collection as $c) {
$options[$c["value"]] = $c["label"];
}
4. 指定したアトリビュートだけを取得するとき※addAttributeToSelect()だけではentity_idなどの基本情報も取得されてしまう。
$collection = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect("指定のアトリビュート")
->addFieldToFilter("指定のアトリビュート",array('notnull' => true))
->distinct(true);
$collection->getSelect()->reset(Zend_Db_Select::COLUMNS);
$collection->getSelect()->columns("指定のアトリビュート");
foreach ($collection as $c){
echo($c->getData("指定のアトリビュート"));
}
ちなみにaddAttributeToFilter()とaddFieldToFilter()の違いは、EAVかどうか。EAVならaddAttributeToFilter()