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

Как вывести название категории у каждого товара в модуле Рекомендуемые


Recommended Posts

  • 3 months later...
  • 3 months later...

В /catalog/controller/module/featured.php Где то в 100 строке добавить

$categories = $this->model_catalog_product->getCategories($product_id);
if ($categories)
  $categories_info = $this->model_catalog_category->getCategory($categories[0]['category_id']);
$this->data['category_title'] = $categories_info['name'];

В featured.tpl добавить в нужное место

<?php echo $category_title; ?>

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


kate1987, а как вместо информации $categories_info[name] выдать путь к категории, предполагаю что-то типа getCategory($path_id), мне нужно получить цифры 10_15_19, а не только 19.

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


1) Для начала расширяем модель:

открываем system/engine/model.php и добавляем новый метод
public function getRowValue($table, $colname, $where) {
 $sql = 'SELECT t.'.$colname.' FROM '.DB_PREFIX.$table.' t ';
 $sql .= ' WHERE t.'.$where.' LIMIT 1';
 $query = $this->db->query($sql);
 return !empty($query->row)? $query->row[$colname]: '';
}

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

2) Теперь открываем catalog/controller/module/featured.php и ищем:

$this->data['products'][] = array(
 'product_id'	 => $product_info['product_id'],
 'cid'	  => $this->model_catalog_product->getRowValue('product_to_category', 'category_id', 'product_id='.$product_info['product_id']),
 'ctitle'	 => '',
 'thumb'	  => $image,
 'name'	  => $product_info['name'],
 'price'	  => $price,
 'special'	 => $special,
 'rating'	 => $rating,
 'reviews'	 => sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']),
 'href'	  => $this->url->link('product/product', 'product_id=' . $product_info['product_id'])
);

заменяем на следующее:
$temp = array(
 'product_id'	 => $product_info['product_id'],
 'cid'	  => $this->model_catalog_product->getRowValue('product_to_category', 'category_id', 'product_id='.$product_info['product_id']),
 'ctitle'	 => '',
 'thumb'	  => $image,
 'name'	  => $product_info['name'],
 'price'	  => $price,
 'special'	 => $special,
 'rating'	 => $rating,
 'reviews'	 => sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']),
 'href'	  => $this->url->link('product/product', 'product_id=' . $product_info['product_id'])
);
if(!empty($temp['cid'])) {
	$temp['ctitle'] = $this->model_catalog_product->getRowValue('category_description', 'name', 'category_id='.$temp['cid']);
}
$this->data['products'][] = $temp;
unset($temp);

Таким образом мы получили ID и заголовок категории для каждого товара.

post-17794-0-68719100-1361699889_thumb.jpg

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


так в решении выше от kate1987 всего 4 строки и также работают, зачем писать столько кода. да и в ее решении уже присутствует и имя и ИД, задача построить патч к конечной категории: 10_15_19, а не только 19.

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


так в решении выше от kate1987 всего 4 строки и также работают, зачем писать столько кода. да и в ее решении уже присутствует и имя и ИД, задача построить патч к конечной категории: 10_15_19, а не только 19.

Кому что больше по душе... я всего лишь намекнул на расширение базовой модели ОС для большего удобства использования. Сегодня вам нужно вывести названия категорий, завтра - еще что-то. А отдельныйметод в модели на такие случаи не бывает лишним. Это так, к слову.

Что до решения вашей задачи. Если нужен просто список категорий, в которых есть товар - уберите из запроса LIMIT, получайте массив и делайте implode() через разделитель. Если собираетесь строить рекурсивный путь от родительской категории - до дочерней, это уже отдельная тема. Советую обратить внимание на метод getCategories() в catalog/model/catalog/category.php

Вот вариант с простым имплодом всех категорий.

Модель:

public function getRowItems($table, $selectcols = '*', $where = '', $order = 'category_id', $limit = '') {
 $sql = 'SELECT t.'.$selectcols.' FROM '.DB_PREFIX.$table.' t WHERE t.'.$where.' ORDER by t.'.$order;
 if(!empty($limit)) {
 $sql .= ' LIMIT '.$limit;
 }
 $query = $this->db->query($sql);
 return $query->rows;
}

контроллер:

$temp = array(
 'product_id'	 => $product_info['product_id'],
 'cid'	  => $this->model_catalog_product->getRowValue('product_to_category', 'category_id', 'product_id='.$product_info['product_id']),
 'categories'	 => $this->model_catalog_product->getRowItems('product_to_category', '*', 'product_id='.$product_info['product_id']),
 'ctitle'	 => '',
 'thumb'	  => $image,
 'name'	  => $product_info['name'],
 'price'	  => $price,
 'special'	 => $special,
 'rating'	 => $rating,
 'reviews'	 => sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']),
 'href'	  => $this->url->link('product/product', 'product_id=' . $product_info['product_id'])
   );
   if(!empty($temp['categories'])) {
    $temp2 = array();
    foreach ($temp['categories'] as $row) {
 $temp2[] = $this->model_catalog_product->getRowValue('category_description', 'name', 'category_id='.$row['category_id']);
    }
    $temp['ctitle'] = implode(', ', $temp2);
    unset($temp2);
   }
   $this->data['products'][] = $temp;
   unset($temp);

результат:

post-17794-0-24933000-1361718084_thumb.png

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


у меня каждый товар только в одной категории, просто если перейти к товару из поиска или феатуре или рекомендет, узнать категорию, а именно полный к ней путь нельзя, подскажите пожалйста как правильно обратится к getCategories(), но с полной генерацией пути

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


у меня каждый товар только в одной категории, просто если перейти к товару из поиска или феатуре или рекомендет, узнать категорию, а именно полный к ней путь нельзя, подскажите пожалйста как правильно обратится к getCategories(), но с полной генерацией пути

Я могу сколько угодно дать подсказок, но не научу логически мыслить. Метод getCategories() принимает единственный параметр - parent_id (ID родителя). Если у вас в каталоге товары размещены только в одной категории - все просто. В первом примере мы получили cid - ID категории. По cid мы можем взять полную запись из БД методом getCategory(), передав в него параметром cid. Получите массив данных одой категории. Если parent_id в нем больше нуля - снова вызывайте getCategory(), только уже с передачей parent_id и так до бесконечности. Я бы советовал вынести это в отдельный метод, который будет рекурсивно вызывать сам себя если parent_id больше 0. Там и строку сформируете, и контроллер останется чистеньким. Просто в контроллере потом добавите:

$temp['href'] = $this->url->link('product/product', 'path='.$temp['cid'].'&product_id=' . $product_info['product_id']);

Это для примера. У вас все должно выглядеть несколько иначе.

А насчет getCategories() - посмотрите в контроллере common/header, как строится меню категорий. Там эта рекурсия реализована. Не могу сказать что мне по душе способ ее реализации, но для вас это - практически готовое решение.

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


в конец каталог\модель\каталог\продукт.рхр:

    public function genPath($category_id) {
    $this->load->model('catalog/category');
    $category_info = $this->model_catalog_category->getCategory($category_id);
    if(!$category_info) {
        return false;
    }
       if ($category_info['parent_id']) {
           return $this->genPath($category_info['parent_id']) . "_" . $category_id;
       }
       return $category_id;
   }

в 100ю строку примерно каталог\контроллер\продукт\продукт.рхр:

        $categories = $this->model_catalog_product->getCategories($product_id);
       if ($categories){
           $categories_info = $this->model_catalog_category->getCategory($categories[0]['category_id']);
                  if (!isset($this->request->get['path'])) {
                   $categories_path = $this->model_catalog_product->genPath($categories[0]['category_id']);
               } else {
                   $categories_path = $this->request->get['path'];
               }
           $this->data['category_title'] =  $categories_info['name'];
           $this->data['category_url'] = $this->url->link('product/category')."&path=".$categories_path;
       }

в каталог\вью\тхем\дефаулт\темплате\продукт\рподукт.тпл:

 <a href="<?php echo $category_url; ?>"><!--?php echo $category_title; ?--></a>

получаем результат: как бы вы не попали на страничку с товаром(через поиск\феатуред\рекомендед\рандом\даже КОРЗИНА), вы всегда сможете перейти в категорию где этот товар находится. я конечно быдлокодер, такчто не хайте, работает, если что пишите как сделать правильнее.

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


  • 1 year later...
  • 2 years later...

Все вышенаписанное не подходит в готовом виде на ocStore 1.5.5.1.2. Для него нужно использовать следующее:

В файле

/catalog/controller/module/featured.php

Добавляем после строчки

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

это

$categories = $this->model_catalog_product->getCategories($product_id);
$categories_info = $this->model_catalog_category->getCategory($categories[0]['category_id']);

а также после строчки

'product_id' => $product_info['product_id'],

добавляем

'product_cat'=> $categories_info['name'],

И после в шаблоне /catalog/view/theme/шаблон/template/module/featured.tpl в нужном месте вставляем

<?php echo $product['product_cat']; ?>

 

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

  • 4 months later...
В 21.03.2017 в 13:20, mister12 сказал:

Все вышенаписанное не подходит в готовом виде на ocStore 1.5.5.1.2. Для него нужно использовать следующее:

В файле

/catalog/controller/module/featured.php

Добавляем после строчки


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

это


$categories = $this->model_catalog_product->getCategories($product_id);
$categories_info = $this->model_catalog_category->getCategory($categories[0]['category_id']);

а также после строчки


'product_id' => $product_info['product_id'],

добавляем


'product_cat'=> $categories_info['name'],

И после в шаблоне /catalog/view/theme/шаблон/template/module/featured.tpl в нужном месте вставляем


<?php echo $product['product_cat']; ?>

 

Подскажите, как сделать тоже самое но для списка товаров категории? Вывести название категории товара каждому товару в списке.

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


  • 4 months later...
В 21.03.2017 в 14:20, mister12 сказал:

Все вышенаписанное не подходит в готовом виде на ocStore 1.5.5.1.2. Для него нужно использовать следующее:

В файле

/catalog/controller/module/featured.php

Добавляем после строчки


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

это


$categories = $this->model_catalog_product->getCategories($product_id);
$categories_info = $this->model_catalog_category->getCategory($categories[0]['category_id']);

а также после строчки


'product_id' => $product_info['product_id'],

добавляем


'product_cat'=> $categories_info['name'],

И после в шаблоне /catalog/view/theme/шаблон/template/module/featured.tpl в нужном месте вставляем


<?php echo $product['product_cat']; ?>

 

 

 

 

Спасибо за решение! Очень помогло. Но когда я попытался сделать в две колонны 2 слайдера выпадает ошибка


Fatal error: Call to a member function getCategory() on null in /var/www/vhosts/u0410326.plsk.regruhosting.ru/httpdocs/twelveteen/catalog/controller/extension/module/featuredcarusel.php on line 42

 

Этот же слайдер отлично работает в одноколоночном режиме с этими настройками вывода категорий. Но когда пытаюсь его добавить в в одну из двух колонок появляется ошибка. В чем может быть проблема вообще? 

Прикладываю скины для наглядности

 

сейчас вот так 

 

image.thumb.png.b92c525a55458b1e23a8f8c799d10dd7.png

 

и при этом работает чуть ниже в слайдере эти категории

image.thumb.png.8147f179c0f205fde7a497dc73f3abcc.png

 

 

а надо чтобы вот так было

image.thumb.png.ac4041240cab25d752d71e548910ef54.png

 

Помогите решить проблему. Без категорий совсем не то

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


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

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

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

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

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

Вхід

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

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

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

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

Important Information

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