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

Как определить категорию?


Recommended Posts

Подскажите кто знает, как в шаблоне определить (в какой переменной находится) айди категории?

Суть в чем: хочу добавить описание и примечания к товарам, дабы не забивать выгрузки лишними данными, по сколько для тысячи товаров этот текст один и тот же, хочу вставлять его в шаблоне, в product.tpl по условию, если группа куда относится товар такая то, то вот вам дескрипшн (инклудить из внешнего файлика или из какой-то ячейки базы, не столь важно), если группа другая, то вот вам другой дескрипшн, всего их три, четыре максимум, а товаров может быть не одна тысяча.

Заранее спасибо.

P.S. брать айди категории из адресной строки не проблема, все работает, но только в том случае, когда к товару пришли по порядку, клацнув предварительно на название категории (путь: главная-категория-товар1), а если прийти по прямой ссылке на товар (путь: главная-товар1) то не могу получить значения к каким группам товар имеет принадлежность.

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


Я правильно понял - нужно в шаблоне product.tpl получить идентификатор категории к которой относиться товар? Если так то во-первых не идентификатор, и идентификаторы, это должен быть массив потому что у товара может быть несколько категорий. Но я только что посмотрел код контроллера отображения товара (для opencart 1.5.3.1) и там этого массива похоже что нету.. То есть нужно в самом контроллере прописать что-то типа:

$this->data['categories']  = $this->model_catalog_product->getCategories($this->request->get['product_id']);
Тогда в шаблоне в переменной $categories будет массив с идентификаторами категорий для этого товара.
  • +1 4
Надіслати
Поділитися на інших сайтах

Я правильно понял - нужно в шаблоне product.tpl получить идентификатор категории к которой относиться товар? Если так то во-первых не идентификатор, и идентификаторы, это должен быть массив потому что у товара может быть несколько категорий. Но я только что посмотрел код контроллера отображения товара (для opencart 1.5.3.1) и там этого массива похоже что нету.. То есть нужно в самом контроллере прописать что-то типа:

$this->data['categories']  = $this->model_catalog_product->getCategories($this->request->get['product_id']);
Тогда в шаблоне в переменной $categories будет массив с идентификаторами категорий для этого товара.

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

Я предполагал что придется добавлять в контролер передачу этих данных, но не знал как это делается.

Спасибо. Попробую добавить по Вашему примеру в контролер, отпишу что получится....

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


Получается все отлично. 2 момента, чтобы не стучались об грабли:

1

$this->data['categories']  = $this->model_catalog_product->getCategories($this->request->get['product_id']);

это надо вставлять под вызовом модели

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

2 Вывод массива

<?php foreach ($categories as $categorie) { ?>
<?php echo $categorie['category_id']; ?>
<?php } ?>

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


  • 2 weeks later...

а как тут сделать выборку из массива, ну так что бы написать если у товара такой айдишник то показать то а если нет то не показывать, ну или как правильно записать условие? сейчас вот так :


<?php foreach ($categories as $categorie) { ?>

<?php if ($categorie['category_id']=='78') {echo'выводим что нить';} ?>

<?php } ?>

а то просто если товар в нескольких категорий такое условие не канает) так вот, подскажите пожалуйста, как сделать правильно?

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

а как тут сделать выборку из массива, ну так что бы написать если у товара такой айдишник то показать то а если нет то не показывать, ну или как правильно записать условие? сейчас вот так :

<?php foreach ($categories as $categorie) { ?>
<?php if ($categorie['category_id']=='78') {echo'выводим что нить';} ?>
<?php } ?>
а то просто если товар в нескольких категорий такое условие не канает) так вот, подскажите пожалуйста, как сделать правильно?

Три раза перечитал, не понял в чем вопрос :) Вы хотите сделать несколько условий? т.е. если категория = 78 и 79?

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


Три раза перечитал, не понял в чем вопрос :) Вы хотите сделать несколько условий? т.е. если категория = 78 и 79?

:-D ну вот смотрите) если у нас товар находится в нескольких категориях(допустим в двух), и мы вот так выводим массив
<?php foreach ($categories as $categorie) { ?>
<?php echo $categorie['category_id']; ?>
<?php } ?>
то результатом вывода у нас будет 7879, если в трех то например как нить так 204778.

И получается что использовать условие

<?php foreach ($categories as $categorie) { ?>
<?php if ($categorie['category_id']=='78') {echo'выводим что нить';} ?>
<?php } ?>
для такого случая я не могу. Отсюда вопрос: как записать условие, что бы оно срабатывало если товар принадлежит нескольким категориям, а мне надо сделать проверку на какую нить одну категорию? Объясняю для чего(например сайт косметики), есть товар, товар относится к двум категориям, первая и вторая. Первая категория это вот допустим главные категории(для лица,для кожи,шампуни), вторая категория "новинки". И если товар находится в категории новики то ему выводим текст или картинку что это новинка. Загвоздка как раз таки в том что в массиве у меня может быть и 2078 и 5678 и 7879 и757890, а мое условие
<?php foreach ($categories as $categorie) { ?>
<?php if ($categorie['category_id']=='78') {echo'выводим что нить';} ?>
<?php } ?>
сработает только если в массиве будет только 78
Надіслати
Поділитися на інших сайтах

:-D ну вот смотрите) если у нас товар находится в нескольких категориях(допустим в двух), и мы вот так выводим массив

<?php foreach ($categories as $categorie) { ?>
<?php echo $categorie['category_id']; ?>
<?php } ?>
то результатом вывода у нас будет 7879, если в трех то например как нить так 204778.

И получается что использовать условие

<?php foreach ($categories as $categorie) { ?>
<?php if ($categorie['category_id']=='78') {echo'выводим что нить';} ?>
<?php } ?>
для такого случая я не могу. Отсюда вопрос: как записать условие, что бы оно срабатывало если товар принадлежит нескольким категориям, а мне надо сделать проверку на какую нить одну категорию? Объясняю для чего(например сайт косметики), есть товар, товар относится к двум категориям, первая и вторая. Первая категория это вот допустим главные категории(для лица,для кожи,шампуни), вторая категория "новинки". И если товар находится в категории новики то ему выводим текст или картинку что это новинка. Загвоздка как раз таки в том что в массиве у меня может быть и 2078 и 5678 и 7879 и757890, а мое условие
<?php foreach ($categories as $categorie) { ?>
<?php if ($categorie['category_id']=='78') {echo'выводим что нить';} ?>
<?php } ?>
сработает только если в массиве будет только 78
Почему же? Вы же перечитываете массив, как только считывается значение 78 выводится надпись. Если нужно два условия по И то ($categorie['category_id']=='78' & $categorie['category_id']=='79') если ИЛИ ($categorie['category_id']=='78' || $categorie['category_id']=='79')
Надіслати
Поділитися на інших сайтах


угу работает) а можно ли сделать такой же вывод, на странице всех товаров?

product/category

там где категории отображаются(страница категорий)

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

  • 3 weeks later...

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

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


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

icon_e_biggrin.gif ну вот смотрите) если у нас товар находится в нескольких категориях(допустим в двух), и мы вот так выводим массив

<?php foreach ($categories as $categorie) { ?>
<?php echo $categorie['category_id']; ?>
<?php } ?>
то результатом вывода у нас будет 7879, если в трех то например как нить так 204778.

И получается что использовать условие

<?php foreach ($categories as $categorie) { ?>
<?php if ($categorie['category_id']=='78') {echo'выводим что нить';} ?>
<?php } ?>
для такого случая я не могу. Отсюда вопрос: как записать условие, что бы оно срабатывало если товар принадлежит нескольким категориям, а мне надо сделать проверку на какую нить одну категорию? Объясняю для чего(например сайт косметики), есть товар, товар относится к двум категориям, первая и вторая. Первая категория это вот допустим главные категории(для лица,для кожи,шампуни), вторая категория "новинки". И если товар находится в категории новики то ему выводим текст или картинку что это новинка. Загвоздка как раз таки в том что в массиве у меня может быть и 2078 и 5678 и 7879 и757890, а мое условие
<?php foreach ($categories as $categorie) { ?>
<?php if ($categorie['category_id']=='78') {echo'выводим что нить';} ?>
<?php } ?>
сработает только если в массиве будет только 78

 

Я выполнил все как описано у Вас, и меня возник другой вопрос. У меня каждый товар в нескольких категориях (для примера в 3-х категориях 75, 77, 78)

Я в нужном месте, в файле product.tpl вывожу требуемую фразу вместо {echo'выводим что нить';}, я хочу вывести название товара допустим <?php echo $heading_title ?>. И на экране я получаю $heading_title - 3 РАЗА, по числу категорий которым принадлежит товар. Вопрос как модифицировать вывод:

<?php foreach ($categories as $categorie) { ?>

<?php if ($categorie['category_id']=='78') ?>

<?php echo $heading_title ?>

<?php } ?>

и заставить выводить только одну надпись при совпадении категории 78?

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


Спасибо, действительно помогло.

Привожу свои записи, может кому то поможет:

Для добавления ID категории в карточку товара:

В файл catalog/controller/product/product.php

После строки:

$this->data['attribute_groups'] = $this->model_catalog_product->getProductAttributes($this->request->get['product_id']);

Добавить:

//Строка вывода ID категории в карточке товара
$this->data['categories']  = $this->model_catalog_product->getCategories($this->request->get['product_id']);
//конец строки

После этого в карточке товава в нужном месте в файле

catalog/view/theme/pav_styleshop/template/product/product.tpl

вставить:

<?php foreach ($categories as $categorie) { ?>
<?php if ($categorie['category_id']=='145') ?> // цифра 145 номер требуемой категории
<?php echo $my_function; ?>
<?php break; { ?> // запрещает выполнять перебор категорий дальше
<?php } ?>
<?php } ?>
Змінено користувачем VladComplus
Надіслати
Поділитися на інших сайтах


 

Спасибо, действительно помогло.

Привожу свои записи, может кому то поможет:

Для добавления ID категории в карточку товара:

В файл catalog/controller/product/product.php

После строки:

$this->data['attribute_groups'] = $this->model_catalog_product->getProductAttributes($this->request->get['product_id']);

Добавить:

//Строка вывода ID категории в карточке товара
$this->data['categories']  = $this->model_catalog_product->getCategories($this->request->get['product_id']);
//конец строки

После этого в карточке товава в нужном месте в файле

catalog/view/theme/pav_styleshop/template/product/product.tpl

вставить:

<?php foreach ($categories as $categorie) { ?>
<?php if ($categorie['category_id']=='145') ?> // цифра 145 номер требуемой категории
<?php echo $my_function; ?>
<?php break; { ?> // запрещает выполнять перебор категорий дальше
<?php } ?>
<?php } ?>

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

Это все отображается для всех товаров, а как для каждой категории не знаю.

Кто подскажет.

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


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

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

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

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

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

Вхід

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

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

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

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

Important Information

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