Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Yoda

Користувачі
  • Публікації

    3 181
  • З нами

  • Відвідування

Усі публікації користувача Yoda

  1. Вам нужно переделать структуру категорий и сделать две основные родительские как сказал выше уважаемый Снастик.После этого раскрыть уже освоенным методом с использованием стиля (display: block;) -это кстати не условие )))). а стиль. И таки да.. придется править tpl, в которой нужно убрать заголовок, и переназначить стили заголовка блокам категориям верхнего уровня.
  2. Комментарий ни о чем, я бы попросил вас либо раскрыть тему, либо не умничать.
  3. в 1,5,3 За добавления товара в корзину и категории отвечает вот эта функция в common.js function addToCart(product_id) { $.ajax({ url: 'index.php?route=checkout/cart/update', type: 'post', data: 'product_id=' + product_id, dataType: 'json', success: function(json) { $('.success, .warning, .attention, .information, .error').remove(); if (json['redirect']) { location = json['redirect']; } if (json['error']) { if (json['error']['warning']) { $('#notification').html('<div class="warning" style="display: none;">' + json['error']['warning'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>'); $('.warning').fadeIn('slow'); $('html, body').animate({ scrollTop: 0 }, 'slow'); } } 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'); $('#cart_total').html(json['total']); $('html, body').animate({ scrollTop: 0 }, 'slow'); } } }); } Соответственно чтобы добавить количество тебе надо передать в запрос кроме вот этого data: 'product_id=' + product_id, еще и '&quantity=' + quantity Где переменная quantity - как раз и будет количеством. Это можно реализовать достаточно просто, добавив элемент "input" после кнопки купить к каждому товару и присваивая значения переменной quantity через селектор .next к примеру. Но могут возникнуть непредвиденные осложнения у больного, так как при этом нет проверки наличия на складе достаточного количества товара! Т.е. проверку тоже надо дописывать.
  4. для версии 0.2 Дополнение. Добавил кнопку отменить, и сделал активацию поля формы редактирования по клику на текстовый блок. Поле в шаблоне меняем вот на это! <td> <div id="<?php echo $product['product_id']; ?>" class="inlineEdit"><?php echo $product['price']; ?></div> </td> А скрипт меняем на этот: <script type="text/javascript"><!-- $(document).ready(function() { $('input[name=\'status\']').change(function() { $.post('index.php?route=catalog/product/status&token=<?php echo $token; ?>', 'status=' + ($(this).attr('checked') ? '1' : '0') + '&product_id=' + $(this).val()); var text = $(this).next().text() == 'Отключено' ? 'Включено' : 'Отключено'; $(this).next().text(text); }); }); $(".inlineEdit").bind("click", updateText); function updateText() { $(this).removeClass("inlineEdit"); OrigText = $(this).html(); OrigId = $(this).attr("id"); Save = '<a class="save">Сохранить</a> '; Revert= '<a class="revert">Отменить</a>' $(this).addClass("selected").html('<input type="text" name="price" value=' + OrigText + ' size="10" id="price' + OrigId + '" /><br/>' + Save + Revert).unbind('click', updateText); }; $(".revert").live("click", function () { $(this).parent().html(OrigText).removeClass("selected").bind("click", updateText); }); $(".save").live("click", function updatePrice(product_id) { var price = $('#price' + OrigId).val(); $.post('index.php?route=catalog/product/price&token=<?php echo $token; ?>', 'price=' + price + '&product_id=' + OrigId); alert('Цена успешно изменена. Новая цена:' + price); $(this).parent().html(price).removeClass("selected").bind("click", updateText); }); //--></script> И не забываем вносить изменения в контроллер! admin\controller\catalog\product.php
  5. Когда в Price.ua, в который я экспортировал товары через модуль яндекс-маркета у меня полбюджета съели переходы на дешевые товары, конверсия от которых не перекрывала стоимость этих переходов, возникла задача выключать из выдачи в фид неконкурентные по цене, или по иным параметрам товары. За два часа работы напильником вот что вышло. Так как движок мне достался уже с большим кол-вом допилов и изменений. Привожу последовательность действий с детальным описанием. Файлы выкладывать бесполезно - ибо пиленные. ШАГ 0 - САМЫЙ ГЛАВНЫЙ СДЕЛАЙТЕ БЕКАПЫ РЕДАКТИРУЕМЫХ ФАЙЛОВ! Шаг 1. Нам необходимо добавить в базе данных ключ по которому будет определятся отображение товара в ленте. Заходим в базу и добавляем в таблицу oc_product поле xml_status. для этого логинимся в mysql и выполняем команду ALTER TABLE `oc_product` ADD `xml_status` TINYINT( 1 ) DEFAULT '1' NOT NULL Шаг 2. Открываем admin\catalog\model\catalog\product.php Находим Public function addProduct($data) { $this->db->query("INSERT INTO " . DB_PREFIX . "product (model, sku, location, quantity, minimum, subtract, stock_status_id, date_available, manufacturer_id, shipping, price, cost, weight, weight_class_id, length, width, height, length_class_id, status, tax_class_id, sort_order, date_added, main_category_id) VALUES ('" . $this->db->escape($data['model']) . "', '" . $this->db->escape($data['sku']) . "', '" . $this->db->escape($data['location']) . "', '" . (int)$data['quantity'] . "', '" . (int)$data['minimum'] . "', '" . (int)$data['subtract'] . "', '" . (int)$data['stock_status_id'] . "', '" . $this->db->escape($data['date_available']) . "', '" . (int)$data['manufacturer_id'] . "', '" . (int)$data['shipping'] . "', '" . (float)$data['price'] . "', '" . (float)$data['cost'] . "', '" . (float)$data['weight'] . "', '" . (int)$data['weight_class_id'] . "', '" . (float)$data['length'] . "', '" . (float)$data['width'] . "', '" . (float)$data['height'] . "', '" . (int)$data['length_class_id'] . "', '" . (int)$data['status'] . "', '" . (int)$data['tax_class_id'] . "', '" . (int)$data['sort_order'] . "', NOW(), " . ((int)$data['main_category_id'] > 0 ? (int)$data['main_category_id'] : 'NULL') . ")"); Меняем на: Public function addProduct($data) { $this->db->query("INSERT INTO " . DB_PREFIX . "product (model, sku, location, quantity, minimum, subtract, stock_status_id, date_available, manufacturer_id, shipping, price, cost, weight, weight_class_id, length, width, height, length_class_id, status, tax_class_id, sort_order, date_added, main_category_id) VALUES ('" . $this->db->escape($data['model']) . "', '" . $this->db->escape($data['sku']) . "', '" . $this->db->escape($data['location']) . "', '" . (int)$data['quantity'] . "', '" . (int)$data['minimum'] . "', '" . (int)$data['subtract'] . "', '" . (int)$data['stock_status_id'] . "', '" . $this->db->escape($data['date_available']) . "', '" . (int)$data['manufacturer_id'] . "', '" . (int)$data['shipping'] . "', '" . (float)$data['price'] . "', '" . (float)$data['cost'] . "', '" . (float)$data['weight'] . "', '" . (int)$data['weight_class_id'] . "', '" . (float)$data['length'] . "', '" . (float)$data['width'] . "', '" . (float)$data['height'] . "', '" . (int)$data['length_class_id'] . "', '" . (int)$data['status'] . "', '" . (int)$data['tax_class_id'] . "', '" . (int)$data['sort_order'] . "', NOW(), " . ((int)$data['main_category_id'] > 0 ? (int)$data['main_category_id'] : 'NULL') . ",'1'". ")"); Идем дальше, находим $this->db->query("UPDATE " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "', location = '" . $this->db->escape($data['location']) . "', quantity = '" . (int)$data['quantity'] . "', minimum = '" . (int)$data['minimum'] . "', subtract = '" . (int)$data['subtract'] . "', stock_status_id = '" . (int)$data['stock_status_id'] . "', date_available = '" . $this->db->escape($data['date_available']) . "', manufacturer_id = '" . (int)$data['manufacturer_id'] . "', shipping = '" . (int)$data['shipping'] . "', price = '" . (float)$data['price'] . "', cost = '" . (float)$data['cost'] . "', weight = '" . (float)$data['weight'] . "', weight_class_id = '" . (int)$data['weight_class_id'] . "', length = '" . (float)$data['length'] . "', width = '" . (float)$data['width'] . "', height = '" . (float)$data['height'] . "', length_class_id = '" . (int)$data['length_class_id'] . "', status = '" . (int)$data['status'] . "', tax_class_id = '" . (int)$data['tax_class_id'] . "', sort_order = '" . (int)$data['sort_order'] . "', date_modified = NOW(), main_category_id = " . ((int)$data['main_category_id'] > 0 ? (int)$data['main_category_id'] : 'NULL') . " WHERE product_id = '" . (int)$product_id . "'"); Меняем на public function editProduct($product_id, $data) { $this->db->query("UPDATE " . DB_PREFIX . "product SET model = '" . $this->db->escape($data['model']) . "', sku = '" . $this->db->escape($data['sku']) . "', location = '" . $this->db->escape($data['location']) . "', quantity = '" . (int)$data['quantity'] . "', minimum = '" . (int)$data['minimum'] . "', subtract = '" . (int)$data['subtract'] . "', stock_status_id = '" . (int)$data['stock_status_id'] . "', date_available = '" . $this->db->escape($data['date_available']) . "', manufacturer_id = '" . (int)$data['manufacturer_id'] . "', shipping = '" . (int)$data['shipping'] . "', price = '" . (float)$data['price'] . "', cost = '" . (float)$data['cost'] . "', weight = '" . (float)$data['weight'] . "', weight_class_id = '" . (int)$data['weight_class_id'] . "', length = '" . (float)$data['length'] . "', width = '" . (float)$data['width'] . "', height = '" . (float)$data['height'] . "', length_class_id = '" . (int)$data['length_class_id'] . "', status = '" . (int)$data['status'] . "', tax_class_id = '" . (int)$data['tax_class_id']. "', xml_status = '" . (int)$data['xml_status'] . "', sort_order = '" . (int)$data['sort_order'] . "', date_modified = NOW(), main_category_id = " . ((int)$data['main_category_id'] > 0 ? (int)$data['main_category_id'] : 'NULL') . " WHERE product_id = '" . (int)$product_id . "'"); Идем еще дальше в районе строки 305 находим: $data['status'] = '0'; дописываем после: $data['xml_status'] = '1'; Спускаемся еще ниже находим функцию public function changeStatusProducts($products, $status) { После нее добавляем точно такую же, только для статуса XML. public function changeXMLStatusProducts($products, $xml_status) { function check_int($a) { return (int)$a; } $arr_products = array_map('check_int', $products); $products = implode("' OR product_id = '", $arr_products); $this->db->query("UPDATE " . DB_PREFIX . "product SET xml_status = '" . (int)(bool)$xml_status . "' WHERE product_id = '" . $products . "'"); } C Моделью закончено. Шаг 3. Открываем admin\controller\catalog\product.php Теперь переходим к контроллеру. Находим $this->data['products'][] = array( 'product_id' => $result['product_id'], 'name' => $result['name'], 'model' => $result['model'], 'price' => $result['price'], 'special' => $special['price'], 'image' => $image, 'quantity' => $result['quantity'], 'status' => ($result['status'] ? $this->language->get('text_enabled') : $this->language->get('text_disabled')), Добавляем после: 'xml_status' => ($result['status'] ? $this->language->get('text_enabled') : $this->language->get('text_disabled')), Копируем вот это: if (isset($this->request->post['status'])) { $this->data['status'] = $this->request->post['status']; } else if (isset($product_info)) { $this->data['status'] = $product_info['status']; } else { $this->data['status'] = 1; } Меняя на: if (isset($this->request->post['xml_status'])) { $this->data['xml_status'] = $this->request->post['xml_status']; } else if (isset($product_info)) { $this->data['xml_status'] = $product_info['xml_status']; } else { $this->data['xml_status'] = 1; } Шаг 4. Теперь переходим к шаблону карточки товара. admin\view\template\catalog\product_form.tpl и после <tr> <td><?php echo $entry_status; ?></td> <td><select name="status"> <?php if ($status) { ?> <option value="1" selected="selected"><?php echo $text_enabled; ?></option> <option value="0"><?php echo $text_disabled; ?></option> <?php } else { ?> <option value="1"><?php echo $text_enabled; ?></option> <option value="0" selected="selected"><?php echo $text_disabled; ?></option> <?php } ?> </select></td> </tr> Добавляем <tr> <td><?php echo 'xml_status' ?></td> <td><select name="xml_status"> <?php if ($xml_status) { ?> <option value="1" selected="selected"><?php echo $text_enabled; ?></option> <option value="0"><?php echo $text_disabled; ?></option> <?php } else { ?> <option value="1"><?php echo $text_enabled; ?></option> <option value="0" selected="selected"><?php echo $text_disabled; ?></option> <?php } ?> </select></td> </tr> В силу врожденной лени мне было неохота еще делать дописку в языковой файл, но если кто хочет, может поменять <td><?php echo 'xml_status' ?></td> на <td><?php echo $xml_status; ?></td>, добавив соответствующую строку в языковом файле! И последний штрих идем в \catalog\model\export\ Открываем yandex_market.php и добавляем условие проверки статуса вывода товара в ленте. Меняя всю функцию getProduct на public function getProduct($in_stock = true, $vendor_required = true) { $query = $this->db->query("SELECT p.*, pd.name, pd.description, m.name AS manufacturer, IFNULL(p.main_category_id, p2c.category_id) AS category_id FROM " . DB_PREFIX . "product p JOIN " . DB_PREFIX . "product_to_category AS p2c ON (p.product_id = p2c.product_id) " . ($vendor_required ? '' : 'LEFT ') . "JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1' AND p.xml_status = '1' " . ($in_stock ? " AND p.quantity > '0'" : '') . " GROUP BY p.product_id"); Потом можно зайти в базу и sql-запросами быренько поставить массово статусы например вот так UPDATE `oc_product` SET `xml_status`=1 UPDATE `oc_product` SET `xml_status`=0 WHERE `price`<300 Выключаем все товары, цена которых ниже 300 или выключить все товары определенной категории UPDATE `oc_product` SET `xml_status`=0 WHERE `main_category_id`=1 в планах сделать дописку, чтобы это можно было делать на-лету из админки. Но, так как, дописка нужна была в экстренном порядке и полностью на сегодня реализует необходимые мне функции пока руки не дошли. Необессудьте за сумбурность, по всем вопросам пишите в личку.

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.