#magento #magento-1.8
#magento #magento-1.8
Вопрос:
Как я могу получить название категории из списка product_viewed.phtml?
Я получаю сообщение об ошибке при переходе на страницу продукта frontendbasedefaulttemplatecatalog/product/view.phtml
если я нажму на продукт из frontendbasedefaulttemplatereports/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:xxxfrontendbasedefaulttemplatecatalogproductview.phtml в строке 86
Но у меня нет этой ошибки, если я нажимаю на продукт из frontendbasedefaulttemplatecatalog/product/list.phtml
Есть идеи, как я могу получить название категории из этих двух разных ситуаций?
Комментарии:
1. Зачем вам это нужно? Я думаю, что это неправильно делать на странице продукта. Если вы хотите показать следующий и предыдущий продукт со страницы категории, то лучше сохранить идентификаторы продукта в сеансе и показать его на странице продукта.
Ответ №1:
Я думаю, вы можете получить идентификатор категории из названия продукта или идентификатора, загрузив модель продукта.
например, следующий код.
$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] и т.д.
Ответ №2:
Вы не сможете получить 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();
}
}
Ответ №3:
tealou,
Mage::registry('current_category'
) зависит от URL-адреса продукта, если URL-адрес продукта имеет идентификатор категории в этом URL-адресе маршрутизации, тогда вы получите Mage::registry('current_category')
, иначе вы did not get
получите значение Mage::registry(‘current_category’). Это логика функции url_rewrite.
Предположим, у вас есть тестирование продукта (id 235) и его категории catone(id 5),cattwo(id 7),catthree (id 11)
для 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
Первый URL не имеет categoryid, поэтому, если вы нажмете на этот URL с любой страницы категории, это не даст никакого значения Mage::registry('current_category')
У других есть категория, она даст Mage::registry('current_category')
значение в view.phtml страницы продукта.
Goto Admin>Catalog>Url rewrite manager her you are find this url
Если хотите, Mage::registry('current_category')
тогда вам нужно создать новую переменную Mage::registry() из /catalog / category /view.phtml, то есть страницу категории.
$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
}
Ответ №4:
Вы не можете получить текущую категорию на странице продукта, потому что у одного продукта может быть много категорий. Что, если клиент заходит на страницу вашего продукта из google.com например? Какая это будет категория?
На странице продукта нет такой переменной Mage::registry(‘current_category’). Забудьте об этом. Эта переменная существует только на страницах категорий. На странице продукта вы можете только проверить, находится ли продукт в какой-либо категории.
Ответ №5:
почти как было сказано в MTM, я использую это:
if(Mage::registry('current_category')){
$catid = Mage::registry('current_category')->getId();
$cat = Mage::getModel('catalog/category')->load($catid);
} else {
//because sometimes we can not use registry('current_category'), so we use:
$cat_ids = $_product->getCategoryIds(); // get all categories where the product is located
$cat = Mage::getModel('catalog/category')->load( $cat_ids[0] ); // load first category
}
Ответ №6:
Вот код, который я использую в Magento 1.8
<?php $cats = $_product->getCategoryIds();
foreach ($cats as $category_id) { $_cat = Mage::getModel('catalog/category')->load($category_id) ;
echo $_cat->getName();
}?>