shturmavik Опубликовано: марта 26, 2016 Жалоба Поделиться Опубликовано: марта 26, 2016 Как можно на странице product.tpl и category.tpl проверить есть ли товар в Избранном/ Закладках?Хочу применить css стиль.Движок OpenCart 2.1.0.2 (rs.1) Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
admin Опубликовано: марта 26, 2016 Жалоба Поделиться Опубликовано: марта 26, 2016 как вариант строить проверку на основе $this->model_account_wishlist->getTotalWishlist()); Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
shturmavik Опубликовано: марта 26, 2016 Автор Жалоба Поделиться Опубликовано: марта 26, 2016 Честно я 10 часов просидел в поисках овтетов с форумов, в основном с англоязычных. Мне сложно понять куда подставлять данные коды: в controller или в view. Есть ли такая возможность проверить на своём движке или скинуть код и куда подставлять его и я у себя реализую. Мне, по правде, сложно понять куда это вставить $this->model_account_wishlist->getTotalWishlist()); Ну и скорее всего это часть какого-то большого кода. Спасибо, что ответили. Погуглю инфу по вашему куску кода. Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
admin Опубликовано: марта 26, 2016 Жалоба Поделиться Опубликовано: марта 26, 2016 смотрите вот весь кусок кода который в шапку получает данные про закладки // Wishlist 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)); } собственно тут данных достаточно что бы что то этакое которое вам нужно сварганить дальше остается или эксперементировать или в раздел для лентяев :-) Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
shturmavik Опубликовано: марта 27, 2016 Автор Жалоба Поделиться Опубликовано: марта 27, 2016 Подскажите. Вставил в catalog/model/account/wishlist.php public function getAllWishlist() { 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; } } Добавил код в catalog/controller/product/category.php $this->load->model('account/wishlist'); $data['AllWishlist'] = $this->model_account_wishlist->getAllWishlist(); И в файл catalog/view/theme/default/template/product/category.tpl <?php if(in_array($product['product_id'], $AllWishlist)) { ?> Этот товар в закладках <?php } ?> Браузер выдает ошибку Warning: in_array() expects parameter 2 to be array, boolean given in /home/u146021/best-socksru/www/catalog/view/theme/default/template/product/category.tpl on line 130 Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
shturmavik Опубликовано: марта 27, 2016 Автор Жалоба Поделиться Опубликовано: марта 27, 2016 Поступил совет. не нужно в моделе что то добавлять. Все данные есть в сессии $this->session->data['wishlist'] Именно его вы можете перебрать, чтобы получить только id товара без ключа. А если мне сделать такое сравнение товара с wishlist $product_info = $this->model_catalog_product->getProduct($product_id); $this->load->model('account/wishlist'); if ($product_info) { if ($this->session->data['wishlist'] == $this->request->post['product_id']) { $data['AllWishlist'] = true; } } Или есть вот такой код: if (isset($this->session->data['wishlist'])) { if (in_array($product_id, $this->session->data['wishlist'])) { echo 'do something'; } } Но они у меня не сработали или я их ставлю не туда Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
shturmavik Опубликовано: марта 27, 2016 Автор Жалоба Поделиться Опубликовано: марта 27, 2016 Или есть вот такой код: вставьте его в catalog\controller\product\product.phpнапример перед if ($product_info) { и увидите результат. вставьте его в catalog\controller\product\product.php например перед if ($product_info) { и увидите результат. Отлично. Уже есть движение. Но есть не достаток:Когда например в сессии товара нет, залогинимся и добавим товар в закладки, то уже проверка не работает. Я так понял, что уже надо считывать из базы данных. Так как сессия отключается (в плане код). Какие могут быть дальше действия? Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
shturmavik Опубликовано: марта 27, 2016 Автор Жалоба Поделиться Опубликовано: марта 27, 2016 Кажись я решил всё. отпишусь чуть позднее. Настрою всё Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
Это популярное сообщение. shturmavik Опубликовано: марта 27, 2016 Автор Это популярное сообщение. Жалоба Поделиться Опубликовано: марта 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('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; } } Выше этого кода: if ($product_info) { $url = ''; if (isset($this->request->get['path'])) { В файл catalog/view/theme/default/template/product/product.tpl заменил кнопку сердечка на такой код: <?php if ($logged) { ?> <script type="text/javascript"> function ChangeColor(Element) { Element.style.color = 'red'; } </script> <button <?php if(isset($AllWishlist)) { ?> style="color: red" <?php } ?> type="button" data-toggle="tooltip" class="btn btn-default" title="<?php echo $button_wishlist; ?>" onclick="wishlist.add('<?php echo $product_id; ?>'); ChangeColor(this);"><i class="fa fa-heart"></i></button> <?php } ?> Добавил код в catalog/controller/product/category.php Вот такой код: $this->load->model('account/wishlist'); $data['AllWishlist'] = $this->model_account_wishlist->getAllWishlist(); Выше этого кода: $data['breadcrumbs'] = array(); В файл catalog/view/theme/default/template/product/category.tpl заменил кнопку сердечка на такой код: <?php if ($logged) { ?> <script type="text/javascript"> function ChangeColor(Element) { Element.style.color = 'red'; } </script> <button <?php if(isset($AllWishlist)) { ?> <?php if(in_array($product['product_id'], $AllWishlist)) { ?> style="color: red" <?php } ?> <?php } ?> type="button" data-toggle="tooltip" title="<?php echo $button_wishlist; ?>" onclick="wishlist.add('<?php echo $product['product_id']; ?>'); ChangeColor(this);"><i class="fa fa-heart"></i></button> <?php } ?> Теперь если мы залогинимся, то у товара появиться сердечко. Если нажмём, то оно загорится красным и товар добавиться в закладки. Если удалил из закладок, то сердечко перестанет быть красным.Пример http://best-socks.ru/ sashamaximiv, bazilio и admin 3 Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
uadik Опубликовано: ноября 20, 2019 Жалоба Поделиться Опубликовано: ноября 20, 2019 На PRO 2.3 0 2.5 заработает? Цитата Ссылка на комментарий Поделиться на других сайтах Больше вариантов поделиться...
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сейчас и зарегистрироваться позже. Если у вас есть учётная запись, войдите, чтобы публиковать под своей учётной записью.