Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Yoda

Users
  • Posts

    3,139
  • Joined

  • Last visited

Everything posted by Yoda

  1. дай адрес сайта сначала. Может быть у тебя там надпись на кнопке картинкой, тебе надо будет ее перерисовать... вобщем больного надо видеть!
  2. автор поста я так понимаю новичек совсем, поэтому надо бы писать сразу прямые ссылки где это находится, а то он еще не найдет на форуме... Как только он переставит норм версию, то ему не придется их править, а если уж надо будет, то смотреть здесь cataloglanguagerussian
  3. У вас видимо стоит английская сборка магазина, потому что в русской локализации надпись на кнопке нормальная!
  4. находишь файл catalogcontrollerproductcategory.php находишь там вот такой вот код $this->data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_truncate(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 400, ' …', true), 'price' => $price, 'special' => $special, 'tax' => $tax, 'rating' => $result['rating'], 'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']), 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id']) ); и меняешь его на $this->data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'model' => $result['model'], 'description' => utf8_truncate(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 400, ' …', true), 'price' => $price, 'special' => $special, 'tax' => $tax, 'rating' => $result['rating'], 'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']), 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id']) ); После этого открываешь catalogviewthemedefaulttemplateproductcategory.php находишь там строку <div class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></div> и меняешь на <div class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?><br/><?php echo $product['model']; ?></a></div> КАЙФУЕШЬ! ПЕРЕД ТЕМ КАК ДЕЛАТЬ, СДЕЛАЙ БЕКАПЫ!
  5. зачем вам дизайн ? www.yoursite.com/price.xls и вся торговля!

  6. Какая версия движка? Есть поделочка на 1.5.3 при доработке в одну строку - будет решать ваши задачи! И еще есть чудесный модуль http://spotonsolutions.net/layered-navigation
  7. Ну вот - как бе уже лучше... Я просто бегло просмотрел контроллер и скрипт, и не отслеживал логику проверки количества...
  8. Прикручивал к этому модулю оплату сбербанком, так как он глобально подменяет контроллеры. отвечающие за оформление заказа, в чистом виде сбербанк работать как надо отказывался, после получения напильника все завелось. Даже кнопку распечатать счет прикрутил. Если у кого возникнут вопросы - стучите, расскажу детали.
  9. +100500Тут даже не вопрос по дизайну или нет, а вопрос в том что концепция верстки дефолтного шаблона, подразумевает, то что левая и правая колонка хочешь, не хочешь отталкиваются от шапки. И чтобы вносить подобные правки с растягиванием шаблона, изначально надо понимать что придется их также вносить в структуру основных блоков. А для этого не всегда хватит навыков править в стилях цвет текста firebugом.
  10. здоровенный магазззь моей мечты!

  11. если у вас правая колонка будет использоваться только на главной - то поменять вот этот стиль #column-right добавив margin-top: 312px Второй вариант - назначить дополнительный класс блоку с правой колонкой в шаблоне common/home.tpl и назначить этому классу опять же margin-top: 312px
  12. Вам нужно переделать структуру категорий и сделать две основные родительские как сказал выше уважаемый Снастик.После этого раскрыть уже освоенным методом с использованием стиля (display: block;) -это кстати не условие )))). а стиль. И таки да.. придется править tpl, в которой нужно убрать заголовок, и переназначить стили заголовка блокам категориям верхнего уровня.
  13. Комментарий ни о чем, я бы попросил вас либо раскрыть тему, либо не умничать.
  14. в 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 к примеру. Но могут возникнуть непредвиденные осложнения у больного, так как при этом нет проверки наличия на складе достаточного количества товара! Т.е. проверку тоже надо дописывать.
  15. для версии 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
  16. Когда в 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 в планах сделать дописку, чтобы это можно было делать на-лету из админки. Но, так как, дописка нужна была в экстренном порядке и полностью на сегодня реализует необходимые мне функции пока руки не дошли. Необессудьте за сумбурность, по всем вопросам пишите в личку.
×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.