Перейти к содержанию
7up

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

Рекомендуемые сообщения

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

Суть в чем: хочу добавить описание и примечания к товарам, дабы не забивать выгрузки лишними данными, по сколько для тысячи товаров этот текст один и тот же, хочу вставлять его в шаблоне, в 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

Поделиться сообщением


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

Всем спасибо, работает отлично!

Поделиться сообщением


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

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


<?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

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

Поделиться сообщением


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

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

Поделиться сообщением


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

Подскажите как в product_list.tpl получить ID категории, если известно ID товара?

Поделиться сообщением


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

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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

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

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