VladSiy Опубліковано: 15 листопада 2015 Share Опубліковано: 15 листопада 2015 (змінено) Даже не знаю, с чего начать, и как попонятнее объяснить :) У меня есть форма заказа товара, куда клиент может вписать нужные ему параметры. Один из параметров - размеры. Каждому товару присвоен размер, который заполняется в админке: А - B - C. Так вот, вопрос: как можно сделать, чтобы, когда клиент, заполняя форму, вписывает нужные ему размеры, вывести ему на страницу ссылки на товары с аналогичными размерами, но допустимым отклонением сторон (А и B на 1-2 мм в большую или меньшую стороны, пример на рис. От знающих людей я бы хотел попросить совета, как это все можно сделать, хотя бы просто теоретически объясните ход работы и, где (в каких файлах) нужно рыться, а рыться я люблю, мне бы для начала понять, что нужно сделать :) На данный момент я имею такое представление: где-то в БД хранятся значения этих размеров. Мне нужно сделать функцию, которая выдаст мне все товары подходящие под запросы клиента. Эта функция будет вызываться, скорее всего jquery, в момент, когда клиент заполнит поле А и B. Но я, пока, даже не представляю, как мне все это сделать. Скажите, пожалуйста, сильно ли все это сложно и трудо-/ время-затратно? Правильно ли я представляю решение этой задачи? На самом деле все сложнее или есть решения проще? И, все-таки задам, на всякий случай, этот вопрос: нет ли готового решения (модуля) :) Змінено 15 листопада 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 17 листопада 2015 Share Опубліковано: 17 листопада 2015 готового нет. непонятно что где как хранится/заполняется, где выводится/заполняется, итпд. Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 17 листопада 2015 Автор Share Опубліковано: 17 листопада 2015 Когда на сайт добавляется товар, во вкладке "Данные" есть возможность добавить "Размеры (длина x ширина x высота):" Если нужного, для клиента, товара нет на сайте, у меня есть страница с товаром, с опциями, где клиент может сделать заказ с интересующими его размерами. А когда клиент введет свои размеры, мне рядом с формой нужно вывести похожие по размерам товары, с погрешностью +-2 мм. Похожие по размерам товары выбираются из поля "Размеры (длина x ширина x высота):" , которые заполняются при добавлении товара. Их нужно вывести в карточке товара. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 18 листопада 2015 Share Опубліковано: 18 листопада 2015 понятно. Правильно ли я представляю решение этой задачи? правильно. Скажите, пожалуйста, сильно ли все это сложно и трудо-/ время-затратно? нет. Надіслати Поділитися на інших сайтах More sharing options... 2 weeks later... VladSiy Опубліковано: 1 грудня 2015 Автор Share Опубліковано: 1 грудня 2015 (змінено) Могли бы подсказать, как добавить значение из input в сессию... без GET и POST, по событию (клик и т.д.), чтобы использовать эту сессию в model-е при select-e из БД. Вот input: var size_a = $('input[name=\'option[242]\']').val(); А также, как можно вызвать метод из контроллера в tpl файле? Змінено 1 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 1 грудня 2015 Share Опубліковано: 1 грудня 2015 ...как добавить значение из input в сессию... без GET и POST, по событию (клик и т.д.), чтобы использовать эту сессию в model-е при select-e из БД... эээ... как можно вызвать метод из контроллера в tpl файле? jquery.ajax, jquery.load, итпд Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 1 грудня 2015 Share Опубліковано: 1 грудня 2015 VladSiy, смотрите в этой теме Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 2 грудня 2015 Автор Share Опубліковано: 2 грудня 2015 VladSiy, смотрите в этой теме Спасибо, эта тема будет шагом №2, и надеюсь она мне поможет, но сейчас я не могу понять, как добавить value из input в сессию, для меня проблема в том, что не будет отправки формы (GET, POST), нужно на ходу подхватить значения и занести их в сессию, например по событию keyup. А потом эту сессию использовать при select в модели. Т.е. если клиент в input ввел цифру, в моделе должно сработать ... ... WHERE (length BETWEEN '".($len-2)."' AND '".($len+2)."' ) ... и отобразиться на странице без перезагрузке, после каждой нажатой цифры в поле. Сейчас почти работает, но я вручную добавил значения: $len = 260; $wid = 318; а нужно, чтобы в этих переменных находились значения из сессий. Пробую вот так... <?php $_SESSION['len'] ?> = $('input[name=\'option[242]\']').val(); в интернете, кажется используют такой вариант, но у меня не получается. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 2 грудня 2015 Share Опубліковано: 2 грудня 2015 - используй Силу, Люк! (с) :-) читайте по ссылке, пример в 12 посте и зачем вам непременно хочется использовать сессию? недостаточно просто передавать данные по цепочке из шаблона в контроллер, из контроллера в модель и обратно? Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 2 грудня 2015 Автор Share Опубліковано: 2 грудня 2015 Нет, мне не важно что именно использовать :) Уточните, пожалуйста, без отправки формы методом POST или GET и без сессий возможно перенести данные в контроллер? Мне почему-то, из-за этого $this->request->post['name'] стало казаться, что не возможно. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 2 грудня 2015 Share Опубліковано: 2 грудня 2015 почему нет? через jquery в связке с ajax можно выдернуть данные на странице (например из обычного поля ввода), передать их в контроллер, контроллер обрабатывает, передает в модель, модель формирует данные для ответа, возвращает их обратно в контроллер, в контроллере ответ модели обработать и через json вернуть обратно, чтобы уже на странице вывести, через тот же jquery согласен, по-началу - голова кругом :ugeek: но когда разберетесь будет значительно проще, самый лучший способ изучить - на примере страниц движка как относительно простой вариант, попробуйте разобраться с генерацией номера счета при просмотре заказа в админке (в файле admin\view\template\sale\order_info.tpl ищите по invoice-generate и дальше по цепочке) ;) Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 3 грудня 2015 Автор Share Опубліковано: 3 грудня 2015 Спасибо, вы мне очень помогли :) Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 10 грудня 2015 Автор Share Опубліковано: 10 грудня 2015 (змінено) Еще не решено :)Прошу, помогите. Я, конечно, очень рад, что уже неделю вожусь над этим, многому научился, но сейчас меня поджимает время :) tpl $('input[name=\'option[242]\']').bind('keyup', function() { $.ajax({ type: 'POST', url: 'index.php?route=product/product/index', data: 'size_a=' + encodeURIComponent($('input[name=\'option[242]\']').val()), success: function(data){ $('.productAnalog').load('.productAnalog'); } }); }); controller: ... $this->request->post['size_a']; // я так понимаю здесь должны быть данные из value, но, почему-то не работает. Или в контроллер не попадают или отсюда в модель не доходят. $results = $this->model_catalog_product->getProductAnalog($this->request->get['product_id'],$this->request->post); ... $this->request->post['size_a'] = 258; // если вручную вводить - работает... model public function getProductAnalog($product_id, $data) { $query = $this->db->query("SELECT DISTINCT *, pd.name AS name FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE (length BETWEEN '".($data['size_a']-2)."' AND '".($data['size_a']+2)."' ) AND (...)"); ... } А может быть я в самом tpl неправильно success: оформил? в Блоке .productAnalog у меня выводятся подходящие размеры, если ввожу их вручную в контроллере, а мне бы хотелось, чтобы по нажатии каждой цифры в поле, шла выборка из этих цифр и отображалась в .productAnalog. Я подумал, что по каждому следующему вводу цифры будут обновляться размеры в блоке, а для этого нужно обновить сам блок .productAnalog... Змінено 10 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 16 грудня 2015 Автор Share Опубліковано: 16 грудня 2015 Вот теперь вопрос можно считать решенным :) Надо же, понадобился месяц, чтобы решить такую пустяковую задачу, вот чем обошелся tpl $.post( "index.php?route=product/product/analogFilters", { size_a: size_a, size_b: size_b }, onAjaxSuccess ); function onAjaxSuccess(data) { /////// } Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 16 грудня 2015 Автор Share Опубліковано: 16 грудня 2015 (змінено) controller public function analogFilters() { if (isset($this->request->post['size_a']) && isset($this->request->post['size_b'])) { $_SESSION['size_a'] = $_POST['size_a']; $_SESSION['size_b'] = $_POST['size_b']; } } model ... WHERE (length BETWEEN '".($_SESSION['size_a']-2)."' ... И смешно и обидно :) Змінено 16 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 17 грудня 2015 Share Опубліковано: 17 грудня 2015 воу-воу $_POST $_SESSIONнельзя так.у тебя тут же выше пример правильного обращения к POST-данным $this->request->postхочешь с сессией работать $this->session->dataно тебе она не нужна.пришел POST - передавай его в модель (либо "как есть"; либо через промежуточную переменную-массив, типа "$filter_size"). Надіслати Поділитися на інших сайтах More sharing options... 3 weeks later... VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 Спасибо, тут разобрался, у меня новая трудность. Например, я совершаю заказ с параметрами: A - 333 B - 222 C - 111 Нажимаю добавить в корзину, и в корзине отображается мой заказ с этими параметрами.Потом я делаю еще один, точно такой же заказ, он попадает в корзину, а в корзине увеличивается только его кол-во, т.к. параметры идентичные. Если я делаю еще один заказ с параметрами:A - 444 B... C... Товар добавляется в корзину, но уже в новую таблицу. Я не могу понять, как делается проверка на опции. Я так понимаю это происходит в файле model/product методом getProductOptions() ... Но, не могу никак разобраться. Дело в том, что у меня установлена скидка на заказ товара от 2-х штук. - 6% , от 3 шт. - 8% и т.д. Но, нужно, чтобы скидка распространялась только на заказ с определенными параметрами, т.е. в приведенному выше примере у меня в корзине находится 3 товара (2 товара с идентичными параметрами и 1 с другими параметрами) в итоге скидка начисляется, как за 3 товара, а должно быть за 2 товара, а 3-й должен считаться по полной сумме, потому что заказан в единичном кол-ве Я не понимаю до конца, как это можно сделать, но предположил, что можно как-то сделать проверку на идентичность параметров. если товаров с одинаковыми параметрами меньше 2-х шт, то скидку не подключать... Могли бы что-нибудь посоветовать/подсказать? Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 6 січня 2016 Share Опубліковано: 6 січня 2016 значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 (змінено) значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Спасибо, перед тем, как написать на форуме, я как раз и разбирался в тех файлах, которые вы привели, разобраться, похоже, не смог. Вы не могли бы уточнить, в каком файле нужно вносить изменения для скидок? Еще опции нужно учитывать в контроллере или в моделе при selecte? где-то здесь... $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); Я с десяток раз уже прочитал ваше сообщение, и каждый раз становиться немного понятнее, думаю, если дадите немного больше информации, к какому-нибудь результату прийти смогу :) (надеюсь) Змінено 6 січня 2016 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 8 січня 2016 Автор Share Опубліковано: 8 січня 2016 Ой, устал. Немного конкретнее попрошу помощи, не уверен точно, но, кажется пилить нужно здесь :) system\library\cart.php где-то в районе 180 строки есть запрос $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); а ниже условие if ($product_discount_query->num_rows) { $price = $product_discount_query->row['price']; } Кажется, если по sql запросу все устраивает, то он присваивает скидку. значит, с помощью подсказки, я решил, что можно в sql запрос, добавить еще и проверку на опции, в итоге я сделал вот так $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount LEFT JOIN " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) WHERE product_id = '" . (int)$product_id . "' AND pov.product_option_value_id = '" . (int)$option_value . "' AND pov.product_option_id = '" . (int)$product_option_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); ... но, получаю ошибку: Notice: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE product_id = '2419' AND pov.product_option_value_id = '27' AND p' at line 1Error No: 1064 .... Подскажите, пожалуйста, как правильно нужно написать запрос? Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница [Решено] Вывод аналогичных по параметру товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення PRICE MASTER - Модуль імпорту/експорту товарів, парсинг, переклад, генерація текстів, редактор каталогу та багато іншого Автор: ScriptBrains 1.0 Синхронізація Замовлень Rozetka.ua та Opencart Автор: sinco Product Manipulator Автор: Hiperlynx007 Видалення дублікатів товарів для OpenCart Автор: Hatshypsut Вибір категорій і виробників для "Знайшли дешевше" шаблону Upstore Автор: Flint2000 × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
VladSiy Опубліковано: 17 листопада 2015 Автор Share Опубліковано: 17 листопада 2015 Когда на сайт добавляется товар, во вкладке "Данные" есть возможность добавить "Размеры (длина x ширина x высота):" Если нужного, для клиента, товара нет на сайте, у меня есть страница с товаром, с опциями, где клиент может сделать заказ с интересующими его размерами. А когда клиент введет свои размеры, мне рядом с формой нужно вывести похожие по размерам товары, с погрешностью +-2 мм. Похожие по размерам товары выбираются из поля "Размеры (длина x ширина x высота):" , которые заполняются при добавлении товара. Их нужно вывести в карточке товара. Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 18 листопада 2015 Share Опубліковано: 18 листопада 2015 понятно. Правильно ли я представляю решение этой задачи? правильно. Скажите, пожалуйста, сильно ли все это сложно и трудо-/ время-затратно? нет. Надіслати Поділитися на інших сайтах More sharing options... 2 weeks later... VladSiy Опубліковано: 1 грудня 2015 Автор Share Опубліковано: 1 грудня 2015 (змінено) Могли бы подсказать, как добавить значение из input в сессию... без GET и POST, по событию (клик и т.д.), чтобы использовать эту сессию в model-е при select-e из БД. Вот input: var size_a = $('input[name=\'option[242]\']').val(); А также, как можно вызвать метод из контроллера в tpl файле? Змінено 1 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 1 грудня 2015 Share Опубліковано: 1 грудня 2015 ...как добавить значение из input в сессию... без GET и POST, по событию (клик и т.д.), чтобы использовать эту сессию в model-е при select-e из БД... эээ... как можно вызвать метод из контроллера в tpl файле? jquery.ajax, jquery.load, итпд Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 1 грудня 2015 Share Опубліковано: 1 грудня 2015 VladSiy, смотрите в этой теме Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 2 грудня 2015 Автор Share Опубліковано: 2 грудня 2015 VladSiy, смотрите в этой теме Спасибо, эта тема будет шагом №2, и надеюсь она мне поможет, но сейчас я не могу понять, как добавить value из input в сессию, для меня проблема в том, что не будет отправки формы (GET, POST), нужно на ходу подхватить значения и занести их в сессию, например по событию keyup. А потом эту сессию использовать при select в модели. Т.е. если клиент в input ввел цифру, в моделе должно сработать ... ... WHERE (length BETWEEN '".($len-2)."' AND '".($len+2)."' ) ... и отобразиться на странице без перезагрузке, после каждой нажатой цифры в поле. Сейчас почти работает, но я вручную добавил значения: $len = 260; $wid = 318; а нужно, чтобы в этих переменных находились значения из сессий. Пробую вот так... <?php $_SESSION['len'] ?> = $('input[name=\'option[242]\']').val(); в интернете, кажется используют такой вариант, но у меня не получается. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 2 грудня 2015 Share Опубліковано: 2 грудня 2015 - используй Силу, Люк! (с) :-) читайте по ссылке, пример в 12 посте и зачем вам непременно хочется использовать сессию? недостаточно просто передавать данные по цепочке из шаблона в контроллер, из контроллера в модель и обратно? Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 2 грудня 2015 Автор Share Опубліковано: 2 грудня 2015 Нет, мне не важно что именно использовать :) Уточните, пожалуйста, без отправки формы методом POST или GET и без сессий возможно перенести данные в контроллер? Мне почему-то, из-за этого $this->request->post['name'] стало казаться, что не возможно. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 2 грудня 2015 Share Опубліковано: 2 грудня 2015 почему нет? через jquery в связке с ajax можно выдернуть данные на странице (например из обычного поля ввода), передать их в контроллер, контроллер обрабатывает, передает в модель, модель формирует данные для ответа, возвращает их обратно в контроллер, в контроллере ответ модели обработать и через json вернуть обратно, чтобы уже на странице вывести, через тот же jquery согласен, по-началу - голова кругом :ugeek: но когда разберетесь будет значительно проще, самый лучший способ изучить - на примере страниц движка как относительно простой вариант, попробуйте разобраться с генерацией номера счета при просмотре заказа в админке (в файле admin\view\template\sale\order_info.tpl ищите по invoice-generate и дальше по цепочке) ;) Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 3 грудня 2015 Автор Share Опубліковано: 3 грудня 2015 Спасибо, вы мне очень помогли :) Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 10 грудня 2015 Автор Share Опубліковано: 10 грудня 2015 (змінено) Еще не решено :)Прошу, помогите. Я, конечно, очень рад, что уже неделю вожусь над этим, многому научился, но сейчас меня поджимает время :) tpl $('input[name=\'option[242]\']').bind('keyup', function() { $.ajax({ type: 'POST', url: 'index.php?route=product/product/index', data: 'size_a=' + encodeURIComponent($('input[name=\'option[242]\']').val()), success: function(data){ $('.productAnalog').load('.productAnalog'); } }); }); controller: ... $this->request->post['size_a']; // я так понимаю здесь должны быть данные из value, но, почему-то не работает. Или в контроллер не попадают или отсюда в модель не доходят. $results = $this->model_catalog_product->getProductAnalog($this->request->get['product_id'],$this->request->post); ... $this->request->post['size_a'] = 258; // если вручную вводить - работает... model public function getProductAnalog($product_id, $data) { $query = $this->db->query("SELECT DISTINCT *, pd.name AS name FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE (length BETWEEN '".($data['size_a']-2)."' AND '".($data['size_a']+2)."' ) AND (...)"); ... } А может быть я в самом tpl неправильно success: оформил? в Блоке .productAnalog у меня выводятся подходящие размеры, если ввожу их вручную в контроллере, а мне бы хотелось, чтобы по нажатии каждой цифры в поле, шла выборка из этих цифр и отображалась в .productAnalog. Я подумал, что по каждому следующему вводу цифры будут обновляться размеры в блоке, а для этого нужно обновить сам блок .productAnalog... Змінено 10 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 16 грудня 2015 Автор Share Опубліковано: 16 грудня 2015 Вот теперь вопрос можно считать решенным :) Надо же, понадобился месяц, чтобы решить такую пустяковую задачу, вот чем обошелся tpl $.post( "index.php?route=product/product/analogFilters", { size_a: size_a, size_b: size_b }, onAjaxSuccess ); function onAjaxSuccess(data) { /////// } Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 16 грудня 2015 Автор Share Опубліковано: 16 грудня 2015 (змінено) controller public function analogFilters() { if (isset($this->request->post['size_a']) && isset($this->request->post['size_b'])) { $_SESSION['size_a'] = $_POST['size_a']; $_SESSION['size_b'] = $_POST['size_b']; } } model ... WHERE (length BETWEEN '".($_SESSION['size_a']-2)."' ... И смешно и обидно :) Змінено 16 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 17 грудня 2015 Share Опубліковано: 17 грудня 2015 воу-воу $_POST $_SESSIONнельзя так.у тебя тут же выше пример правильного обращения к POST-данным $this->request->postхочешь с сессией работать $this->session->dataно тебе она не нужна.пришел POST - передавай его в модель (либо "как есть"; либо через промежуточную переменную-массив, типа "$filter_size"). Надіслати Поділитися на інших сайтах More sharing options... 3 weeks later... VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 Спасибо, тут разобрался, у меня новая трудность. Например, я совершаю заказ с параметрами: A - 333 B - 222 C - 111 Нажимаю добавить в корзину, и в корзине отображается мой заказ с этими параметрами.Потом я делаю еще один, точно такой же заказ, он попадает в корзину, а в корзине увеличивается только его кол-во, т.к. параметры идентичные. Если я делаю еще один заказ с параметрами:A - 444 B... C... Товар добавляется в корзину, но уже в новую таблицу. Я не могу понять, как делается проверка на опции. Я так понимаю это происходит в файле model/product методом getProductOptions() ... Но, не могу никак разобраться. Дело в том, что у меня установлена скидка на заказ товара от 2-х штук. - 6% , от 3 шт. - 8% и т.д. Но, нужно, чтобы скидка распространялась только на заказ с определенными параметрами, т.е. в приведенному выше примере у меня в корзине находится 3 товара (2 товара с идентичными параметрами и 1 с другими параметрами) в итоге скидка начисляется, как за 3 товара, а должно быть за 2 товара, а 3-й должен считаться по полной сумме, потому что заказан в единичном кол-ве Я не понимаю до конца, как это можно сделать, но предположил, что можно как-то сделать проверку на идентичность параметров. если товаров с одинаковыми параметрами меньше 2-х шт, то скидку не подключать... Могли бы что-нибудь посоветовать/подсказать? Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 6 січня 2016 Share Опубліковано: 6 січня 2016 значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 (змінено) значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Спасибо, перед тем, как написать на форуме, я как раз и разбирался в тех файлах, которые вы привели, разобраться, похоже, не смог. Вы не могли бы уточнить, в каком файле нужно вносить изменения для скидок? Еще опции нужно учитывать в контроллере или в моделе при selecte? где-то здесь... $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); Я с десяток раз уже прочитал ваше сообщение, и каждый раз становиться немного понятнее, думаю, если дадите немного больше информации, к какому-нибудь результату прийти смогу :) (надеюсь) Змінено 6 січня 2016 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 8 січня 2016 Автор Share Опубліковано: 8 січня 2016 Ой, устал. Немного конкретнее попрошу помощи, не уверен точно, но, кажется пилить нужно здесь :) system\library\cart.php где-то в районе 180 строки есть запрос $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); а ниже условие if ($product_discount_query->num_rows) { $price = $product_discount_query->row['price']; } Кажется, если по sql запросу все устраивает, то он присваивает скидку. значит, с помощью подсказки, я решил, что можно в sql запрос, добавить еще и проверку на опции, в итоге я сделал вот так $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount LEFT JOIN " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) WHERE product_id = '" . (int)$product_id . "' AND pov.product_option_value_id = '" . (int)$option_value . "' AND pov.product_option_id = '" . (int)$product_option_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); ... но, получаю ошибку: Notice: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE product_id = '2419' AND pov.product_option_value_id = '27' AND p' at line 1Error No: 1064 .... Подскажите, пожалуйста, как правильно нужно написать запрос? Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница [Решено] Вывод аналогичных по параметру товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення PRICE MASTER - Модуль імпорту/експорту товарів, парсинг, переклад, генерація текстів, редактор каталогу та багато іншого Автор: ScriptBrains 1.0 Синхронізація Замовлень Rozetka.ua та Opencart Автор: sinco Product Manipulator Автор: Hiperlynx007 Видалення дублікатів товарів для OpenCart Автор: Hatshypsut Вибір категорій і виробників для "Знайшли дешевше" шаблону Upstore Автор: Flint2000 × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
VladSiy Опубліковано: 1 грудня 2015 Автор Share Опубліковано: 1 грудня 2015 (змінено) Могли бы подсказать, как добавить значение из input в сессию... без GET и POST, по событию (клик и т.д.), чтобы использовать эту сессию в model-е при select-e из БД. Вот input: var size_a = $('input[name=\'option[242]\']').val(); А также, как можно вызвать метод из контроллера в tpl файле? Змінено 1 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 1 грудня 2015 Share Опубліковано: 1 грудня 2015 ...как добавить значение из input в сессию... без GET и POST, по событию (клик и т.д.), чтобы использовать эту сессию в model-е при select-e из БД... эээ... как можно вызвать метод из контроллера в tpl файле? jquery.ajax, jquery.load, итпд Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 1 грудня 2015 Share Опубліковано: 1 грудня 2015 VladSiy, смотрите в этой теме Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 2 грудня 2015 Автор Share Опубліковано: 2 грудня 2015 VladSiy, смотрите в этой теме Спасибо, эта тема будет шагом №2, и надеюсь она мне поможет, но сейчас я не могу понять, как добавить value из input в сессию, для меня проблема в том, что не будет отправки формы (GET, POST), нужно на ходу подхватить значения и занести их в сессию, например по событию keyup. А потом эту сессию использовать при select в модели. Т.е. если клиент в input ввел цифру, в моделе должно сработать ... ... WHERE (length BETWEEN '".($len-2)."' AND '".($len+2)."' ) ... и отобразиться на странице без перезагрузке, после каждой нажатой цифры в поле. Сейчас почти работает, но я вручную добавил значения: $len = 260; $wid = 318; а нужно, чтобы в этих переменных находились значения из сессий. Пробую вот так... <?php $_SESSION['len'] ?> = $('input[name=\'option[242]\']').val(); в интернете, кажется используют такой вариант, но у меня не получается. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 2 грудня 2015 Share Опубліковано: 2 грудня 2015 - используй Силу, Люк! (с) :-) читайте по ссылке, пример в 12 посте и зачем вам непременно хочется использовать сессию? недостаточно просто передавать данные по цепочке из шаблона в контроллер, из контроллера в модель и обратно? Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 2 грудня 2015 Автор Share Опубліковано: 2 грудня 2015 Нет, мне не важно что именно использовать :) Уточните, пожалуйста, без отправки формы методом POST или GET и без сессий возможно перенести данные в контроллер? Мне почему-то, из-за этого $this->request->post['name'] стало казаться, что не возможно. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 2 грудня 2015 Share Опубліковано: 2 грудня 2015 почему нет? через jquery в связке с ajax можно выдернуть данные на странице (например из обычного поля ввода), передать их в контроллер, контроллер обрабатывает, передает в модель, модель формирует данные для ответа, возвращает их обратно в контроллер, в контроллере ответ модели обработать и через json вернуть обратно, чтобы уже на странице вывести, через тот же jquery согласен, по-началу - голова кругом :ugeek: но когда разберетесь будет значительно проще, самый лучший способ изучить - на примере страниц движка как относительно простой вариант, попробуйте разобраться с генерацией номера счета при просмотре заказа в админке (в файле admin\view\template\sale\order_info.tpl ищите по invoice-generate и дальше по цепочке) ;) Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 3 грудня 2015 Автор Share Опубліковано: 3 грудня 2015 Спасибо, вы мне очень помогли :) Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 10 грудня 2015 Автор Share Опубліковано: 10 грудня 2015 (змінено) Еще не решено :)Прошу, помогите. Я, конечно, очень рад, что уже неделю вожусь над этим, многому научился, но сейчас меня поджимает время :) tpl $('input[name=\'option[242]\']').bind('keyup', function() { $.ajax({ type: 'POST', url: 'index.php?route=product/product/index', data: 'size_a=' + encodeURIComponent($('input[name=\'option[242]\']').val()), success: function(data){ $('.productAnalog').load('.productAnalog'); } }); }); controller: ... $this->request->post['size_a']; // я так понимаю здесь должны быть данные из value, но, почему-то не работает. Или в контроллер не попадают или отсюда в модель не доходят. $results = $this->model_catalog_product->getProductAnalog($this->request->get['product_id'],$this->request->post); ... $this->request->post['size_a'] = 258; // если вручную вводить - работает... model public function getProductAnalog($product_id, $data) { $query = $this->db->query("SELECT DISTINCT *, pd.name AS name FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE (length BETWEEN '".($data['size_a']-2)."' AND '".($data['size_a']+2)."' ) AND (...)"); ... } А может быть я в самом tpl неправильно success: оформил? в Блоке .productAnalog у меня выводятся подходящие размеры, если ввожу их вручную в контроллере, а мне бы хотелось, чтобы по нажатии каждой цифры в поле, шла выборка из этих цифр и отображалась в .productAnalog. Я подумал, что по каждому следующему вводу цифры будут обновляться размеры в блоке, а для этого нужно обновить сам блок .productAnalog... Змінено 10 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 16 грудня 2015 Автор Share Опубліковано: 16 грудня 2015 Вот теперь вопрос можно считать решенным :) Надо же, понадобился месяц, чтобы решить такую пустяковую задачу, вот чем обошелся tpl $.post( "index.php?route=product/product/analogFilters", { size_a: size_a, size_b: size_b }, onAjaxSuccess ); function onAjaxSuccess(data) { /////// } Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 16 грудня 2015 Автор Share Опубліковано: 16 грудня 2015 (змінено) controller public function analogFilters() { if (isset($this->request->post['size_a']) && isset($this->request->post['size_b'])) { $_SESSION['size_a'] = $_POST['size_a']; $_SESSION['size_b'] = $_POST['size_b']; } } model ... WHERE (length BETWEEN '".($_SESSION['size_a']-2)."' ... И смешно и обидно :) Змінено 16 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 17 грудня 2015 Share Опубліковано: 17 грудня 2015 воу-воу $_POST $_SESSIONнельзя так.у тебя тут же выше пример правильного обращения к POST-данным $this->request->postхочешь с сессией работать $this->session->dataно тебе она не нужна.пришел POST - передавай его в модель (либо "как есть"; либо через промежуточную переменную-массив, типа "$filter_size"). Надіслати Поділитися на інших сайтах More sharing options... 3 weeks later... VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 Спасибо, тут разобрался, у меня новая трудность. Например, я совершаю заказ с параметрами: A - 333 B - 222 C - 111 Нажимаю добавить в корзину, и в корзине отображается мой заказ с этими параметрами.Потом я делаю еще один, точно такой же заказ, он попадает в корзину, а в корзине увеличивается только его кол-во, т.к. параметры идентичные. Если я делаю еще один заказ с параметрами:A - 444 B... C... Товар добавляется в корзину, но уже в новую таблицу. Я не могу понять, как делается проверка на опции. Я так понимаю это происходит в файле model/product методом getProductOptions() ... Но, не могу никак разобраться. Дело в том, что у меня установлена скидка на заказ товара от 2-х штук. - 6% , от 3 шт. - 8% и т.д. Но, нужно, чтобы скидка распространялась только на заказ с определенными параметрами, т.е. в приведенному выше примере у меня в корзине находится 3 товара (2 товара с идентичными параметрами и 1 с другими параметрами) в итоге скидка начисляется, как за 3 товара, а должно быть за 2 товара, а 3-й должен считаться по полной сумме, потому что заказан в единичном кол-ве Я не понимаю до конца, как это можно сделать, но предположил, что можно как-то сделать проверку на идентичность параметров. если товаров с одинаковыми параметрами меньше 2-х шт, то скидку не подключать... Могли бы что-нибудь посоветовать/подсказать? Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 6 січня 2016 Share Опубліковано: 6 січня 2016 значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 (змінено) значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Спасибо, перед тем, как написать на форуме, я как раз и разбирался в тех файлах, которые вы привели, разобраться, похоже, не смог. Вы не могли бы уточнить, в каком файле нужно вносить изменения для скидок? Еще опции нужно учитывать в контроллере или в моделе при selecte? где-то здесь... $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); Я с десяток раз уже прочитал ваше сообщение, и каждый раз становиться немного понятнее, думаю, если дадите немного больше информации, к какому-нибудь результату прийти смогу :) (надеюсь) Змінено 6 січня 2016 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 8 січня 2016 Автор Share Опубліковано: 8 січня 2016 Ой, устал. Немного конкретнее попрошу помощи, не уверен точно, но, кажется пилить нужно здесь :) system\library\cart.php где-то в районе 180 строки есть запрос $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); а ниже условие if ($product_discount_query->num_rows) { $price = $product_discount_query->row['price']; } Кажется, если по sql запросу все устраивает, то он присваивает скидку. значит, с помощью подсказки, я решил, что можно в sql запрос, добавить еще и проверку на опции, в итоге я сделал вот так $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount LEFT JOIN " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) WHERE product_id = '" . (int)$product_id . "' AND pov.product_option_value_id = '" . (int)$option_value . "' AND pov.product_option_id = '" . (int)$product_option_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); ... но, получаю ошибку: Notice: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE product_id = '2419' AND pov.product_option_value_id = '27' AND p' at line 1Error No: 1064 .... Подскажите, пожалуйста, как правильно нужно написать запрос? Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница [Решено] Вывод аналогичных по параметру товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення PRICE MASTER - Модуль імпорту/експорту товарів, парсинг, переклад, генерація текстів, редактор каталогу та багато іншого Автор: ScriptBrains 1.0 Синхронізація Замовлень Rozetka.ua та Opencart Автор: sinco Product Manipulator Автор: Hiperlynx007 Видалення дублікатів товарів для OpenCart Автор: Hatshypsut Вибір категорій і виробників для "Знайшли дешевше" шаблону Upstore Автор: Flint2000 × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
AlexDW Опубліковано: 1 грудня 2015 Share Опубліковано: 1 грудня 2015 VladSiy, смотрите в этой теме Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 2 грудня 2015 Автор Share Опубліковано: 2 грудня 2015 VladSiy, смотрите в этой теме Спасибо, эта тема будет шагом №2, и надеюсь она мне поможет, но сейчас я не могу понять, как добавить value из input в сессию, для меня проблема в том, что не будет отправки формы (GET, POST), нужно на ходу подхватить значения и занести их в сессию, например по событию keyup. А потом эту сессию использовать при select в модели. Т.е. если клиент в input ввел цифру, в моделе должно сработать ... ... WHERE (length BETWEEN '".($len-2)."' AND '".($len+2)."' ) ... и отобразиться на странице без перезагрузке, после каждой нажатой цифры в поле. Сейчас почти работает, но я вручную добавил значения: $len = 260; $wid = 318; а нужно, чтобы в этих переменных находились значения из сессий. Пробую вот так... <?php $_SESSION['len'] ?> = $('input[name=\'option[242]\']').val(); в интернете, кажется используют такой вариант, но у меня не получается. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 2 грудня 2015 Share Опубліковано: 2 грудня 2015 - используй Силу, Люк! (с) :-) читайте по ссылке, пример в 12 посте и зачем вам непременно хочется использовать сессию? недостаточно просто передавать данные по цепочке из шаблона в контроллер, из контроллера в модель и обратно? Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 2 грудня 2015 Автор Share Опубліковано: 2 грудня 2015 Нет, мне не важно что именно использовать :) Уточните, пожалуйста, без отправки формы методом POST или GET и без сессий возможно перенести данные в контроллер? Мне почему-то, из-за этого $this->request->post['name'] стало казаться, что не возможно. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 2 грудня 2015 Share Опубліковано: 2 грудня 2015 почему нет? через jquery в связке с ajax можно выдернуть данные на странице (например из обычного поля ввода), передать их в контроллер, контроллер обрабатывает, передает в модель, модель формирует данные для ответа, возвращает их обратно в контроллер, в контроллере ответ модели обработать и через json вернуть обратно, чтобы уже на странице вывести, через тот же jquery согласен, по-началу - голова кругом :ugeek: но когда разберетесь будет значительно проще, самый лучший способ изучить - на примере страниц движка как относительно простой вариант, попробуйте разобраться с генерацией номера счета при просмотре заказа в админке (в файле admin\view\template\sale\order_info.tpl ищите по invoice-generate и дальше по цепочке) ;) Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 3 грудня 2015 Автор Share Опубліковано: 3 грудня 2015 Спасибо, вы мне очень помогли :) Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 10 грудня 2015 Автор Share Опубліковано: 10 грудня 2015 (змінено) Еще не решено :)Прошу, помогите. Я, конечно, очень рад, что уже неделю вожусь над этим, многому научился, но сейчас меня поджимает время :) tpl $('input[name=\'option[242]\']').bind('keyup', function() { $.ajax({ type: 'POST', url: 'index.php?route=product/product/index', data: 'size_a=' + encodeURIComponent($('input[name=\'option[242]\']').val()), success: function(data){ $('.productAnalog').load('.productAnalog'); } }); }); controller: ... $this->request->post['size_a']; // я так понимаю здесь должны быть данные из value, но, почему-то не работает. Или в контроллер не попадают или отсюда в модель не доходят. $results = $this->model_catalog_product->getProductAnalog($this->request->get['product_id'],$this->request->post); ... $this->request->post['size_a'] = 258; // если вручную вводить - работает... model public function getProductAnalog($product_id, $data) { $query = $this->db->query("SELECT DISTINCT *, pd.name AS name FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE (length BETWEEN '".($data['size_a']-2)."' AND '".($data['size_a']+2)."' ) AND (...)"); ... } А может быть я в самом tpl неправильно success: оформил? в Блоке .productAnalog у меня выводятся подходящие размеры, если ввожу их вручную в контроллере, а мне бы хотелось, чтобы по нажатии каждой цифры в поле, шла выборка из этих цифр и отображалась в .productAnalog. Я подумал, что по каждому следующему вводу цифры будут обновляться размеры в блоке, а для этого нужно обновить сам блок .productAnalog... Змінено 10 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 16 грудня 2015 Автор Share Опубліковано: 16 грудня 2015 Вот теперь вопрос можно считать решенным :) Надо же, понадобился месяц, чтобы решить такую пустяковую задачу, вот чем обошелся tpl $.post( "index.php?route=product/product/analogFilters", { size_a: size_a, size_b: size_b }, onAjaxSuccess ); function onAjaxSuccess(data) { /////// } Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 16 грудня 2015 Автор Share Опубліковано: 16 грудня 2015 (змінено) controller public function analogFilters() { if (isset($this->request->post['size_a']) && isset($this->request->post['size_b'])) { $_SESSION['size_a'] = $_POST['size_a']; $_SESSION['size_b'] = $_POST['size_b']; } } model ... WHERE (length BETWEEN '".($_SESSION['size_a']-2)."' ... И смешно и обидно :) Змінено 16 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 17 грудня 2015 Share Опубліковано: 17 грудня 2015 воу-воу $_POST $_SESSIONнельзя так.у тебя тут же выше пример правильного обращения к POST-данным $this->request->postхочешь с сессией работать $this->session->dataно тебе она не нужна.пришел POST - передавай его в модель (либо "как есть"; либо через промежуточную переменную-массив, типа "$filter_size"). Надіслати Поділитися на інших сайтах More sharing options... 3 weeks later... VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 Спасибо, тут разобрался, у меня новая трудность. Например, я совершаю заказ с параметрами: A - 333 B - 222 C - 111 Нажимаю добавить в корзину, и в корзине отображается мой заказ с этими параметрами.Потом я делаю еще один, точно такой же заказ, он попадает в корзину, а в корзине увеличивается только его кол-во, т.к. параметры идентичные. Если я делаю еще один заказ с параметрами:A - 444 B... C... Товар добавляется в корзину, но уже в новую таблицу. Я не могу понять, как делается проверка на опции. Я так понимаю это происходит в файле model/product методом getProductOptions() ... Но, не могу никак разобраться. Дело в том, что у меня установлена скидка на заказ товара от 2-х штук. - 6% , от 3 шт. - 8% и т.д. Но, нужно, чтобы скидка распространялась только на заказ с определенными параметрами, т.е. в приведенному выше примере у меня в корзине находится 3 товара (2 товара с идентичными параметрами и 1 с другими параметрами) в итоге скидка начисляется, как за 3 товара, а должно быть за 2 товара, а 3-й должен считаться по полной сумме, потому что заказан в единичном кол-ве Я не понимаю до конца, как это можно сделать, но предположил, что можно как-то сделать проверку на идентичность параметров. если товаров с одинаковыми параметрами меньше 2-х шт, то скидку не подключать... Могли бы что-нибудь посоветовать/подсказать? Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 6 січня 2016 Share Опубліковано: 6 січня 2016 значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 (змінено) значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Спасибо, перед тем, как написать на форуме, я как раз и разбирался в тех файлах, которые вы привели, разобраться, похоже, не смог. Вы не могли бы уточнить, в каком файле нужно вносить изменения для скидок? Еще опции нужно учитывать в контроллере или в моделе при selecte? где-то здесь... $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); Я с десяток раз уже прочитал ваше сообщение, и каждый раз становиться немного понятнее, думаю, если дадите немного больше информации, к какому-нибудь результату прийти смогу :) (надеюсь) Змінено 6 січня 2016 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 8 січня 2016 Автор Share Опубліковано: 8 січня 2016 Ой, устал. Немного конкретнее попрошу помощи, не уверен точно, но, кажется пилить нужно здесь :) system\library\cart.php где-то в районе 180 строки есть запрос $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); а ниже условие if ($product_discount_query->num_rows) { $price = $product_discount_query->row['price']; } Кажется, если по sql запросу все устраивает, то он присваивает скидку. значит, с помощью подсказки, я решил, что можно в sql запрос, добавить еще и проверку на опции, в итоге я сделал вот так $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount LEFT JOIN " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) WHERE product_id = '" . (int)$product_id . "' AND pov.product_option_value_id = '" . (int)$option_value . "' AND pov.product_option_id = '" . (int)$product_option_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); ... но, получаю ошибку: Notice: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE product_id = '2419' AND pov.product_option_value_id = '27' AND p' at line 1Error No: 1064 .... Подскажите, пожалуйста, как правильно нужно написать запрос? Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница [Решено] Вывод аналогичных по параметру товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення PRICE MASTER - Модуль імпорту/експорту товарів, парсинг, переклад, генерація текстів, редактор каталогу та багато іншого Автор: ScriptBrains 1.0 Синхронізація Замовлень Rozetka.ua та Opencart Автор: sinco Product Manipulator Автор: Hiperlynx007 Видалення дублікатів товарів для OpenCart Автор: Hatshypsut Вибір категорій і виробників для "Знайшли дешевше" шаблону Upstore Автор: Flint2000 × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
VladSiy Опубліковано: 2 грудня 2015 Автор Share Опубліковано: 2 грудня 2015 VladSiy, смотрите в этой теме Спасибо, эта тема будет шагом №2, и надеюсь она мне поможет, но сейчас я не могу понять, как добавить value из input в сессию, для меня проблема в том, что не будет отправки формы (GET, POST), нужно на ходу подхватить значения и занести их в сессию, например по событию keyup. А потом эту сессию использовать при select в модели. Т.е. если клиент в input ввел цифру, в моделе должно сработать ... ... WHERE (length BETWEEN '".($len-2)."' AND '".($len+2)."' ) ... и отобразиться на странице без перезагрузке, после каждой нажатой цифры в поле. Сейчас почти работает, но я вручную добавил значения: $len = 260; $wid = 318; а нужно, чтобы в этих переменных находились значения из сессий. Пробую вот так... <?php $_SESSION['len'] ?> = $('input[name=\'option[242]\']').val(); в интернете, кажется используют такой вариант, но у меня не получается. Надіслати Поділитися на інших сайтах More sharing options...
AlexDW Опубліковано: 2 грудня 2015 Share Опубліковано: 2 грудня 2015 - используй Силу, Люк! (с) :-) читайте по ссылке, пример в 12 посте и зачем вам непременно хочется использовать сессию? недостаточно просто передавать данные по цепочке из шаблона в контроллер, из контроллера в модель и обратно? Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 2 грудня 2015 Автор Share Опубліковано: 2 грудня 2015 Нет, мне не важно что именно использовать :) Уточните, пожалуйста, без отправки формы методом POST или GET и без сессий возможно перенести данные в контроллер? Мне почему-то, из-за этого $this->request->post['name'] стало казаться, что не возможно. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 2 грудня 2015 Share Опубліковано: 2 грудня 2015 почему нет? через jquery в связке с ajax можно выдернуть данные на странице (например из обычного поля ввода), передать их в контроллер, контроллер обрабатывает, передает в модель, модель формирует данные для ответа, возвращает их обратно в контроллер, в контроллере ответ модели обработать и через json вернуть обратно, чтобы уже на странице вывести, через тот же jquery согласен, по-началу - голова кругом :ugeek: но когда разберетесь будет значительно проще, самый лучший способ изучить - на примере страниц движка как относительно простой вариант, попробуйте разобраться с генерацией номера счета при просмотре заказа в админке (в файле admin\view\template\sale\order_info.tpl ищите по invoice-generate и дальше по цепочке) ;) Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 3 грудня 2015 Автор Share Опубліковано: 3 грудня 2015 Спасибо, вы мне очень помогли :) Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 10 грудня 2015 Автор Share Опубліковано: 10 грудня 2015 (змінено) Еще не решено :)Прошу, помогите. Я, конечно, очень рад, что уже неделю вожусь над этим, многому научился, но сейчас меня поджимает время :) tpl $('input[name=\'option[242]\']').bind('keyup', function() { $.ajax({ type: 'POST', url: 'index.php?route=product/product/index', data: 'size_a=' + encodeURIComponent($('input[name=\'option[242]\']').val()), success: function(data){ $('.productAnalog').load('.productAnalog'); } }); }); controller: ... $this->request->post['size_a']; // я так понимаю здесь должны быть данные из value, но, почему-то не работает. Или в контроллер не попадают или отсюда в модель не доходят. $results = $this->model_catalog_product->getProductAnalog($this->request->get['product_id'],$this->request->post); ... $this->request->post['size_a'] = 258; // если вручную вводить - работает... model public function getProductAnalog($product_id, $data) { $query = $this->db->query("SELECT DISTINCT *, pd.name AS name FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE (length BETWEEN '".($data['size_a']-2)."' AND '".($data['size_a']+2)."' ) AND (...)"); ... } А может быть я в самом tpl неправильно success: оформил? в Блоке .productAnalog у меня выводятся подходящие размеры, если ввожу их вручную в контроллере, а мне бы хотелось, чтобы по нажатии каждой цифры в поле, шла выборка из этих цифр и отображалась в .productAnalog. Я подумал, что по каждому следующему вводу цифры будут обновляться размеры в блоке, а для этого нужно обновить сам блок .productAnalog... Змінено 10 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 16 грудня 2015 Автор Share Опубліковано: 16 грудня 2015 Вот теперь вопрос можно считать решенным :) Надо же, понадобился месяц, чтобы решить такую пустяковую задачу, вот чем обошелся tpl $.post( "index.php?route=product/product/analogFilters", { size_a: size_a, size_b: size_b }, onAjaxSuccess ); function onAjaxSuccess(data) { /////// } Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 16 грудня 2015 Автор Share Опубліковано: 16 грудня 2015 (змінено) controller public function analogFilters() { if (isset($this->request->post['size_a']) && isset($this->request->post['size_b'])) { $_SESSION['size_a'] = $_POST['size_a']; $_SESSION['size_b'] = $_POST['size_b']; } } model ... WHERE (length BETWEEN '".($_SESSION['size_a']-2)."' ... И смешно и обидно :) Змінено 16 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 17 грудня 2015 Share Опубліковано: 17 грудня 2015 воу-воу $_POST $_SESSIONнельзя так.у тебя тут же выше пример правильного обращения к POST-данным $this->request->postхочешь с сессией работать $this->session->dataно тебе она не нужна.пришел POST - передавай его в модель (либо "как есть"; либо через промежуточную переменную-массив, типа "$filter_size"). Надіслати Поділитися на інших сайтах More sharing options... 3 weeks later... VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 Спасибо, тут разобрался, у меня новая трудность. Например, я совершаю заказ с параметрами: A - 333 B - 222 C - 111 Нажимаю добавить в корзину, и в корзине отображается мой заказ с этими параметрами.Потом я делаю еще один, точно такой же заказ, он попадает в корзину, а в корзине увеличивается только его кол-во, т.к. параметры идентичные. Если я делаю еще один заказ с параметрами:A - 444 B... C... Товар добавляется в корзину, но уже в новую таблицу. Я не могу понять, как делается проверка на опции. Я так понимаю это происходит в файле model/product методом getProductOptions() ... Но, не могу никак разобраться. Дело в том, что у меня установлена скидка на заказ товара от 2-х штук. - 6% , от 3 шт. - 8% и т.д. Но, нужно, чтобы скидка распространялась только на заказ с определенными параметрами, т.е. в приведенному выше примере у меня в корзине находится 3 товара (2 товара с идентичными параметрами и 1 с другими параметрами) в итоге скидка начисляется, как за 3 товара, а должно быть за 2 товара, а 3-й должен считаться по полной сумме, потому что заказан в единичном кол-ве Я не понимаю до конца, как это можно сделать, но предположил, что можно как-то сделать проверку на идентичность параметров. если товаров с одинаковыми параметрами меньше 2-х шт, то скидку не подключать... Могли бы что-нибудь посоветовать/подсказать? Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 6 січня 2016 Share Опубліковано: 6 січня 2016 значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 (змінено) значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Спасибо, перед тем, как написать на форуме, я как раз и разбирался в тех файлах, которые вы привели, разобраться, похоже, не смог. Вы не могли бы уточнить, в каком файле нужно вносить изменения для скидок? Еще опции нужно учитывать в контроллере или в моделе при selecte? где-то здесь... $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); Я с десяток раз уже прочитал ваше сообщение, и каждый раз становиться немного понятнее, думаю, если дадите немного больше информации, к какому-нибудь результату прийти смогу :) (надеюсь) Змінено 6 січня 2016 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 8 січня 2016 Автор Share Опубліковано: 8 січня 2016 Ой, устал. Немного конкретнее попрошу помощи, не уверен точно, но, кажется пилить нужно здесь :) system\library\cart.php где-то в районе 180 строки есть запрос $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); а ниже условие if ($product_discount_query->num_rows) { $price = $product_discount_query->row['price']; } Кажется, если по sql запросу все устраивает, то он присваивает скидку. значит, с помощью подсказки, я решил, что можно в sql запрос, добавить еще и проверку на опции, в итоге я сделал вот так $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount LEFT JOIN " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) WHERE product_id = '" . (int)$product_id . "' AND pov.product_option_value_id = '" . (int)$option_value . "' AND pov.product_option_id = '" . (int)$product_option_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); ... но, получаю ошибку: Notice: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE product_id = '2419' AND pov.product_option_value_id = '27' AND p' at line 1Error No: 1064 .... Подскажите, пожалуйста, как правильно нужно написать запрос? Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница [Решено] Вывод аналогичных по параметру товаров Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення PRICE MASTER - Модуль імпорту/експорту товарів, парсинг, переклад, генерація текстів, редактор каталогу та багато іншого Автор: ScriptBrains 1.0 Синхронізація Замовлень Rozetka.ua та Opencart Автор: sinco Product Manipulator Автор: Hiperlynx007 Видалення дублікатів товарів для OpenCart Автор: Hatshypsut Вибір категорій і виробників для "Знайшли дешевше" шаблону Upstore Автор: Flint2000
VladSiy Опубліковано: 2 грудня 2015 Автор Share Опубліковано: 2 грудня 2015 Нет, мне не важно что именно использовать :) Уточните, пожалуйста, без отправки формы методом POST или GET и без сессий возможно перенести данные в контроллер? Мне почему-то, из-за этого $this->request->post['name'] стало казаться, что не возможно. Надіслати Поділитися на інших сайтах More sharing options...
AlexDW Опубліковано: 2 грудня 2015 Share Опубліковано: 2 грудня 2015 почему нет? через jquery в связке с ajax можно выдернуть данные на странице (например из обычного поля ввода), передать их в контроллер, контроллер обрабатывает, передает в модель, модель формирует данные для ответа, возвращает их обратно в контроллер, в контроллере ответ модели обработать и через json вернуть обратно, чтобы уже на странице вывести, через тот же jquery согласен, по-началу - голова кругом :ugeek: но когда разберетесь будет значительно проще, самый лучший способ изучить - на примере страниц движка как относительно простой вариант, попробуйте разобраться с генерацией номера счета при просмотре заказа в админке (в файле admin\view\template\sale\order_info.tpl ищите по invoice-generate и дальше по цепочке) ;) Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 3 грудня 2015 Автор Share Опубліковано: 3 грудня 2015 Спасибо, вы мне очень помогли :) Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 10 грудня 2015 Автор Share Опубліковано: 10 грудня 2015 (змінено) Еще не решено :)Прошу, помогите. Я, конечно, очень рад, что уже неделю вожусь над этим, многому научился, но сейчас меня поджимает время :) tpl $('input[name=\'option[242]\']').bind('keyup', function() { $.ajax({ type: 'POST', url: 'index.php?route=product/product/index', data: 'size_a=' + encodeURIComponent($('input[name=\'option[242]\']').val()), success: function(data){ $('.productAnalog').load('.productAnalog'); } }); }); controller: ... $this->request->post['size_a']; // я так понимаю здесь должны быть данные из value, но, почему-то не работает. Или в контроллер не попадают или отсюда в модель не доходят. $results = $this->model_catalog_product->getProductAnalog($this->request->get['product_id'],$this->request->post); ... $this->request->post['size_a'] = 258; // если вручную вводить - работает... model public function getProductAnalog($product_id, $data) { $query = $this->db->query("SELECT DISTINCT *, pd.name AS name FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE (length BETWEEN '".($data['size_a']-2)."' AND '".($data['size_a']+2)."' ) AND (...)"); ... } А может быть я в самом tpl неправильно success: оформил? в Блоке .productAnalog у меня выводятся подходящие размеры, если ввожу их вручную в контроллере, а мне бы хотелось, чтобы по нажатии каждой цифры в поле, шла выборка из этих цифр и отображалась в .productAnalog. Я подумал, что по каждому следующему вводу цифры будут обновляться размеры в блоке, а для этого нужно обновить сам блок .productAnalog... Змінено 10 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 16 грудня 2015 Автор Share Опубліковано: 16 грудня 2015 Вот теперь вопрос можно считать решенным :) Надо же, понадобился месяц, чтобы решить такую пустяковую задачу, вот чем обошелся tpl $.post( "index.php?route=product/product/analogFilters", { size_a: size_a, size_b: size_b }, onAjaxSuccess ); function onAjaxSuccess(data) { /////// } Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 16 грудня 2015 Автор Share Опубліковано: 16 грудня 2015 (змінено) controller public function analogFilters() { if (isset($this->request->post['size_a']) && isset($this->request->post['size_b'])) { $_SESSION['size_a'] = $_POST['size_a']; $_SESSION['size_b'] = $_POST['size_b']; } } model ... WHERE (length BETWEEN '".($_SESSION['size_a']-2)."' ... И смешно и обидно :) Змінено 16 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 17 грудня 2015 Share Опубліковано: 17 грудня 2015 воу-воу $_POST $_SESSIONнельзя так.у тебя тут же выше пример правильного обращения к POST-данным $this->request->postхочешь с сессией работать $this->session->dataно тебе она не нужна.пришел POST - передавай его в модель (либо "как есть"; либо через промежуточную переменную-массив, типа "$filter_size"). Надіслати Поділитися на інших сайтах More sharing options... 3 weeks later... VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 Спасибо, тут разобрался, у меня новая трудность. Например, я совершаю заказ с параметрами: A - 333 B - 222 C - 111 Нажимаю добавить в корзину, и в корзине отображается мой заказ с этими параметрами.Потом я делаю еще один, точно такой же заказ, он попадает в корзину, а в корзине увеличивается только его кол-во, т.к. параметры идентичные. Если я делаю еще один заказ с параметрами:A - 444 B... C... Товар добавляется в корзину, но уже в новую таблицу. Я не могу понять, как делается проверка на опции. Я так понимаю это происходит в файле model/product методом getProductOptions() ... Но, не могу никак разобраться. Дело в том, что у меня установлена скидка на заказ товара от 2-х штук. - 6% , от 3 шт. - 8% и т.д. Но, нужно, чтобы скидка распространялась только на заказ с определенными параметрами, т.е. в приведенному выше примере у меня в корзине находится 3 товара (2 товара с идентичными параметрами и 1 с другими параметрами) в итоге скидка начисляется, как за 3 товара, а должно быть за 2 товара, а 3-й должен считаться по полной сумме, потому что заказан в единичном кол-ве Я не понимаю до конца, как это можно сделать, но предположил, что можно как-то сделать проверку на идентичность параметров. если товаров с одинаковыми параметрами меньше 2-х шт, то скидку не подключать... Могли бы что-нибудь посоветовать/подсказать? Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 6 січня 2016 Share Опубліковано: 6 січня 2016 значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 (змінено) значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Спасибо, перед тем, как написать на форуме, я как раз и разбирался в тех файлах, которые вы привели, разобраться, похоже, не смог. Вы не могли бы уточнить, в каком файле нужно вносить изменения для скидок? Еще опции нужно учитывать в контроллере или в моделе при selecte? где-то здесь... $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); Я с десяток раз уже прочитал ваше сообщение, и каждый раз становиться немного понятнее, думаю, если дадите немного больше информации, к какому-нибудь результату прийти смогу :) (надеюсь) Змінено 6 січня 2016 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 8 січня 2016 Автор Share Опубліковано: 8 січня 2016 Ой, устал. Немного конкретнее попрошу помощи, не уверен точно, но, кажется пилить нужно здесь :) system\library\cart.php где-то в районе 180 строки есть запрос $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); а ниже условие if ($product_discount_query->num_rows) { $price = $product_discount_query->row['price']; } Кажется, если по sql запросу все устраивает, то он присваивает скидку. значит, с помощью подсказки, я решил, что можно в sql запрос, добавить еще и проверку на опции, в итоге я сделал вот так $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount LEFT JOIN " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) WHERE product_id = '" . (int)$product_id . "' AND pov.product_option_value_id = '" . (int)$option_value . "' AND pov.product_option_id = '" . (int)$product_option_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); ... но, получаю ошибку: Notice: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE product_id = '2419' AND pov.product_option_value_id = '27' AND p' at line 1Error No: 1064 .... Подскажите, пожалуйста, как правильно нужно написать запрос? Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница [Решено] Вывод аналогичных по параметру товаров
VladSiy Опубліковано: 3 грудня 2015 Автор Share Опубліковано: 3 грудня 2015 Спасибо, вы мне очень помогли :) Надіслати Поділитися на інших сайтах More sharing options...
VladSiy Опубліковано: 10 грудня 2015 Автор Share Опубліковано: 10 грудня 2015 (змінено) Еще не решено :)Прошу, помогите. Я, конечно, очень рад, что уже неделю вожусь над этим, многому научился, но сейчас меня поджимает время :) tpl $('input[name=\'option[242]\']').bind('keyup', function() { $.ajax({ type: 'POST', url: 'index.php?route=product/product/index', data: 'size_a=' + encodeURIComponent($('input[name=\'option[242]\']').val()), success: function(data){ $('.productAnalog').load('.productAnalog'); } }); }); controller: ... $this->request->post['size_a']; // я так понимаю здесь должны быть данные из value, но, почему-то не работает. Или в контроллер не попадают или отсюда в модель не доходят. $results = $this->model_catalog_product->getProductAnalog($this->request->get['product_id'],$this->request->post); ... $this->request->post['size_a'] = 258; // если вручную вводить - работает... model public function getProductAnalog($product_id, $data) { $query = $this->db->query("SELECT DISTINCT *, pd.name AS name FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE (length BETWEEN '".($data['size_a']-2)."' AND '".($data['size_a']+2)."' ) AND (...)"); ... } А может быть я в самом tpl неправильно success: оформил? в Блоке .productAnalog у меня выводятся подходящие размеры, если ввожу их вручную в контроллере, а мне бы хотелось, чтобы по нажатии каждой цифры в поле, шла выборка из этих цифр и отображалась в .productAnalog. Я подумал, что по каждому следующему вводу цифры будут обновляться размеры в блоке, а для этого нужно обновить сам блок .productAnalog... Змінено 10 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options...
VladSiy Опубліковано: 16 грудня 2015 Автор Share Опубліковано: 16 грудня 2015 Вот теперь вопрос можно считать решенным :) Надо же, понадобился месяц, чтобы решить такую пустяковую задачу, вот чем обошелся tpl $.post( "index.php?route=product/product/analogFilters", { size_a: size_a, size_b: size_b }, onAjaxSuccess ); function onAjaxSuccess(data) { /////// } Надіслати Поділитися на інших сайтах More sharing options...
VladSiy Опубліковано: 16 грудня 2015 Автор Share Опубліковано: 16 грудня 2015 (змінено) controller public function analogFilters() { if (isset($this->request->post['size_a']) && isset($this->request->post['size_b'])) { $_SESSION['size_a'] = $_POST['size_a']; $_SESSION['size_b'] = $_POST['size_b']; } } model ... WHERE (length BETWEEN '".($_SESSION['size_a']-2)."' ... И смешно и обидно :) Змінено 16 грудня 2015 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 17 грудня 2015 Share Опубліковано: 17 грудня 2015 воу-воу $_POST $_SESSIONнельзя так.у тебя тут же выше пример правильного обращения к POST-данным $this->request->postхочешь с сессией работать $this->session->dataно тебе она не нужна.пришел POST - передавай его в модель (либо "как есть"; либо через промежуточную переменную-массив, типа "$filter_size"). Надіслати Поділитися на інших сайтах More sharing options... 3 weeks later... VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 Спасибо, тут разобрался, у меня новая трудность. Например, я совершаю заказ с параметрами: A - 333 B - 222 C - 111 Нажимаю добавить в корзину, и в корзине отображается мой заказ с этими параметрами.Потом я делаю еще один, точно такой же заказ, он попадает в корзину, а в корзине увеличивается только его кол-во, т.к. параметры идентичные. Если я делаю еще один заказ с параметрами:A - 444 B... C... Товар добавляется в корзину, но уже в новую таблицу. Я не могу понять, как делается проверка на опции. Я так понимаю это происходит в файле model/product методом getProductOptions() ... Но, не могу никак разобраться. Дело в том, что у меня установлена скидка на заказ товара от 2-х штук. - 6% , от 3 шт. - 8% и т.д. Но, нужно, чтобы скидка распространялась только на заказ с определенными параметрами, т.е. в приведенному выше примере у меня в корзине находится 3 товара (2 товара с идентичными параметрами и 1 с другими параметрами) в итоге скидка начисляется, как за 3 товара, а должно быть за 2 товара, а 3-й должен считаться по полной сумме, потому что заказан в единичном кол-ве Я не понимаю до конца, как это можно сделать, но предположил, что можно как-то сделать проверку на идентичность параметров. если товаров с одинаковыми параметрами меньше 2-х шт, то скидку не подключать... Могли бы что-нибудь посоветовать/подсказать? Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 6 січня 2016 Share Опубліковано: 6 січня 2016 значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 (змінено) значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Спасибо, перед тем, как написать на форуме, я как раз и разбирался в тех файлах, которые вы привели, разобраться, похоже, не смог. Вы не могли бы уточнить, в каком файле нужно вносить изменения для скидок? Еще опции нужно учитывать в контроллере или в моделе при selecte? где-то здесь... $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); Я с десяток раз уже прочитал ваше сообщение, и каждый раз становиться немного понятнее, думаю, если дадите немного больше информации, к какому-нибудь результату прийти смогу :) (надеюсь) Змінено 6 січня 2016 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 8 січня 2016 Автор Share Опубліковано: 8 січня 2016 Ой, устал. Немного конкретнее попрошу помощи, не уверен точно, но, кажется пилить нужно здесь :) system\library\cart.php где-то в районе 180 строки есть запрос $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); а ниже условие if ($product_discount_query->num_rows) { $price = $product_discount_query->row['price']; } Кажется, если по sql запросу все устраивает, то он присваивает скидку. значит, с помощью подсказки, я решил, что можно в sql запрос, добавить еще и проверку на опции, в итоге я сделал вот так $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount LEFT JOIN " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) WHERE product_id = '" . (int)$product_id . "' AND pov.product_option_value_id = '" . (int)$option_value . "' AND pov.product_option_id = '" . (int)$product_option_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); ... но, получаю ошибку: Notice: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE product_id = '2419' AND pov.product_option_value_id = '27' AND p' at line 1Error No: 1064 .... Подскажите, пожалуйста, как правильно нужно написать запрос? Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 Спасибо, тут разобрался, у меня новая трудность. Например, я совершаю заказ с параметрами: A - 333 B - 222 C - 111 Нажимаю добавить в корзину, и в корзине отображается мой заказ с этими параметрами.Потом я делаю еще один, точно такой же заказ, он попадает в корзину, а в корзине увеличивается только его кол-во, т.к. параметры идентичные. Если я делаю еще один заказ с параметрами:A - 444 B... C... Товар добавляется в корзину, но уже в новую таблицу. Я не могу понять, как делается проверка на опции. Я так понимаю это происходит в файле model/product методом getProductOptions() ... Но, не могу никак разобраться. Дело в том, что у меня установлена скидка на заказ товара от 2-х штук. - 6% , от 3 шт. - 8% и т.д. Но, нужно, чтобы скидка распространялась только на заказ с определенными параметрами, т.е. в приведенному выше примере у меня в корзине находится 3 товара (2 товара с идентичными параметрами и 1 с другими параметрами) в итоге скидка начисляется, как за 3 товара, а должно быть за 2 товара, а 3-й должен считаться по полной сумме, потому что заказан в единичном кол-ве Я не понимаю до конца, как это можно сделать, но предположил, что можно как-то сделать проверку на идентичность параметров. если товаров с одинаковыми параметрами меньше 2-х шт, то скидку не подключать... Могли бы что-нибудь посоветовать/подсказать? Надіслати Поділитися на інших сайтах More sharing options...
AlexDW Опубліковано: 6 січня 2016 Share Опубліковано: 6 січня 2016 значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 (змінено) значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Спасибо, перед тем, как написать на форуме, я как раз и разбирался в тех файлах, которые вы привели, разобраться, похоже, не смог. Вы не могли бы уточнить, в каком файле нужно вносить изменения для скидок? Еще опции нужно учитывать в контроллере или в моделе при selecte? где-то здесь... $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); Я с десяток раз уже прочитал ваше сообщение, и каждый раз становиться немного понятнее, думаю, если дадите немного больше информации, к какому-нибудь результату прийти смогу :) (надеюсь) Змінено 6 січня 2016 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options... VladSiy Опубліковано: 8 січня 2016 Автор Share Опубліковано: 8 січня 2016 Ой, устал. Немного конкретнее попрошу помощи, не уверен точно, но, кажется пилить нужно здесь :) system\library\cart.php где-то в районе 180 строки есть запрос $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); а ниже условие if ($product_discount_query->num_rows) { $price = $product_discount_query->row['price']; } Кажется, если по sql запросу все устраивает, то он присваивает скидку. значит, с помощью подсказки, я решил, что можно в sql запрос, добавить еще и проверку на опции, в итоге я сделал вот так $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount LEFT JOIN " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) WHERE product_id = '" . (int)$product_id . "' AND pov.product_option_value_id = '" . (int)$option_value . "' AND pov.product_option_id = '" . (int)$product_option_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); ... но, получаю ошибку: Notice: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE product_id = '2419' AND pov.product_option_value_id = '27' AND p' at line 1Error No: 1064 .... Подскажите, пожалуйста, как правильно нужно написать запрос? Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
VladSiy Опубліковано: 6 січня 2016 Автор Share Опубліковано: 6 січня 2016 (змінено) значит, пилить скидку - помимо количества товаров учитывать еще и опции смотрите как сделано в движке на примере корзины при оформлении в catalog\controller\checkout\cart.php и system\library\cart.php Спасибо, перед тем, как написать на форуме, я как раз и разбирался в тех файлах, которые вы привели, разобраться, похоже, не смог. Вы не могли бы уточнить, в каком файле нужно вносить изменения для скидок? Еще опции нужно учитывать в контроллере или в моделе при selecte? где-то здесь... $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); Я с десяток раз уже прочитал ваше сообщение, и каждый раз становиться немного понятнее, думаю, если дадите немного больше информации, к какому-нибудь результату прийти смогу :) (надеюсь) Змінено 6 січня 2016 користувачем VladSiy Надіслати Поділитися на інших сайтах More sharing options...
VladSiy Опубліковано: 8 січня 2016 Автор Share Опубліковано: 8 січня 2016 Ой, устал. Немного конкретнее попрошу помощи, не уверен точно, но, кажется пилить нужно здесь :) system\library\cart.php где-то в районе 180 строки есть запрос $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); а ниже условие if ($product_discount_query->num_rows) { $price = $product_discount_query->row['price']; } Кажется, если по sql запросу все устраивает, то он присваивает скидку. значит, с помощью подсказки, я решил, что можно в sql запрос, добавить еще и проверку на опции, в итоге я сделал вот так $product_discount_query = $this->db->query("SELECT price FROM " . DB_PREFIX . "product_discount LEFT JOIN " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) WHERE product_id = '" . (int)$product_id . "' AND pov.product_option_value_id = '" . (int)$option_value . "' AND pov.product_option_id = '" . (int)$product_option_id . "' AND quantity <= '" . (int)$discount_quantity . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity DESC, priority ASC, price ASC LIMIT 1"); ... но, получаю ошибку: Notice: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE product_id = '2419' AND pov.product_option_value_id = '27' AND p' at line 1Error No: 1064 .... Подскажите, пожалуйста, как правильно нужно написать запрос? Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts