[Помогите] Товар добавлен к сравнению

Тема в разделе "OpenCart", создана пользователем dwm, 18 фев 2016.

  1. dwm

    dwm

    Регистрация:
    31 окт 2012
    Сообщения:
    139
    Симпатии:
    14
    Приветствую, уважаемые форумчане.
    Ситуация: нужно чтобы в категории сохранялись отметки на товаре, который добавлен в сравнение. То есть, например значок
    fa-circle-o менялся на fa-check-circle-o после добавления в сравнение.

    Как-то немного несвязно объяснил, но надеюсь поймете и поможете. Заранее спасибо!
    С Уважением, я
     
  2. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    890
    какая версия движка, 2 или 1?
    нужно читать данные сессии, масив wishlist и делать проверку ето если не авторизирован покупатель, если авторизирован то делать выборку с БД с таблици customer_wishlist
     
    Последнее редактирование: 18 фев 2016
  3. dwm

    dwm

    Регистрация:
    31 окт 2012
    Сообщения:
    139
    Симпатии:
    14
    Версия OK 2.0.3.1
     
  4. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    890
    отредактируйте модель, а именно
    catalog/model/account/wishlist.php
    добавьте вконце файла перед
    PHP:
    }
    следующую ф-цию

    PHP:
    public function getAllWishlist() {
    // by nix
            
    if ($data $this->getWishlist()) {
                
    $out = array();
                foreach (
    $data as $key => $value) {
                    
    $out[] = $value['product_id'];
                }
                return 
    $out;
            } else if (isset(
    $this->session->data['wishlist'])) {
                return 
    $this->session->data['wishlist'];
            } else {
                return 
    false;
            }

        }
    как она работает: сначала проверяет если пользователь авторизован то выбирает из БД товары которые он добавил в избраные, потом если нет результата от етого, то из сессии достает товары которые добавил пользователь, если и там нет то возвращает лож
    ета ф-ция возвращает массив с ИД товаров

    Теперь осталось сделать проверку где удобно, лучше всего делать проверку ф-цией in_array();

    Вот например в категории catalog/controller/product/category.php
    можно сразу перед кодом
    PHP:
    $data['breadcrumbs'] = array();
    вставить следующий

    PHP:
    $this->load->model('account/wishlist');
            
    $data['AllWishlist'] = $this->model_account_wishlist->getAllWishlist();
    Теперь в самом шаблоне и сделаем проверку
    открываем файл catalog/view/theme/default/template/product/category.tpl
    и после кода
    PHP:
    <?php foreach ($products as $product) { ?>
    пишем проверку
    и выводим что надо
    PHP:
    <?php if(in_array($product['product_id'], $AllWishlist)) { ?>
            Цей товар вже в списку бажаних
            <?php ?>
    Даную модель можно юзать где угодно, например и в товаре.
     
    dwm нравится это.
  5. dwm

    dwm

    Регистрация:
    31 окт 2012
    Сообщения:
    139
    Симпатии:
    14
    Но это со списком желаемых. А в сравнение так же?


    То есть, после нажатия на кнопку "Сравнить", пользователь должен видеть в категории отметки на тех товарах, которые он добавил. Чтобы не потерялся... Хз... шэф сказал сделать так. А начальник всегда прав)
     
  6. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    890
    Да также
     
  7. Shturmavik

    Shturmavik

    Регистрация:
    29 ноя 2015
    Сообщения:
    2
    Симпатии:
    0
    Задача у меня такая:
    Как можно на странице product.tpl и category.tpl проверить есть ли товар в Избранном/ Закладках?
    Хочу применить css стиль.
    Движок OpenCart 2.1.0.2 (rs.1)


    Когда ставлю такой код для Wishlist как вы привели выше, то браузер выдает ошибку
    Что делать?

    Другие на этот повод советуют вот что:

    --- Добавлено, 27 мар 2016 ---
    Код:
    if (isset($this->session->data['wishlist'])) {
      if (in_array($product_id, $this->session->data['wishlist'])) {
        echo 'do something';
      }
    } 

    вставьте его в catalog\controller\product\product.php
    например перед
    Код:
    if ($product_info) {
    и увидите результат.

    Отлично. Уже есть движение. Но есть не достаток:
    Когда например в сессии товара нет, залогинимся и добавим товар в закладки, то уже проверка не работает. Я так понял, что уже надо считывать из базы данных. Так как сессия отключается (в плане код). Какие могут быть дальше действия?
    --- Добавлено, 27 мар 2016 ---
    Добавил код в catalog/model/account/wishlist.php

    Код:
    public function getAllWishlist() {
    // by nix
            if ($data = $this->getWishlist()) {
                $out = array();
                foreach ($data as $key => $value) {
                    $out[] = $value['product_id'];
                }
                return $out;
            } else if (isset($this->session->data['wishlist'])) {
                return $this->session->data['wishlist'];
            }
    
        }
    Добавил код в catalog/controller/product/product.php

    Между этим кодом
    Код:
            $this->load->model('catalog/product');
            $product_info = $this->model_catalog_product->getProduct($product_id);
    и этим
    Код:
    if ($product_info) {
                $url = '';
    
                if (isset($this->request->get['path'])) {
    ВОт такой код:
    Код:
        $this->load->model('account/wishlist');
            $zol_wish = $this->model_account_wishlist->getAllWishlist();
            if (isset($product_id) && isset($zol_wish)) {
              if (in_array($product_id, $zol_wish)) {
                $data['AllWishlist'] = true;
              }
              }
    В файл catalog/view/theme/default/template/product/product.tpl добавил
    Код:
    <?php if(isset($AllWishlist)) { ?>
                        style="color: red"
                      <?php } ?> 
    Теперь в карточке товара если добавлен товар в избранное, то загорается сердечко красным.
    Но такое теперь не работает в категории. Как минимум ругаеться на product_id.
    Как можно в catalog/controller/product/category.php получить product_id
     
    Последнее редактирование: 27 мар 2016
  8. Shturmavik

    Shturmavik

    Регистрация:
    29 ноя 2015
    Сообщения:
    2
    Симпатии:
    0
  9. exodus

    exodus

    Регистрация:
    12 авг 2018
    Сообщения:
    2
    Симпатии:
    0
    Добрый день!
    В категориях все отлично получилось сделать, а как сделать тоже самое в самой карточке товара?