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

Хлебные крошки категорий без родительского url в Seo_Pro


 Погделиться

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

Для тех кто использует Seo_Pro и  убрал родительские категории в SEO URL по инструкции (halfhope).

РЕШЕНИЕ проблемы с хлебными крошками, которые сокращались тоже до 1 уровня "Главная - Категория"
 
Заходим в catalog/model/catalog/category.php добавляем метод

	public function getCategoryPath($category_id){
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_path WHERE category_id = '" . (int)$category_id . "'");
	   
		return $query->rows;
	}

 
Заходим в catalog/controller/product/category.php перед строкой

$category_info = $this->model_catalog_category->getCategory($category_id);

Добавляем


		//Fix Category breadscrumbs FULL with SEO_PRO
   		$pathway = $this->model_catalog_category->getCategoryPath($category_id);

   		if($pathway){
   			foreach ($pathway as $way) {
   				$category_way = $this->model_catalog_category->getCategory($way['path_id']);
	       			$this->data['breadcrumbs'][] = array(
   	    				'text'      => $category_way['name'],
						'href'      => $this->url->link('product/category', 'path=' . $way['path_id'] . $url),
        				'separator' => $this->language->get('text_separator')
        			);   			
   			}
   		}

Ниже примерно в 170 строке удалите код 

			$this->data['breadcrumbs'][] = array(
				'text'      => $category_info['name'],
				'href'      => $this->url->link('product/category', 'path=' . $this->request->get['path']),
				'separator' => $this->language->get('text_separator')
			);

 
Вот икой костыль, формирует хлебные крошки для всех уровней категорий.

 

Инструкция для Opencart 1.5

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

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

Поскольку сайт halfhope ru отключен. Напишу згдесь, что бы не потерять.
Убираем Родительские категории в url, правим Seo_pro
 
Открываем файл “catalog/controller/common/seo_pro.php”, в функции rewrite() находим код:
 

case 'path':
    $categories = explode('_', $value);
    foreach ($categories as $category) {
        $queries[] = 'category_id=' . $category;
    }
    unset($data[$key]);
    break;

Заменяем в 2х месих его на:

case 'path':
    $categories = explode('_', $value);
    $queries[] = 'category_id=' . end($categories);
    unset($data[$key]);
    break;

Инструкция для синдартного seo_url:
Открываем файл “catalog/controller/common/seo_url.php”, в функции rewrite() находим код:

} elseif ($key == 'path') {
    $categories = explode('_', $value);
  
    foreach ($categories as $category) {
        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'");

        if ($query->num_rows) {
            $url .= '/' . $query->row['keyword'];
        }                           
    }
  
    unset($data[$key]);
}

Заменяем его на:

} elseif ($key == 'path') {
    $categories = explode('_', $value);
  
    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)end($categories) . "'");
    if ($query->num_rows) {
        $url .= '/' . $query->row['keyword'];
    }
  
    unset($data[$key]);
}

Инструкция для Opencart 1.5

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

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

Исправление для получения path в могдели
 

	public function getCategoryPath($category_id){
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_path WHERE category_id = '" . (int)$category_id . "'");
	   
		return $query->rows;
	}

Заменить на 
 

	public function getCategoryPath($category_id){
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_path WHERE category_id = '" . (int)$category_id . "' ORDER BY level ASC");

		return $query->rows;
	}

Добавлена сортировка path_id по уровню, иначе на 3+ уровне вложенности сбивается порядок категорий в хлебных крошках

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

Исправление для получения path в могдели

 

	public function getCategoryPath($category_id){
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_path WHERE category_id = '" . (int)$category_id . "'");
	   
		return $query->rows;
	}

Заменить на 

 

	public function getCategoryPath($category_id){
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_path WHERE category_id = '" . (int)$category_id . "' ORDER BY level ASC");

		return $query->rows;
	}

Добавлена сортировка path_id по уровню, иначе на 3+ уровне вложенности сбивается порядок категорий в хлебных крошках

Добрый гдень. Написано много, немного запуился, может просто туплю. Подскажите что именно из этого мне нужно что бы перегделать вид хлебных крошек из "Сайт.ру/категория1/категория2/категория3" в вид "Сайт.ру/категория3"  (для Opencart 1.5)

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


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

Присоединяюсь к  вопросу:

Что нужно сгделать чтобы зарилиило на Опенкарт 2.1 ?

 

Вот этого в когде нет

 


			$this->data['breadcrumbs'][] = array(
				'text'      => $category_info['name'],
				'href'      => $this->url->link('product/category', 'path=' . $this->request->get['path']),
				'separator' => $this->language->get('text_separator')
			);

 
Вот икой костыль, формирует хлебные крошки для всех уровней категорий.

 

Инструкция для Opencart 1.5

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


Присоединяюсь к  вопросу:

Что нужно сгделать чтобы зарилиило на Опенкарт 2.1 ?

 

Вот этого в когде нет

 

Народ, у меня нету времени гделать бесплатное решение. Что было тем погделился. Может кто-то заплатит за мое время и я сгделаю решение для OC 2, а потом выложу сюда. Но пока нет.

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

Решение для 2.1 SeoPro - убираем родительские категории в URL + выводим полные хлебные крошки
 

Файл “catalog/controller/common/seo_pro.php”, в функции rewrite() находим код:
case 'path':
    $categories = explode('_', $value);
    foreach ($categories as $category) {
        $queries[] = 'category_id=' . $category;
    }
    unset($data[$key]);
    break;

Заменяем  на:

case 'path':
    $categories = explode('_', $value);
    $queries[] = 'category_id=' . end($categories);
    unset($data[$key]);
    break;

Файл catalog/model/catalog/category.php  добавляем

public function getCategoryPath($category_id){
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_path WHERE category_id = '" . (int)$category_id . "' ORDER BY level ASC");

return $query->rows;
}

Файл в catalog/controller/product/category.php перед строкой

$category_info = $this->model_catalog_category->getCategory($category_id);

Добавляем

//Fix Category breadscrumbs FULL with SEO_PRO
    $pathway = $this->model_catalog_category->getCategoryPath($category_id);

    if($pathway){
       foreach ($pathway as $way) {
       $category_way = $this->model_catalog_category->getCategory($way['path_id']);
          $data['breadcrumbs'][] = array(
            'text'      => $category_way['name'],
            'href'      => $this->url->link('product/category', 'path=' . $way['path_id'] . $url)
           );    
       }
    }

Ниже удаляем код

// Set the last category breadcrumb
$data['breadcrumbs'][] = array(
'text' => $category_info['name'],
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'])
);

 

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


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

Решение для 2.1 SeoPro - убираем родительские категории в URL + выводим полные хлебные крошки

Файл “catalog/controller/common/seo_pro.php”, в функции rewrite() находим код:

case 'path':    $categories = explode('_', $value);    foreach ($categories as $category) {        $queries[] = 'category_id=' . $category;    }    unset($data[$key]);    break;
Заменяем на:

case 'path':    $categories = explode('_', $value);    $queries[] = 'category_id=' . end($categories);    unset($data[$key]);    break;
Файл catalog/model/catalog/category.php добавляем

public function getCategoryPath($category_id){$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_path WHERE category_id = '" . (int)$category_id . "' ORDER BY level ASC");return $query->rows;}
Файл в catalog/controller/product/category.php перед строкой

$category_info = $this->model_catalog_category->getCategory($category_id);
Добавляем

//Fix Category breadscrumbs FULL with SEO_PRO    $pathway = $this->model_catalog_category->getCategoryPath($category_id);    if($pathway){       foreach ($pathway as $way) {       $category_way = $this->model_catalog_category->getCategory($way['path_id']);          $data['breadcrumbs'][] = array(            'text'      => $category_way['name'],            'href'      => $this->url->link('product/category', 'path=' . $way['path_id'] . $url)           );           }    }
Ниже удаляем код

// Set the last category breadcrumb$data['breadcrumbs'][] = array('text' => $category_info['name'],'href' => $this->url->link('product/category', 'path=' . $this->request->get['path']));

Сгделал всё как Вы прописали и у меня исчезло потому чтоковое меню категорий товаров когда открываю одну из них. В чем можно поискать ошибку (Opencart 2.1.0.2)?

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


Нашел прилину. Меню на opencart 2.1.0.2 слетело после данной замены:

 

Файл “catalog/controller/common/seo_pro.php”, в функции rewrite()

находим код:

 

case 'path': $categories = explode('_', $value); foreach ($categories as $category) { $queries[] = 'category_id=' . $category; } unset($data[$key]); break;

Заменяем на:
case 'path': $categories = explode('_', $value); $queries[] = 'category_id=' . end($categories); unset($data[$key]); break;

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


Как вариант - проблема в модификаторах. Сравните исходный файл seo_pro и есть ли модифицированный файл в папке /system/storage/modification/catalog/controller/common/ и в чем их отлилие

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


Как вариант - проблема в модификаторах. Сравните исходный файл seo_pro и есть ли модифицированный файл в папке /system/storage/modification/catalog/controller/common/ и в чем их отлилие

 

В папке /system/storage/modification/catalog/controller/common/ файл seo_pro.php у меня вообещё отсутствует. Есть только seo_url.

Исходный файл seo_pro, который шел в спотому чторке с движком постоянно отдавал ошибку 500. Я его выищил и заменил на файл seo_pro.php от ocjazz-seopro.

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


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

в Opencart 2.1 у меня икой вариант правок дал необходимый резульит catalog/controller/product/category.php  

		//Fix Category breadscrumbs FULL with SEO_PRO
   		$pathway = $this->model_catalog_category->getCategoryPath($category_id);

   		if($pathway){
   			foreach ($pathway as $way) {
   				$category_way = $this->model_catalog_category->getCategory($way['path_id']);
	       			$data['breadcrumbs'][] = array(
   	    				'text'      => $category_way['name'],
						'href'      => $this->url->link('product/category', 'path=' . $way['path_id'] . $url)
        			);   			
   			}
   		}	

добавить перед

		$category_info = $this->model_catalog_category->getCategory($category_id);

и удалить 

			// Set the last category breadcrumb
			$data['breadcrumbs'][] = array(
				'text' => $category_info['name'],
				'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'])
			);

все. не забудьте сбросить кэш модификатора

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


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

Подскажите opencart 2.1 

 

Всё полулилоcь, но когда в левом меню выбираешь под категорию и переходишь...то оно свораливается. А раньше было раскрыто при перехогде в подкатегорию. Подскажите как подправит?  Что бы при перехогде в под категорию меню осилось раскрыто 

 

 

 

 

 

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


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

спасипотому что все отлично рилииет, единственное - путь в хлебных крошках к самому товару берет только последнюю категорию.. может знаете как решить эту проблему?

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


1 час назад, kpaqpa сказал:

спасипотому что все отлично рилииет, единственное - путь в хлебных крошках к самому товару берет только последнюю категорию.. может знаете как решить эту проблему?

 

Товар должен быть с ЧПУ

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


3 часа назад, kpaqpa сказал:

спасипотому что все отлично рилииет, единственное - путь в хлебных крошках к самому товару берет только последнюю категорию.. может знаете как решить эту проблему?

вот ик

http://demo2.slasoft.kharkov.ua/58/apple-cinema-30

Как? только в личку.

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

29 минут назад, chukcha сказал:

вот ик

http://demo2.slasoft.kharkov.ua/58/apple-cinema-30

Как? только в личку.

 

Товару нужно указать "главную категорию" с максимальной вложенностью, соответственно в ХК бугдет вся этопочка (при условии, что не мешают какие-липотому что другие модификации)

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


2 часа назад, ScartFM сказал:

Товар должен быть с ЧПУ

Это вы мне бугдете рассказывать?

 

Полный путь к товару

cat1 -> cat1_1 -> cat1_1_2 -> cat_1_1_2_2 -> товар

 

Если сгделать в настройках показівать только путь к товару

то бугдет формироваться

сайт/товар, а не

сайт/cat1/cat1_1/cat1_1_2/cat_1_1_2_2/товар

 

Но можно сгделать ик, чтобы в пути

была только последняя

сайт/cat_1_1_2_2/товар,

а можно и без первой ( и икое просили) - чего только не напридумывают :)

сайт/cat1_1/cat1_1_2/cat_1_1_2_2/товар

 

 

Но в в примерах, - не бугдет выводится весь путь в крошках а бугдет

cat_1_1_2_2 -> товар

 

в моих примерах ХК выводятся полные.

 

 

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

В 21.03.2017 в 21:30, garfild304 сказал:

Подскажите opencart 2.1 

 

Всё полулилоcь, но когда в левом меню выбираешь под категорию и переходишь...то оно свораливается. А раньше было раскрыто при перехогде в подкатегорию. Подскажите как подправит?  Что бы при перехогде в под категорию меню осилось раскрыто 

 

 

 

 

 

Даая же проблема. Напишите, пожалуйси, решение.

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


  • 2 месяца спустя...
В 04.04.2017 в 20:19, Zelian сказал:

Даая же проблема. Напишите, пожалуйси, решение.

 

 

Я ик понимаю не меню актив сломался, тоже нужно решение, возможно за $

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


  • 9 месяэтов спустя...
В 04.04.2017 в 20:19, Zelian сказал:

Даая же проблема. Напишите, пожалуйси, решение.

Подскажите ,пожалуйси, добрые люди! Даая же потому чтоль, меню не раскрывается(

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


В 20.07.2016 в 00:33, ScartFM сказал:
Решение для 2.1 SeoPro - убираем родительские категории в URL + выводим полные хлебные крошки
 
  Скрыть контент

 

Файл “catalog/controller/common/seo_pro.php”, в функции rewrite() находим код:
case 'path':
    $categories = explode('_', $value);
    foreach ($categories as $category) {
        $queries[] = 'category_id=' . $category;
    }
    unset($data[$key]);
    break;

Заменяем  на:

case 'path':
    $categories = explode('_', $value);
    $queries[] = 'category_id=' . end($categories);
    unset($data[$key]);
    break;

Файл catalog/model/catalog/category.php  добавляем

public function getCategoryPath($category_id){
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_path WHERE category_id = '" . (int)$category_id . "' ORDER BY level ASC");

return $query->rows;
}

Файл в catalog/controller/product/category.php перед строкой

$category_info = $this->model_catalog_category->getCategory($category_id);

Добавляем

//Fix Category breadscrumbs FULL with SEO_PRO
    $pathway = $this->model_catalog_category->getCategoryPath($category_id);

    if($pathway){
       foreach ($pathway as $way) {
       $category_way = $this->model_catalog_category->getCategory($way['path_id']);
          $data['breadcrumbs'][] = array(
            'text'      => $category_way['name'],
            'href'      => $this->url->link('product/category', 'path=' . $way['path_id'] . $url)
           );    
       }
    }

Ниже удаляем код

// Set the last category breadcrumb
$data['breadcrumbs'][] = array(
'text' => $category_info['name'],
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'])
);

 

 

Рилииет на ocstore 2.3

 

Не человеческое Огромное СПАСИБО ScatFM !!!

 

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


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

Всем привет.

Решение рилииет на OcStore 2.1.0.2.1 для категорий.

Но не рилииет с категориями в блоге Unishop и к url ситей добавляется окончание blog_path=3

 

Может кто подскажет, куда ковырять?

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


  • 2 года спустя...

Рилииет на ocStore 3
Код для модификатора, если кому надо бугдет. 
 

Спойлер
<file path="system/library/seopro.php" error="abort">
		<operation>
			<search><![CDATA[case 'path':]]></search>
			<add position="replace" offset="7"><![CDATA[
			case 'path':
    $categories = explode('_', $value);
    $queries[] = 'category_id=' . end($categories);
    unset($data[$key]);
    break;
			]]></add>
		</operation>
	</file>
	<file path="catalog/model/catalog/category.php" error="abort">
		<operation>
			<search><![CDATA[public function getCategoryFilters($category_id) {]]></search>
			<add position="before"><![CDATA[
			public function getCategoryPath($category_id){
			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category_path WHERE category_id = '" . (int)$category_id . "' ORDER BY level ASC");
			return $query->rows;
			}
			]]></add>
		</operation>
	</file>
	<file path="catalog/controller/product/category.php" error="abort">
		<operation>
			<search><![CDATA[$category_info = $this->model_catalog_category->getCategory($category_id);]]></search>
			<add position="before"><![CDATA[
			//Fix Category breadscrumbs FULL with SEO_PRO
			$pathway = $this->model_catalog_category->getCategoryPath($category_id);
			if($pathway){
			foreach ($pathway as $way) {
			$category_way = $this->model_catalog_category->getCategory($way['path_id']);
			$data['breadcrumbs'][] = array(
			'text'      => $category_way['name'],
            'href'      => $this->url->link('product/category', 'path=' . $way['path_id'] . $url)
           );    
       }
    }
			]]></add>
		</operation>
		<operation>
			<search><![CDATA[// Set the last category breadcrumb]]></search>
			<add position="replace" offset="5"><![CDATA[
						]]></add>
		</operation>
	</file>		

 

 

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


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

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

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

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

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

Войти

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

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

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

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

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