Стоит задача переделать механизм добавления товаров в сравнение. А именно заменить стандартную ссылку "добавить в сравнение" чекбоксом. Заменил: Код: <a onclick="addToCompare('<?php echo $product['product_id']; ?>');"> на это: Код: <input type="checkbox" onclick="addToCompare('<?php echo $product['product_id']; ?>');"> В результате товар добавляется в сравнение, однако этого недостаточно. Отмеченные чекбоксы при обновлении страницы становятся не отмеченными. Плюс ко всему необходимо реализовать удаление из списка сравнения путём снятия чекбокса. Нуждаюсь в помощи знающих людей, или может кто видел готовое решение. Буду очень признателен.
Так и не нашёл решение задачи( Как вариант подошло бы, чтобы при нажатии на ссылку "в сравнение" она менялась на ссылку "удалить из сравнения" с соответствующей её названию функцией. Странно что вопрос до сих пор не поднимался, это же как минимум не логично, когда не видно добавлен товар в сравнение или нет. Подскажите хоть в какую сторону копать или поделитесь опытом, если уже реализовывали такое. Думаю будет полезно многим.
Всё ещё пытаюсь добиться желаемого, а именно вывести на странице категории кнопку "удалить из сравнения". Решил действовать по аналогии с кнопкой "добавить в сравнение" в category.php после Код: $this->data['button_compare'] = $this->language->get('button_compare'); добавил Код: $this->data['button_compare_remove'] = $this->language->get('button_compare_remove'); в russian.php после Код: $_['button_compare'] = 'В сравнение'; добавил Код: $_['button_compare_remove'] = 'Удалить'; в category.tpl это Код: <div class="compare"><a onclick="addToCompare('<?php echo $product['product_id']; ?>');"><?php echo $button_compare; ?></a></div> заменил на Код: <div class="compare"> <a onclick="addToCompare('<?php echo $product['product_id']; ?>');"><?php echo $button_compare; ?></a> <a onclick="remFromCompare('<?php echo $product['product_id']; ?>');"><?php echo $button_compare_remove; ?></a> </div> В common.js создал функцию remFromCompare. По аналогии с функцией addToCompare получается Код: function remFromCompare(product_id) { $.ajax({ url: 'index.php?route=product/compare/remove', type: 'post', data: 'product_id=' + product_id, dataType: 'json', success: function(json) { $('.success, .warning, .attention, .information').remove(); if (json['success']) { $('#notification').html('<div class="success" style="display: none;">' + json['success'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>'); $('.success').fadeIn('slow'); $('#compare-total').html(json['total']); $('html, body').animate({ scrollTop: 0 }, 'slow'); } } }); } Далее в compare.php создал функцию public function remove по аналогии с public function add Что менять в public function remove я не знаю. У кого-нибудь есть идеи? Или может что-то не так делаю и можно сделать иначе?
млять, написал здоровый пост, нажал наверно куда то, перешел по ссылке, восстнавливать всё влом смотри, в compare.php уже есть функция удаления из сравнения. только она идет на get, вот в свою public function remove ставишь public function remove() { if (isset($this->request->post['product_id'])) { $key = array_search($this->request->post['product_id'], $this->session->data['compare']); $json = array(); if ($key !== false) { unset($this->session->data['compare'][$key]); $this->load->model('catalog/product'); $product_info = $this->model_catalog_product->getProduct($this->request->post['product_id'])); //ну и соответственно создай $json['success'] = 'Товар '.$product_info['name'].' удален из сравнения!' } } $this->response->setOutput(json_encode($json)); } может где то ошибся, сам не проверял, смысл такой, приходит номер продукта постом на функцию remove(), проверяется есть ли номер в массиве сравнения, лежащем в сессии, если есть то удаляется из массива, смотрится имя продукта, чтоб послать его в сообщении об успехе, формируется сообщение, отправляется json хорошо бы еще дописать сообщение об ошибки если номер не найден в массиве, по языкам я не проводил, так что придется перекодировать файл в utf8 без bom
Ага. Только сделал ли топикстартер такую фишку, чтобы это "убрать из сравнения" выводилось только у тех товаров, которые в этом сравнении находятся. ?????
Если использовать только один язык то достаточно в \catalog\view\theme\Ваша тема\template\product\category.tpl это Код: <div class="compare"><a onclick="addToCompare('<?php echo $product['product_id']; ?>');"><?php echo $button_compare; ?></a></div> заменить на это Код: <div class="compare"> <a onclick="addToCompare('<?php echo $product['product_id']; ?>');"><?php echo $button_compare; ?></a> <a onclick="remFromCompare('<?php echo $product['product_id']; ?>');">Удалить</a> </div> не забыть поменять кодировку category.tpl на UTF-8 без BOM Далее в \catalog\view\javascript\common.js в самом конце добавить это Код: function remFromCompare(product_id) { $.ajax({ url: 'index.php?route=product/compare/remove', type: 'post', data: 'product_id=' + product_id, dataType: 'json', success: function(json) { $('.success, .warning, .attention, .information').remove(); if (json['success']) { $('#notification').html('<div class="success" style="display: none;">' + json['success'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>'); $('.success').fadeIn('slow'); $('#compare-total').html(json['total']); $('html, body').animate({ scrollTop: 0 }, 'slow'); } } }); } Далее в \catalog\controller\product\compare.php в коце файла перед Код: } ?> добавить это Код: public function remove() { if (isset($this->request->post['product_id'])) { $key = array_search($this->request->post['product_id'], $this->session->data['compare']); $json = array(); if ($key !== false) { unset($this->session->data['compare'][$key]); $this->language->load('product/compare'); $this->load->model('catalog/product'); $product_info = $this->model_catalog_product->getProduct($this->request->post['product_id']); $json['success'] = 'tovar '.$product_info['name'].'Удалён'; $json['total'] = sprintf($this->language->get('text_compare'), (isset($this->session->data['compare']) ? count($this->session->data['compare']) : 0)); } } $this->response->setOutput(json_encode($json)); } кодировку compare.php поменять на UTF-8 без BOM Эту "фишку" до конца не сделал. При Использовании hide/show работает, однако при обновлении страницы всё сбрасывается Если кто знает как это сделать прошу поделится.
в контроллере категории перед $this->data['products'][] = array( нужно добавить $in_compare = 0; if (isset($this->session->data['compare'])) { $key = array_search($result['product_id'], $this->session->data['compare']); if ($key !== false) { $in_compare = 1; } } далее В $this->data['products'][] = array( добавить 'in_compare' => $in_compare, получается что если продукт в сравнении, то в шаблоне категории у продукта $product['in_compare'] будет равно 1 отсюда выводим код который необходим <?php if ($product['in_compare'] == 1) { ?> код кнопки для удаления продукта из сравнения <?php } ?> думаю для упрощения жизни код кнопок (и добавить в сравнении и кнопки убрать из сравнения) ваще не убирать со страницы, а в зависимости от php прятать его прятать его <?php if ($product['in_compare'] == 1) { ?> style="dispaly:block" <?php } else { ?> style="dispaly:none" <?php } ?> или прятать классами, как хотите тогда будет просто в js функции добавить появление одной и исчезновение другой кнопки, так сказать что б сразу было видно