如何从product_viewed.phtml获取product / view.phtml中的类别名称?

时间:2014-07-01 22:12:45

标签: magento magento-1.8

如何从product_viewed.phtml列表中获取类别名称?

当我登陆产品页frontend\base\default\template\catalog/product/view.phtml

时出现错误

如果我点击frontend\base\default\template\reports/product_viewed.phtml

中的产品

这是我view.phtml

上的代码
<?php
$_helper = $this->helper('catalog/output');
$_category_detail = Mage::registry('current_category');
var_dump($_category_detail->getName()); //gives current  category name
?>

这是我得到的错误,

  

致命错误:在非对象中调用成员函数getName()   C:\ xxx \ frontend \ base \ default \ template \ catalog \ product \ view.phtml on   第86行

但如果我点击frontend\base\default\template\catalog/product/list.phtml

中的产品,我就不会出现此错误

任何想法如何从这两种不同的情况中获得类别名称

7 个答案:

答案 0 :(得分:4)

我认为您可以通过加载产品型号从产品名称或ID获取类别ID。

如下面的代码。

  $catCollection = $_product->getCategoryCollection();
    foreach($catCollection as $cat){
      print_r($cat->getData());
      //echo $cat->getName();
      //echo $cat->getUrl();
    }

另一种方式,

$_product= Mage::getModel('catalog/product');
$catIds = $_product->getCategoryIds();

之后,您可以通过访问$ catIds数组来获取类别,例如$ catIds [0],$ catIds [1]等。

答案 1 :(得分:3)

如果您访问带有直接链接的产品,则无法Mage::registry('current_category') catalog/product/view.phtml。但是,如果你按照正确的渠道,点击任何类别,然后选择一个产品,这个特定的类别将被注册。 您应该在显示类别名称时使用以下代码:

     if(Mage::registry('current_category')){
        echo Mage::registry('current_category')->getName();
     }else{
        $categories = $_product->getCategoryCollection()
                          ->addAttributeToSelect('name');
        foreach($categories as $category) {
            echo $category->getName();
        }
     }

答案 2 :(得分:1)

tealou,

Mage::registry('current_category')取决于产品网址,如果产品网址在此路由网址中有类别ID,那么您获得Mage::registry('current_category'),否则您did not get Mage :: registry(&#39; current_category& #39;)价值。 这是url_rewrite功能的逻辑。

假设您有产品测试(ID 235)及其类别catone(id 5),cattwo(id 7),catthree (id 11)

for product url

testing.html and target path is catalog/product/view/id/235/

catone/testing.html and target path is catalog/product/view/id/235/category/5
cattwo/testing.html and  target path is catalog/product/view/id/235/category/7
catthree /testing.html and  target path is catalog/product/view/id/235/category/11

第一个网址没有categoryid所以如果你点击任何类别页面中的这个网址都没有给出任何值Mage::registry('current_category') 其他类别,它将在产品页面的view.phtml中给出Mage::registry('current_category')值。

Goto Admin>Catalog>Url rewrite manager her you are find this url

如果想要Mage::registry('current_category'),那么你需要从/catalog/category/view.phtml创建一个新的Mage :: registry()变量,即类别页面。

$var=Mage::registry('current_category');

Mage::register('some_name', $var);

并使用

获取catalog / product / view.phtml
$my_var = Mage::registry('some_name');

如果您从类别进入产品页面,将会获得此some_name变量。 把代码放在

  if(Mage::registry('some_name')){
    var_dump(Mage::registry('some_name'))->getName()); 
//gives current  category name
    }

答案 3 :(得分:1)

您无法在产品页面上获取当前类别b \ c一个产品可以包含多个类别。如果客户从google.com访问您的产品页面会怎么样?这会是什么类别?

产品页面上没有此类Mage :: registry('current_category')变量。算了吧。此变量仅存在于类别页面上。在产品页面上,您只能检查产品是否属于某种类别。

答案 4 :(得分:1)

几乎就像MTM一样,我用这个:

// sort from low-to-high in the context of a collection
public int SortOrder { get; set; }

答案 5 :(得分:0)

以下是我在Magento 1.8中使用的代码

<?php $cats = $_product->getCategoryIds();
     foreach ($cats as $category_id) { $_cat = Mage::getModel('catalog/category')->load($category_id) ;
     echo $_cat->getName();
}?>

答案 6 :(得分:-1)

**Add XML Code Theme/namespace/Magento_Catalog/templates/product/view**

<block class="Magento\Catalog\Block\Product\View" name="product.info.category" after="product.price.final" template="product/view/current_category.phtml" />


**Create New File    Theme/namespace/Magento_Catalog/templates/product/view**  

      <?php 
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $product = $objectManager->get('Magento\Framework\Registry')->registry('current_product');
        $categories = $product->getCategoryIds(); /*will return category ids array*/
        foreach($categories as $category){
            $cat = $objectManager->create('Magento\Catalog\Model\Category')->load($category);
            echo $cat->getName();
            }

        ?>