Создание последовательных панировочных сухарей на отдельных страницах продукта в 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().