如何从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
任何想法如何从这两种不同的情况中获得类别名称?
答案 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)
// 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();
}
?>