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

Хлебные крошки в модальном окне


Recommended Posts

Всем привет. Прошу помочь. Делаю показ товара в модальном окне на странице категории (быстрый просмотр). Создал контроллер prodmodal (скопировал контроллер товара, за некоторыми изменениями), добавил шаблон (скопировал tpl товара, убрав шапку, футер, колонки). Дописал вызов открытия окна в popup в common.js. Проблема в том, что нужно получить в модальном окне полный путь в breadcumbs как и на обычной странице товара. Seo pro включен и на обычных страницах работает. Однако при открытии товара в модальном окне крошки имеют вид Главная > Товар. 

 

Пробовал плясать вокруг получения path. Не могу понять, почему путь до товара не работает, когда по сути я копирую контроллер товара и получаю рендеринг html страницы товара в модальном окне, но на странице категории. Прошу помочь, навести на путь истинный.

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


    $this->load->model('catalog/category');

        if (isset($this->request->get['path'])) {
            $path = '';

            $parts = explode('_', (string)$this->request->get['path']);

            $category_id = (int)array_pop($parts);

            foreach ($parts as $path_id) {
                if (!$path) {
                    $path = $path_id;
                } else {
                    $path .= '_' . $path_id;
                }

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

                if ($category_info) {
                    $data['breadcrumbs'][] = array(
                        'text' => $category_info['name'],
                        'href' => $this->url->link('product/category', 'path=' . $path)
                    );
                }
            }

            // Set the last category breadcrumb
            $category_info = $this->model_catalog_category->getCategory($category_id);

            if ($category_info) {
                $url = '';

                if (isset($this->request->get['sort'])) {
                    $url .= '&sort=' . $this->request->get['sort'];
                }

                if (isset($this->request->get['order'])) {
                    $url .= '&order=' . $this->request->get['order'];
                }

                if (isset($this->request->get['page'])) {
                    $url .= '&page=' . $this->request->get['page'];
                }

                if (isset($this->request->get['limit'])) {
                    $url .= '&limit=' . $this->request->get['limit'];
                }

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

 

Я не пойму почему отрабатывает в дефолтной карточке товара и категорически не хочет в модалке?

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


Только что, anboza сказал:

не очень понятна суть хлебных крошек в попапе.....смысл в чем?

 

Мне тоже смысл не понятен, но заказчику нарисовали такой дизайн. Ориентировались на один крупный магазин. Задумка, полагаю, в том, чтобы быстро перейти, к примеру, в родительскую категорию, если уровень вложенности категорий больше 3-х, к примеру.

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


Только что, Padlik сказал:

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

:-D я просто не очень понимаю, как этим воспользоваться в модальном окне....

Вы бы поговорили с заказчиком, что это дикая дичь...

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

24 минуты назад, Padlik сказал:

Всем привет. Прошу помочь. Делаю показ товара в модальном окне на странице категории (быстрый просмотр). Создал контроллер prodmodal (скопировал контроллер товара, за некоторыми изменениями), добавил шаблон (скопировал tpl товара, убрав шапку, футер, колонки). Дописал вызов открытия окна в popup в common.js. Проблема в том, что нужно получить в модальном окне полный путь в breadcumbs как и на обычной странице товара. Seo pro включен и на обычных страницах работает. Однако при открытии товара в модальном окне крошки имеют вид Главная > Товар. 

 

Пробовал плясать вокруг получения path. Не могу понять, почему путь до товара не работает, когда по сути я копирую контроллер товара и получаю рендеринг html страницы товара в модальном окне, но на странице категории. Прошу помочь, навести на путь истинный.

Ван в платный 

Возможно даже сможет сделать @chukcha 

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

Только что, zCarot сказал:

Ван в платный 

Возможно даже сможет сделать @chukcha 

согласен, @chukcha - уважаемый комрад, спору нет.  Вопрос только в том, зачем это делать?)))

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

ЗАЧЕМ!!! крошка шатать?
Крошка надо кушать.

Однако, то не мой крошка, то их крошка, а нам чужой крошка не нужен

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

Только что, chukcha сказал:

ЗАЧЕМ!!! крошка шатать?
Крошка надо кушать.

Однако, то не мой крошка, то их крошка, а нам чужой крошка не нужен

:grin: в модальном окне крошка - это отдельный вид шатания!!))))

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

36 минут назад, Padlik сказал:

Я не пойму почему отрабатывает в дефолтной карточке товара и категорически не хочет в модалке?

Предполагаю что не передали в модаль это: $this->request->get['path']

Но если есть main_category, то надо в контроллере перебирать. Типа такого:

		$this->load->model('catalog/product');

		$product_info = $this->model_catalog_product->getProduct($product_id);

		if ($product_info) {

			if (!isset($this->request->get['path']) && !isset($this->request->get['manufacturer_id']) && !isset($this->request->get['search']) && !isset($this->request->get['tag'])) {
				$main_category = $this->model_catalog_product->getMainCategory($product_id);

				if ($main_category) {
					$this->request->get['path'] = $this->model_catalog_category->getCategoryPath($main_category);

					$path = '';

					$parts = explode('_', (string)$this->request->get['path']);
					(int)array_pop($parts);
      
					foreach ($parts as $path_id) {
						if (!$path) {
							$path = (int)$path_id;
						} else {
							$path .= '_' . (int)$path_id;
						}

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

						if ($category_info) {
							$data['breadcrumbs'][] = array(
								'text' => $category_info['name'],
								'href' => $this->url->link('product/category', 'path=' . $path)
							);
						}
					}

					// Set the last category breadcrumb
					$category_info = $this->model_catalog_category->getCategory($main_category);

					if ($category_info) {
						$url = '';

						if (isset($this->request->get['sort'])) {
							$url .= '&sort=' . $this->request->get['sort'];
						}

						if (isset($this->request->get['order'])) {
							$url .= '&order=' . $this->request->get['order'];
						}

						if (isset($this->request->get['page'])) {
							$url .= '&page=' . $this->request->get['page'];
						}

						if (isset($this->request->get['limit'])) {
							$url .= '&limit=' . $this->request->get['limit'];
						}

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

 

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

@optimlab

Благодарю Вас. С Вашей помощью осилил. 

 

В контроллер модуля товара для модального окна после if ($product_info) {

 

            if (!isset($this->request->get['path']) && !isset($this->request->get['manufacturer_id']) && !isset($this->request->get['search']) && !isset($this->request->get['tag'])) {
                $main_category = $this->model_catalog_product->getProductMainCategoryId($product_id);

                if ($main_category) {
                    $this->request->get['path'] = $this->model_catalog_category->getCategoryPath($main_category);

                    $path = '';

                    $parts = explode('_', (string)$this->request->get['path']);
                    (int)array_pop($parts);
      
                    foreach ($parts as $path_id) {
                        if (!$path) {
                            $path = (int)$path_id;
                        } else {
                            $path .= '_' . (int)$path_id;
                        }

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

                        if ($category_info) {
                            $data['breadcrumbs'][] = array(
                                'text' => $category_info['name'],
                                'href' => $this->url->link('product/category', 'path=' . $path)
                            );
                        }
                    }

                    // Set the last category breadcrumb
                    $category_info = $this->model_catalog_category->getCategory($main_category);

                    if ($category_info) {
                        $url = '';

                        if (isset($this->request->get['sort'])) {
                            $url .= '&sort=' . $this->request->get['sort'];
                        }

                        if (isset($this->request->get['order'])) {
                            $url .= '&order=' . $this->request->get['order'];
                        }

                        if (isset($this->request->get['page'])) {
                            $url .= '&page=' . $this->request->get['page'];
                        }

                        if (isset($this->request->get['limit'])) {
                            $url .= '&limit=' . $this->request->get['limit'];
                        }

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

В модель product.php

    public function getProductMainCategoryId($product_id) {
        $query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "' AND main_category = '1' LIMIT 1");

        return ($query->num_rows ? (int)$query->row['category_id'] : 0);
    }

В модель category.php

    public function getCategoryPath($category_id){
            $path = '';
               $category = $this->db->query("SELECT * FROM " . DB_PREFIX . "category c WHERE c.category_id = " .(int)($category_id));
    
   if($category->row['parent_id'] != 0){
             $path .= $this->getCategoryPath($category->row['parent_id']) . '_';
    }
    
    $path .= $category->row['category_id'];
    
     return $path;
}

 

 

И вот живой пример того, где используются крошки https://sbermarket.ru/metro/voda-aqua-minerale-nieghazirovannaia-4

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

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


4 часа назад, Padlik сказал:

И вот живой пример того, где используются крошки https://sbermarket.ru/metro/voda-aqua-minerale-nieghazirovannaia-4

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

Отлично!

Да, кстати, мне понравилась идея с хлебными крошками. Сразу видно где ты, так как в некоторых категориях вообще ХК отсутствуют.

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

4 часа назад, Padlik сказал:

return ($query->num_rows ? (int)$query->row['category_id'] : 0);

Хотел еще спросить, почему у вас это выражение ТРУ? У вас же лимит 1 и должна быть одна строка на выходе! Как так?

 

У меня методы немного другие:

	public function getMainCategory($product_id) {
		$query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "' AND main_category = '1'");

		if ($query->row) {
			return $query->row['category_id'];
		} else {
			return '';
		}
	}
	public function getCategoryPath($category_id) {
		$query = $this->db->query("SELECT GROUP_CONCAT( path_id ORDER BY level SEPARATOR '_' ) AS path FROM " . DB_PREFIX . "category_path WHERE category_id = '" . (int)$category_id . "'");

		return $query->row['path'];
	}

 

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

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

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

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

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

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

Вхід

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

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

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

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

Important Information

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