Проверка, есть ли товар в "Закладках" и "Сравнении товаров"| Opencart 3

Установка, ошибки при работе с модулями, интеграции и прочее
Аватара пользователя
red-enh
Сообщения: 1
Зарегистрирован: 24.08.2022
Поблагодарил: 1 раз

Проверка, есть ли товар в "Закладках" и "Сравнении товаров"| Opencart 3

Непрочитанное сообщение red-enh »

Добрый день! Очень нужна ваша помощь. При добавлении товара в список сравнения или закладки это никак не отмечается на самом товаре. Ни в категории, ни в карточке товара. Никак нельзя понять, что этот товар уже добавлен в список.

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

На одном ресурсе я нашел отличный рабочий вариант для закладок и шаблона category.twig

Рабочий вариант для category.twig. Цитата с другого ресурса
Данное решение для Опенкарта 3.х

Допустим если есть желание менять цвет иконки у продукта если он есть в закладках


будем проверять и создавать массив
 

Код: Выделить всё

$this->session->data['wishlist']


Почему создавать? При регистрации/авторизации он будет пуст


Итак, идем в контроллер header.php


там уже есть вот такой код
 

Код: Выделить всё

if ($this->customer->isLogged()) {
			$this->load->model('account/wishlist');

			$data['text_wishlist'] = sprintf($this->language->get('text_wishlist'), $this->model_account_wishlist->getTotalWishlist());
		} else {
			$data['text_wishlist'] = sprintf($this->language->get('text_wishlist'), (isset($this->session->data['wishlist']) ? count($this->session->data['wishlist']) : 0));
		}


после
 

Код: Выделить всё

$this->load->model('account/wishlist');


добавить
 

Код: Выделить всё

			$p_wishlist = $this->model_account_wishlist->getWishlist();
			
			if( !empty($p_wishlist) ) {
				foreach( $p_wishlist as $val ) {
					if( isset($this->session->data['wishlist']) && !in_array($val['product_id'], $this->session->data['wishlist']) ) {
					    $this->session->data['wishlist'][] = $val['product_id'];
				    }
				}
			}




Допустим будем проверять на странице категории



в контроллере category.php находим вот такой код
 

Код: Выделить всё

				$data['products'][] = array(
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        => $result['name'],
					'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
					'price'       => $price,
					'special'     => $special,
					'tax'         => $tax,
					'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
					'rating'      => $result['rating'],
					'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
				);


добавляем в массив значение
 

Код: Выделить всё

'is_not' => ( isset($this->session->data['wishlist']) && in_array($result['product_id'], $this->session->data['wishlist']) ) ? true : false,


в итоге вот так выходит
 

Код: Выделить всё

				$data['products'][] = array(
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        => $result['name'],
					'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
					'price'       => $price,
					'special'     => $special,
					'tax'         => $tax,
					'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
					'rating'      => $result['rating'],
					'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
                   'is_not' => ( isset($this->session->data['wishlist']) && in_array($result['product_id'], $this->session->data['wishlist']) ) ? true : false
				);


Теперь на фронте в шаблоне делаем проверку
 

Код: Выделить всё

{% if product.is_not %}
есть в закладках
{% else %}
нет продукта в закладках
{% endif %}


В общем всё. Далее, думаю сами разберетесь что куда вставить в проверке на фронте



Все работает! Но только для шаблона category.twig. Как сделать что бы работало в карточке товара product.twig ?

Простое повторение этой инструкции для контроллера и шаблона product не дают результатов.

 
Аватара пользователя
nikifalex
Разработчик дополнений
Сообщения: 315
Зарегистрирован: 17.03.2022
Откуда: Россия
Поблагодарил: 4 раз
Спасибо: 38 раз
Контактная информация:

Re: Проверка, есть ли товар в "Закладках" и "Сравнении товаров"| Opencart 3

Непрочитанное сообщение nikifalex »

а как вы пытались сделать?
Аватара пользователя
SiteMix
Сообщения: 67
Зарегистрирован: 26.05.2022
Поблагодарил: 18 раз
Спасибо: 7 раз

Re: Проверка, есть ли товар в "Закладках" и "Сравнении товаров"| Opencart 3

Непрочитанное сообщение SiteMix »

red-enh писал(а): 24 авг 2022, 10:36 Простое повторение этой инструкции для контроллера и шаблона product не дают результатов.

Простое повторение для product должно сработать для модуля связанных товаров который выводится внизу страницы товара как Рекомендуемые, при заполнении соответствующего поля в свойствах товара.
Для самого товара нужно добавлять дополнительно.
Аватара пользователя
Grarnik
Сообщения: 1
Зарегистрирован: 11.01.2023

Re: Проверка, есть ли товар в "Закладках" и "Сравнении товаров"| Opencart 3

Непрочитанное сообщение Grarnik »

Чтобы работало в хидере, то например вот так: 

в контроллере header.php
 

Код: Выделить всё

$data['is_not']	= $this->session->data['wishlist'];
например перед
 

Код: Выделить всё

return $this->load->view('common/header', $data);
во вьюхе header.twig
 

Код: Выделить всё

{% if is_not %}
      <a href="{{ wishlist }}"><img src="image/catalog/addtowish-red.svg" alt=""></a>
{% else %}
      <a href="{{ wishlist }}"><img src="image/catalog/addtowish.svg" alt=""></a>
{% endif %}
В product.php вставить
 

Код: Выделить всё

$data['is_not']	= isset($this->session->data['wishlist']) && in_array($result['product_id'], $this->session->data['wishlist']) ? true : false;
после
 

Код: Выделить всё

$data['header'] = $this->load->controller('common/header');
в шаблоне product.twig
 

Код: Выделить всё

{% if is_not %}
    <button type="button" class="btn_wishlist" onclick="wishlist.add('{{ product.product_id }}');"><img src="image/catalog/addtowish-red.svg" alt=""></button>
{% else %}
    <button type="button" class="btn_wishlist" onclick="wishlist.add('{{ product.product_id }}');"><img src="image/catalog/addtowish.svg" /></button>
{% endif %}
addtowish-red.svg - это изображение с красным сердцем, а вторая картинка сердце без заливки 

 
Последний раз редактировалось Grarnik 11 янв 2023, 01:29, всего редактировалось 1 раз.
Ответить