如何根据类别ID Magento获取类别名称

时间:2013-09-26 20:28:15

标签: php magento

我目前正在使用以下代码创建变量标签,以便在Magento CMS中打印出产品的动态数据的各个部分:

<?php 

    $_product = Mage::getModel('catalog/product')->loadByAttribute('sku', $this->getData('sku'));

    $_categories = Mage::getModel('catalog/category')->loadByAtribute('id', $this->getData('id')); 

    switch($this->getData('valuetype')){       
        case "retail":
            echo number_format($_product->getPrice(), 2, '.', ',');
            break;
        default:
        case "final":
            echo number_format($_product->getFinalPrice(), 2, '.', ',');
            break;
        case "diffDollar":
            $difference = $_product->getPrice() - $_product->getFinalPrice();
            echo number_format($difference, 2, '.', ',');
            break;
        case "diffPercent":
            $difference = (1 - ($_product->getFinalPrice() / $_product->getPrice())) * 100;
            echo number_format($difference, 0, '.', ',');
            break;
        case "prodName":
            echo ($_product->getName());
            break;
        case "urlPath":
            $prodName = ($_product->getName());
            $prodName = strtolower($prodName);
            $path = explode(" ", $prodName);
            $path = implode("-", $path);
            echo $path;
            break;
        case "catName":
            $catName = ($_categories->getName());
            echo $catName;
            break;
    }
?>

在CMS内部,我将使用以下内容来引入$ _categories的数据:

{{block type="catalog/category" id="176" template="catalog/product/cmsprice.phtml" valuetype="catName"}}

对于$ _product我会使用:

{{block type="catalog/products" sku="1000145" template="catalog/product/cmsprice.phtml" valuetype="retail"}}

使用$ _product可以很好地工作但是当我尝试使用$ _categories打印出类别名称时,CMS中的页面不会在主页上呈现,但页面的其余部分会显示,并且不会显示任何错误。

我觉得我接近这个但却看不到我所缺少的东西。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

您在开始时获取的模型看起来有点不对:

$_product = Mage::getModel('catalog/product')->loadByAttribute('sku', $this->getData('sku'));

$_categories = Mage::getModel('catalog/category')->loadByAtribute('id', $this->getData('id'));

看起来您正在尝试使用产品的ID加载类别模型? 您需要一个类别ID来加载类别实例。

另外,不确定您是否担心,但您如何应对多个类别的产品?

如果您已经有了产品实例,您想要找到它所在的所有类别名称, 这是我跑的地方:

$categories = $_product->getCategoryCollection()
                       ->addAttributeToSelect('name')
                       ->addAttributeToFilter('is_active', array('eq' => 1));
$value = array();
foreach($categories as $category) {
    $value[] = $category->getName();
}