Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Вывод в breadcrumbs при клике на товар


remix8080

Recommended Posts

Подскажите, как добиться, чтобы при клике на товар (напр. Товар1) из модулей (напр. последние поступления, хиты продаж и т.д.) в "хлебных крошках" отображался полный путь к товару, а не "Главная" - "Товар1".

Например Главная - Категория1 - Товар1.

П.С. Каждый товар входит только в одну категорию.

Надіслати
Поділитися на інших сайтах


  • 1 month later...

Эта ошибка обмусоливалась не однократно. В текущий момент штатными средствами к сожалению ни как :((

В будущих версиях будет исправлено.

Понятно. А внештатными можно как-то (пока не выйдет новая версия)?
Надіслати
Поділитися на інших сайтах


Не сталкивался, но учитывая, что

Каждый товар входит только в одну категорию.

сделать не сложно.

В данный момент занят более важными делами, так что не могу подсказать, что где дописать/поменять.

Надіслати
Поділитися на інших сайтах

  • 2 weeks later...

сейчас напишу, как сделать.

UPD

решение для товаров, которые входят только в одну категорию

Обновление от 2011.02.08 - 12:01

Всем, кто использовал мой метод, настоятельно рекомендую заменить старый код на новый.

  • + исправлена ошибка проявляющаяся при большой вложенности категорий;
  • + исправлено формирование ссылок на категории в "крошках".

1. Открываем файл

catalog/controller/product/product.php
меняем

if (isset($this->request->get['path'])) {
			$path = '';
			
			foreach (explode('_', $this->request->get['path']) as $path_id) {
				$category_info = $this->model_catalog_category->getCategory($path_id);
				
				if (!$path) {
					$path = $path_id;
				} else {
					$path .= '_' . $path_id;
				}
				
				if ($category_info) {
					$this->document->breadcrumbs[] = array(
						'href'      => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $path),
						'text'      => $category_info['name'],
						'separator' => $this->language->get('text_separator')
					);
				}
			}
		}
на

/* webme - fix for product breadcrumbs - part_#1 - start */
		$wRestoreBreadcrumbs = "0";
		/* webme - fix for product breadcrumbs - part_#1 - end */
		
		if (isset($this->request->get['path'])) {
			$path = '';
			
			foreach (explode('_', $this->request->get['path']) as $path_id) {
				$category_info = $this->model_catalog_category->getCategory($path_id);
				
				if (!$path) {
					$path = $path_id;
				} else {
					$path .= '_' . $path_id;
				}
				
				if ($category_info) {
					$this->document->breadcrumbs[] = array(
						'href'      => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $path),
						'text'      => $category_info['name'],
						'separator' => $this->language->get('text_separator')
					);
				}
			}
		} else { /* webme - fix for product breadcrumbs - part_#2 - start */
			$wRestoreBreadcrumbs = "1";
		} /* webme - fix for product breadcrumbs - part_#2 - end */
мотаем ниже.

перед

$product_info = $this->model_catalog_product->getProduct($product_id);
вставляем

/* webme - fix for product breadcrumbs - part_#3 - start */
		if ($wRestoreBreadcrumbs == "1") {
			$wcat = $this->model_catalog_product->getCategories($product_id);
			if (count($wcat) == 1) {
				$w_category_id = $wcat['0']['category_id'];
				$w_BreadCrumbs = $this->model_catalog_product->wbm_getPath($w_category_id);
				
				$w_totalCrumbs = count($w_BreadCrumbs);
				foreach ($w_BreadCrumbs as $pos => $w_BreadCrumb) {
					
					$w_BreadCrumb_href = "";
					$w_i = 0;
					for($w_i = 0; $w_i <= $pos; $w_i++) {
						if (empty($w_BreadCrumb_href)) {
							$w_BreadCrumb_href .= $w_BreadCrumbs[$w_i]["category_id"];
						} else {
							$w_BreadCrumb_href .= "_".$w_BreadCrumbs[$w_i]["category_id"];
						}
					}
					
					$this->document->breadcrumbs[] = array(
						'href'      => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $w_BreadCrumb_href),
						'text'      => $w_BreadCrumb['name'],
						'separator' => $this->language->get('text_separator')
					);
				}
			}
		}
		/* webme - fix for product breadcrumbs - part_#3 - end */
сохраняем, закрываем.

2. Открываем файл

catalog/model/catalog/product.php
в конец файла, перед

}
?>
вставляем

/* webme - fix for product breadcrumbs - part_#1 - start */
	public function wbm_getPath($category_id) {
		$productPath = array();
		
		$result = $this->wbm_getProductCategoryInfo($category_id);
		
		$productPath2 = array();
		if ($result['parent_id'] > 0) {
			$productPath2 = $this->wbm_getPath($result['parent_id']);
			
			foreach ($productPath2 as $productPath2_item) {
				array_push($productPath, $productPath2_item);
			}
		}
		array_push($productPath, $result);
		
		return $productPath;
	}
	
	public function wbm_getProductCategoryInfo($catID) {
		$sql = "SELECT DISTINCT c.category_id as category_id, c.parent_id as parent_id, cd.name as name FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.category_id = '" . (int)$catID . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'";
		
		$query = $this->db->query($sql);
		
		return $query->row;
	}
	
	public function wbm_getParentCategory($catID) {
		$sql = "SELECT DISTINCT c.parent_id as parent_id, cd.name as name FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.parent_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.category_id = '" . (int)$catID . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'";
		
		$query = $this->db->query($sql);
		
		return $query->row;
	}
	/* webme - fix for product breadcrumbs - part_#1 - end */
сохраняем, закрываем.

3. Пользуемся :)

Возможно в модель запихнул лишнюю функцию (которая не используется).

Однако ужасно устал, поэтому принимайте "как есть".

Змінено користувачем afwollis
UPD, обновлен код
  • +1 3
Надіслати
Поділитися на інших сайтах

Еще одно решение для вывода breadcrumbs на странице товара, даже если покупатель пришёл на страницу с товаром по ссылке из любого модуля и пр.

Спасибо за вариант, serega-lomik, пока пользуюсь решением от afwollis

Надіслати
Поділитися на інших сайтах


Пофиксил ошибки и обновил код в сообщении.

Всем, кто использовал мой метод, настоятельно рекомендую заменить старый код на новый.

спасибо.

Змінено користувачем afwollis
Надіслати
Поділитися на інших сайтах

  • 3 weeks later...

по многочисленным просьбам, вида

Хотелось бы видеть, что-бы открытая страница выводилась в крошках текстом

решение для тех, кто так и не смог этого сделать:

catalog/view/theme/ВАША_ТЕМА/template/common/header.tpl
меняем

<?php  foreach ($breadcrumbs as $breadcrumb) { ?>
        <?php  echo $breadcrumb['separator']; ?><a href="<?php echo str_replace('&', '&', $breadcrumb['href']); ?>"><?php echo $breadcrumb['text']; ?></a>
        <?php  } ?>
на

<?php
        	$w_bc_total = count($breadcrumbs);
        	if ($w_bc_total > 0) {
        		$w_bc_last = $w_bc_total - 1;
        		foreach ($breadcrumbs as $i => $breadcrumb) { ?>
        		<?php if ($i == $w_bc_last) { break; } ?>
        		<?php echo $breadcrumb['separator']; ?><a href="<?php echo str_replace('&', '&', $breadcrumb['href']); ?>"><?php echo $breadcrumb['text']; ?></a>
        		<?php } ?>
        	<?php echo $breadcrumbs[$w_bc_last]['separator']; ?><?php echo $breadcrumbs[$w_bc_last]['text']; ?>
        <?php } ?>
  • +1 6
Надіслати
Поділитися на інших сайтах

  • 2 weeks later...

afwollis а нельзя ли ваш споспоб как-то переделать чтобы путь к товарам был полным ,если из модуля (например "последние товары") включать товар т.к. сейчас этоn путь выглядит примерно так:

Главная>>товар1

а хочется видеть вот так Главная>>категория1>>товар1

Впринципи способ от serega-lomik делает то чего не достает в первом способе,но почему-то у меня при использовании этого способа слетает кодировка русских букв на главной странице и выдает сверху ошибку

Notice: Undefined index: category_id in Z:\home\localhost\www\myweb\catalog\model\tool\seo_url.php on line 79Notice: Undefined index: parent_id in Z:\home\localhost\www\myweb\catalog\model\tool\seo_url.php on line 84Notice: Undefined index: keyword in Z:\home\localhost\www\myweb\catalog\model\tool\seo_url.php on line 86

Странно то что на других страницах все нормально работает.Никто не посооветует где искать проблему?

Надіслати
Поділитися на інших сайтах


страннно но пути в крошках вида Главная>>категория1>>товар1 все-таки появились,правда я не понял что случилось,наверно опять ступил где-то))

Надіслати
Поділитися на інших сайтах


товары в одной категории или в нескольких?

видимо когда не работало были в нескольких сейчас вроде все нормально . Если бы еще в строке адреса полный путь отражался было бы тоже хорошо,но это наверно из другой области))

Надіслати
Поділитися на інших сайтах


Применил решение, которое предложил serega-lomik. Возникло несколько вопросов.

Если переходить из поисковой системы по ссылке вида "www.мой_сайт.товар" - то в хлебных крошках отображается всё по-старому, без указания всего пути товара. Полный путь можно увидеть только тогда, когда в крошках кликнуть на товар. Страница обновится и тогда отображается уже полный путь к товару, с учётом каталогов.

Можно ли сделать так, чтобы при переходе из поисковика путь в крошках сразу отображался полным, с учётом каталогов. А то догадаться кликнуть в крошках на наименование товара таки не каждому дано... Для этого надо иметь пытливый ум и знать, что именно тебе надо. :) А покупатели приходят в магазин для того, чтобы совершить покупку, а не проводить эксперименты. :)

И ещё впрос. Теперь сайтмап-генератор генерит мапу с полным путём товара (т.е. "www.мой_сайт.каталог.товар", а раньше генерил вида "www.мой_сайт.товар") Если я сделаю мапу с новыми путями - в инет попадёт куча дублей страниц (даже если и не сделаю новую сайтмапу, роботы всё равно будет индексировать страницы с новыми путями (полными)). Т.е., останутся страницы со старыми путями (ссылками) и появятся с новыми. Думаю, это не совсем хорошо. Или я неправ?

Сейчас ещё пробану решение, которое предложил afwollis

Пробанул. Все вопросы сняты. В решении, предложенном afwollis, вышеперечисленных проблем нет.

afwollis, спасибо!

Змінено користувачем monax
Надіслати
Поділитися на інших сайтах


Если бы еще в строке адреса полный путь отражался было бы тоже хорошо,но это наверно из другой области))

Он отображается, если применить решение, которое предложил serega-lomik. Но появляются проблемы, описанные мною в предыдущем посте. Хотя, может для Вас это не проблемы... :)

Меня больше устраивает вариант, который предложил afwollis. :)

Надіслати
Поділитися на інших сайтах


  • 4 weeks later...
  • 3 months later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.