製品のカテゴリに基づいて、Magento Google Baseの出力にproduct_typeを追加しようとしていますが、できないようです。私は次のコードを持っています:
// Get categories from product to include as product_type
$categoryIds = $object->getCategoryIds();
foreach($categoryIds as $categoryId) {
$category = Mage::getModel('catalog/category')->load($categoryId);
$this->_setAttribute('product_type', $category->getName(), 'text' );
}
問題は、製品のカテゴリだけでなく、カテゴリのallを返すことです。誰にも解決策はありますか?
上記のRaoによってドロップされたソースリンクを使用すると、実際により良い答えが見つかりました。
$product = Mage::getModel('catalog/product')->load($productId);
$cats = $product->getCategoryIds();
foreach ($cats as $category_id) {
$_cat = Mage::getModel('catalog/category')->load($category_id) ;
echo $_cat->getName();
}
これはまったくテストされていません。
//load the product
$product = Mage::getModel('catalog/product')->load($productId);
//load the categories of this product
$categoryCollection = $product->getCategoryCollection();
その後、配列のように$categoryCollection
をループできます。
@Raoによるソリューションは、SQL IDを1回しか呼び出さないため、カテゴリIDを取得する製品オブジェクトがある場合に最適であることを指摘しておきます。
カテゴリIDだけがある場合は、次のことができます。
$categories = Mage::getModel('catalog/category')
->getCollection()
->addAttributeToSelect('name') //you can add more attributes using this
->addAttributeToFilter('entity_id', array('in'=>array(1,2,3)));
foreach($categories as $_cat){
$holder[]= $_cat->getName();
}
ここで、array(1,2,3)はカテゴリです。配列には文字列値ではなく整数が含まれていることに注意してください。SQLはそれについて気難しいかもしれません。
また、一度に1つのカテゴリをプルするソリューションは、ループのすべての反復に対してSQL呼び出しを行うため、非常に非効率的であることを指摘したいと思いました。
foreach(..){
Mage::getModel('catalog/category')->load($categoryId);
}
製品のすべてのカテゴリを取得
<?php
$_Product = Mage::getModel("catalog/product")->load( PRODUCT_ID );
$categoryIds = $_Product->getCategoryIds();//array of product categories
foreach($categoryIds as $categoryId) {
$category = Mage::getModel('catalog/category')->load($categoryId);
$this->_setAttribute('product_type', $category->getName(), 'text' );
}
?>
Raoのソリューションはすべての属性をロードしようとします。つまり、多くのクエリと結合を意味しますが、必要なのはproduct_id
カテゴリをロードします。だからあなたはこれを行うことができます:
$product = Mage::getModel("catalog/product")->setId($productId);
$categories = $product->getCategoryCollection();
これは製品をロードせず、カテゴリを提供します。
このコードは、Magento 2のphtmlファイルで機能します。
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->get('Magento\Framework\Registry')->registry('current_product');//get current product
$categories = $product->getCategoryIds(); /*will return category ids array*/