Bloosh Company

記事のサムネイル画像です。

2019年10月31日

Development>Magento

magentoのcollection系の小技!

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()

magentoのcollection系の小技! | ブルーシュカンパニー

<<次の記事

magentoで、子ブロックから変数を受け取りたいとき

前の記事>>

cssだけで作るアコーディオンメニュー