Создание последовательных панировочных сухарей на отдельных страницах продукта в Magento?
В Magento у нас есть то, что панировочные сухари на отдельных страницах продукта всегда меняются в зависимости от того, как пользователь достиг страницы. Например, если пользователь щелкнул всю дорогу от верхней категории до подкатегории, а затем к продукту, панировочные сухари были бы чем-то вроде " Главная → Верхняя категория → Подкатегория → Продукт".
Однако, если пользователь сразу попадает на страницу продукта, например, из запросов Google, панировочные сухари будут просто " Главная → Продукт". И это не так, чтобы быть таким.
Это, безусловно, будет улучшение работы с пользователями, добавив категории в сухари, даже когда пользователь придет на страницу с Google. И это определенно увеличит PV за посещение, потому что пользователи, вероятно, будут нажимать на родительские категории в панировочных сухарях.
Итак, есть ли способ сделать его согласованным и всегда показывать путь категорий на страницах продукта?
Моя идея - отредактировать страницу /html/breadcrumbs.phtml, но я не знаю, как добавлять категории в панировочные сундуки только на страницах продуктов.
Любая помощь будет оценена!
======================================
Изменить: одним словом, я просто хочу, чтобы категории отображались в панировочных сухарях на страницах продуктов независимо от того, как пользователь приходит на страницу продукта. Не имеет значения, какие категории, если существуют категории.
Кто-нибудь понял? Это сложно?
Сверху моей головы мне нужно будет отредактировать шаблон панировки и ввести в него категории, если их нет, и это страница продукта.... но я не знаю, как и я могу " t, похоже, найдет какие-либо релевантные решения для этого в любом месте...
Ответы
Ответ 1
Замените функцию _toHtml() в "app/code/core/Mage/Page/Block/Html/Breadcrumbs.php" с этим.
protected function _toHtml() {
$cat_id = "";
if (Mage::registry('current_product')) {
$product_id = Mage::registry('current_product')->getId();
$obj = Mage::getModel('catalog/product');
$_product = $obj->load($product_id); // Enter your Product Id in $product_id
if ($product_id) {
$categoryIds = $_product->getCategoryIds();
$cat_id = $categoryIds[0];
}
$category = Mage::getModel('catalog/category')->load($cat_id);
$cat_name = $category->getName();
$cat_url = $this->getBaseUrl().$category->getUrlPath();
}
if (is_array($this->_crumbs)) {
reset($this->_crumbs);
$this->_crumbs[key($this->_crumbs)]['first'] = true;
end($this->_crumbs);
$this->_crumbs[key($this->_crumbs)]['last'] = true;
}
if($cat_id) {
$this->_crumbs['category'.$cat_id] = array('label'=>$cat_name, 'title'=>'', 'link'=>$cat_url,'first'=>'','last'=>'','readonly'=>'');
ksort($this->_crumbs);
$home = $this->_crumbs['home'];
unset($this->_crumbs['home']);
array_unshift($this->_crumbs,$home);
}
$this->assign('crumbs', $this->_crumbs);
return parent::_toHtml();
}
Ответ 2
Вы можете переписать модель продукта, чтобы изменить метод getProductUrl. В основном получите первую категорию этого продукта и добавьте путь к категории до пути к продукту.
Ответ 3
Я полностью понимаю, что вы хотите сделать, я заметил, что даже продукт, связанный с собственным поиском Magento, потеряет свою категорию панировочных сухарей. Я согласен с Slayer, я бы выполнил свой собственный пользовательский блок только для страниц продукта.
Вы можете получить дерево категорий продуктов, используя следующий код. Я тестировал это (в Magento CE 1.7.0.2) с продуктами, которые имеют только одну иерархию категорий и те, которые имеют несколько.
ПРИМЕЧАНИЕ. Вероятно, вы захотите выполнить некоторую работу над этим кодом, так как он загружает каждый объект категории в массив, что может стать довольно интенсивным. Я бы рекомендовал добавить только информацию, требуемую в ассоциативный массив, а затем добавить этот массив в основной массив
$productCategories = array();
// grab the products category id array...we only want one, so grab the first one
$categoryIds = $_product->getCategoryIds();
$categoryId = $categoryIds[0];
// we don't want the root category as the name may not be user friendly
while ($categoryId != Mage::app()->getStore()->getRootCategoryId())
{
// load the category object and add it to the product categories array
$currentCategory = Mage::getModel('catalog/category')->load($categoryId);
$productCategories[] = $currentCategory;
}
// as the categories were added in reverse order we'll need to "unreverse" them
foreach (array_reverse($productCategories) as $category)
{
echo $category->getName().'/';
}
Ответ 4
Вы можете использовать для этого расширение света, например https://github.com/fascinosum/SeoBreadcrumbs. Имейте в виду, что была реализована логика, чтобы получить категорию самого низкого уровня, на которой назначен продукт. Вы можете легко изменить это поведение в соответствии с вашими потребностями.
Ответ 5
Найдите приложение/код/ядро /Mage/Catalog/Helper/Data.php и скопируйте Data.php на
Приложение/код/локальные/Mage/Каталог/Helper/Data.php
Найти функцию public function getBreadcrumbPath(), добавить следующий код в начало этой функции
if ($this->getProduct() && !$this->getCategory()) {
$_categoryIds = $this->getProduct()->getCategoryIds();
if ($_categoryId = $_categoryIds[0]) {
$_category = Mage::getModel('catalog/category')- >load($_categoryId);
Mage::register('current_category', $_category);
}
}
Ответ 6
@jacek_podwysocki разместил решение для добавления фрагмента к breadcrumbs.phtml и работает.
Смотрите здесь код: Программно добавьте пути панировки в Magento?
Просто добавьте этот фрагмент в начало приложения /design/frontend/default/template _name/template/page/html/breadcrumbs.phtml
Добавленное время загрузки страницы/PHP-рендеринга составляет только 0,05 секунды в соответствии с microtime().