На форуме 9558 тем, 76452 сообщений, 44664 участников
тема · 652 просмотра · 14 ответов

Как победить ошибку Notice: Undefined variable: category_id в Opencart + Mega Filter PRO/PLUS?

Общие вопросы
читают: 0 участников и 1 гость
порядок
26 июн 2023 10:52#1
Мое почтение, товарищи программисты!
В php почти полный ноль, нужна помощь решить маленькую задачку.
Opencart 2.3.0.2, версия php на сайте 7.2.24.
В файле \catalog\controller\product\product.php есть участок кода, который определяет вывод шаблона:
code
$this->response->setOutput($this->load->view('product/product', $data));


Мне нужно вывести второй шаблон у товаров, но с условием, только у категорий с id более 1077.
Методом "тыка" нашел как вывести:
code
if ($category_id > 1077 ) {       
$this->response->setOutput($this->load->view('product/product_2', $data));
} else
$this->response->setOutput($this->load->view('product/product', $data));


Сработало, но у товаров, которые выводятся через модуль Mega Filter PRO/PLUS, вылазит ошибка Notice: Undefined variable: category_id in /var/www/www-root/data/www/.../system/storage/modification/catalog/controller/product/product.php on line 491
Ругается на строку if ($category_id > 1077 ) {
Возможно урл подсказывает куда копать, что проблема где-то в массиве категорий, но я в этом почти ноль:
Так выглядит урл обычного товара: /index.php?route=product/product&path=59&product_id=19603
Так выглядит урл товара в фильтре Mega Filter PRO/PLUS: /index.php?route=product/product&product_id=615
26 июн 2023 11:29#2
После фильтрации нет указания в какой категории находитесь. Делайте проверку на существование category_id
26 июн 2023 12:54#3
Вы так же учитывайте, что товар может быть в нескольких категориях, поэтому лучше бы вытаскивать все категории товара и проверять их.
Мои модули: Оптимизация, SEO, Скидки, Отчёты и не только

Оказываю услуги поддержки и выполнения различного рода задач для сайтов (допилы) в рамках самозанятости (фриланс). Стоимость и прочее зависит от задач. График ненормированный, но дело делаю.
26 июн 2023 16:27#4
karpov написал(а): ↑После фильтрации нет указания в какой категории находитесь. Делайте проверку на существование category_id

Я не смогу. Готов оплатить работу. Прикрепляю файлы.
Файл /catalog/controller/product/product.php: https://disk.yandex.ru/d/EoeQ1uJTfY6yAg
Файл /catalog/controller/module/mega_filter.php: https://disk.yandex.ru/d/TnlyhzYKncq_Wg
26 июн 2023 16:44#5
Вы напишите как должно быть-то. Скажем, у вас товар в двух категориях 50 и 1250, какая вьюха должна отображаться?
Мои модули: Оптимизация, SEO, Скидки, Отчёты и не только

Оказываю услуги поддержки и выполнения различного рода задач для сайтов (допилы) в рамках самозанятости (фриланс). Стоимость и прочее зависит от задач. График ненормированный, но дело делаю.
26 июн 2023 20:37#6
devimirochnik написал(а): ↑Вы напишите как должно быть-то. Скажем, у вас товар в двух категориях 50 и 1250, какая вьюха должна отображаться?

У меня товары прикреплены только к одной категории, нет такого, что один товар может отображаться в разных категориях. Все просто. У товаров, с id категорий выше 1077, вьюха product/product_2, у всех остальных product/product
26 июн 2023 21:01#7
Т.е. если вдруг когда-нибудь добавите несколько категорий, то наличие одной категории с id выше 1077 - это значит нужно отображать product_2, так?
Мои модули: Оптимизация, SEO, Скидки, Отчёты и не только

Оказываю услуги поддержки и выполнения различного рода задач для сайтов (допилы) в рамках самозанятости (фриланс). Стоимость и прочее зависит от задач. График ненормированный, но дело делаю.
26 июн 2023 21:26#8
devimirochnik написал(а): ↑Т.е. если вдруг когда-нибудь добавите несколько категорий, то наличие одной категории с id выше 1077 - это значит нужно отображать product_2, так?

Больше не будет категорий, все ок)
26 июн 2023 21:32#9
У опенкарта нет функции получить 1 категорию. В опенкарте для товара получают список категорий. Соответственно, из этого пишется код, а не из того, как вы настраиваете)) И если где-то случайно добавите, то функция будет возвращать несколько категорий.
Мои модули: Оптимизация, SEO, Скидки, Отчёты и не только

Оказываю услуги поддержки и выполнения различного рода задач для сайтов (допилы) в рамках самозанятости (фриланс). Стоимость и прочее зависит от задач. График ненормированный, но дело делаю.
26 июн 2023 22:02#10
devimirochnik написал(а): ↑У опенкарта нет функции получить 1 категорию. В опенкарте для товара получают список категорий. Соответственно, из этого пишется код, а не из того, как вы настраиваете)) И если где-то случайно добавите, то функция будет возвращать несколько категорий.

Мне просто нужно отображать особый шаблон у товаров, у которых id больше 1077) В принципе, то что я сделал, работает. Но от ошибки хочется избавиться по уму.
26 июн 2023 22:19#11
В общем, тогда код в стиле если 50 и 1250, то значит отображается 2-ая вьюха, если 50 и 250, то отбражается первая вьюха, если так, то код такой:

php
            $is_product_2_view = false;

$cats = $this->model_catalog_product->getCategories($product_id);

foreach($cats as $item) {
if ((int)$item['category_id'] > 1077) {
$is_product_2_view = true;
}
}

if ($is_product_2_view) {
$this->response->setOutput($this->load->view('product/product_2', $data));
} else {
$this->response->setOutput($this->load->view('product/product', $data));
}
Мои модули: Оптимизация, SEO, Скидки, Отчёты и не только

Оказываю услуги поддержки и выполнения различного рода задач для сайтов (допилы) в рамках самозанятости (фриланс). Стоимость и прочее зависит от задач. График ненормированный, но дело делаю.
26 июн 2023 22:22#12
Код чуть выше отредактировал, там символа не хватало
Мои модули: Оптимизация, SEO, Скидки, Отчёты и не только

Оказываю услуги поддержки и выполнения различного рода задач для сайтов (допилы) в рамках самозанятости (фриланс). Стоимость и прочее зависит от задач. График ненормированный, но дело делаю.
26 июн 2023 23:03#13
devimirochnik написал(а): ↑В общем, тогда код в стиле если 50 и 1250, то значит отображается 2-ая вьюха, если 50 и 250, то отбражается первая вьюха, если так, то код такой:

php
            $is_product_2_view = false;

$cats = $this->model_catalog_product->getCategories($product_id);

foreach($cats as $item) {
if ((int)$item['category_id'] > 1077) {
$is_product_2_view = true;
}
}

if ($is_product_2_view) {
$this->response->setOutput($this->load->view('product/product_2', $data));
} else {
$this->response->setOutput($this->load->view('product/product', $data));
}

Работает, ошибка ушла. Благодарю! Напишите в личку данные куда могу отправить благодарность.
27 июн 2023 12:28#14
Делов 5 минут))
Мои модули: Оптимизация, SEO, Скидки, Отчёты и не только

Оказываю услуги поддержки и выполнения различного рода задач для сайтов (допилы) в рамках самозанятости (фриланс). Стоимость и прочее зависит от задач. График ненормированный, но дело делаю.
27 июн 2023 21:49#15
devimirochnik написал(а): ↑Делов 5 минут))

Благодарю! Выручили.
сообщения 1–15 из 15
Чтобы ответить, войдите или зарегистрируйтесь.

Похожие темы