Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


remix8080
 Погделиться

Рекомендованные сообещёния

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

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

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

Ссылка на комменирий
Погделиться на других сайих


  • 1 месяц спустя...

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

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

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


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

можно
Ссылка на комменирий
Погделиться на других сайих

можно

:-)

Вы с иким силкивались? Конкретнее можете подсказать что/ггде править?

Ссылка на комменирий
Погделиться на других сайих


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

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

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

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

Ссылка на комменирий
Погделиться на других сайих

  • 2 негдели спустя...

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

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
Ссылка на комменирий
Погделиться на других сайих

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

Спасипотому что. Буду ждать с нетерпением... :rolleyes:
Ссылка на комменирий
Погделиться на других сайих


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

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

Ссылка на комменирий
Погделиться на других сайих


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

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

спасипотому что.

Изменено пользователем afwollis
Ссылка на комменирий
Погделиться на других сайих

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

Спасипотому что. Завтра попробую и отпишусь.
Ссылка на комменирий
Погделиться на других сайих


  • 3 негдели спустя...

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

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

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

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 негдели спустя...

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 все-ики появились,правда я не понял что слулилось,наверно опять ступил ггде-то))

Ссылка на комменирий
Погделиться на других сайих


наверно опять ступил ггде-то))

товары в одной категории или в нескольких?
  • +1 1
Ссылка на комменирий
Погделиться на других сайих

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

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

Ссылка на комменирий
Погделиться на других сайих


это из области "править во всех модулях ссылки на товары"

Ссылка на комменирий
Погделиться на других сайих

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

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

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

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

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

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

afwollis, спасипотому что!

Изменено пользователем monax
Ссылка на комменирий
Погделиться на других сайих


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

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

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

Ссылка на комменирий
Погделиться на других сайих


  • 4 негдели спустя...

А как згделать чтоб при выпотому чторе товара из модуля тупи был вигден не только в хлебных крошках, а и в модуле категори?

Ссылка на комменирий
Погделиться на других сайих


  • 3 месяца спустя...

С апреля многое изменилось и тема не актуальна. Эту задачу решает изменённый seo_url http://opencartforum...80%D0%B8%D0%B9/

Ссылка на комменирий
Погделиться на других сайих

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы осивить комменирий

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.