RGB

Отсутствие логики в подсчете количества товаров в заказе

Рекомендуемые сообщения

RGB    1 009

Всем привет, предыстория - раньше магазин работал без регистраций, а сейчас решил его перевести на обязательную, но ласковую, регистрацию (с автоотправкой пароля, минимумом полей, короче чтобы покупатели не жаловались и вообще не замечали, что их автоматом регистрируют в магазине).

На почве этого столкнулся с очень загадочным разделом ОС - Личный кабинет, куда раньше не смотрел даже. В частности, есть там такая штука, как История заказов, которая выводит список всех заказов, сделанных одним юзером. Есть в этом списке интересное поле с именем Товаров:

Nu7Z+.png

 

Интересно оно тем, что вместо, казалось бы, логичного вывода суммарного количества всех товаров в заказе, в этом поле выводится количество уникальных товаров (заказ был на 5 телефонов одной марки, соответственно количество уникальных позиций = 1, но всего телефонов-то 5!):

5r5q+.png

 

Считается вся эта радость ф-цией getTotalOrderProductsByOrderId из файла \catalog\model\account\order.php

Я ее изменил с такого вида

$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'");

на такой

$query = $this->db->query("SELECT SUM(quantity) AS total FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'");

и считаться стало гораздо логичнее.

Вроде бы обращений к этой функции нет в других местах, кроме основного контроллера \catalog\controller\account\order.php

А значит изменения должны быть безболезненными (гуру, поправьте меня, если я сделал глупость).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
esse    0

Доброго времени суток!


Хорошо бы доработать учет общего количества товаров в заказе и в письме админу. Это актуально при формировании заказа с большим количеством однотипных позиций. Т. е. в строке "Сумма" в столбце количество выдавать общее число единиц товара, а перед ним соответственно надпись "Всего товаров:"


 


post-5112-0-14301600-1383406648_thumb.png


Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
RGB    1 009

Я ничего не понял :)

Зачем дублировать кол-во товаров? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
esse    0

Речь идет не о дублировании товаров.

Если в заказе несколько наименований товаров по нескольку штук каждого, то в итоге хорошо бы видеть общее количество всех товаров. Вот как на картинке:

 

post-5112-0-33273500-1383476444_thumb.png

 

И в письме админу чтобы приходило также с указанием общего количества товаров в заказе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Похожий контент

    • От RGB
      Всем привет, вопрос скорее к разработчикам, которые зарабатывают в нац. валюте и получают переводы в яндекс.деньгах например. Все видят какой сейчас курс, и ожидать серьезного улучшения ситуации наивно, поэтому интересно кто как спасает заработанное от обесценивания? Я сейчас вижу несколько путей, от действий "в лоб" - вывода денег в наличку и покупки доллара - до каких то более заумных схем с открытием валютного депозита или какой-то экзотики типа перевода части денег в WMZ или биткойны и т.д. Поделитесь пожалуйста опытом, кто как сейчас решает эту проблему и какой способ вы считаете выгоднее?
    • От RGB
      У меня вопрос к опытным разработчикам - надоело ставить костыли в шаблоны и решил приобщиться к таинствам разработки человеческих модулей для перенесения настроек шаблона в админку. Я взял болванку готового модуля, очистил ее от лишнего и получилось нечто, что имеет в настройках лишь переключатель yes/no, соответственно если выбран yes, то значение единственного свойства модуля (mymoduleproperty) равно 1. Потом я добавил в контроллер product.php такой кусок
      $this->data['mymodule_settings'] = $this->config->get('mymodule_settings'); if ($this->config->get('mymodule_mymoduleproperty')) { $this->data['mymoduleproperty'] = $this->config->get('mymodule_mymoduleproperty'); } else { $this->data['mymoduleproperty'] = false; } и смог в шаблоне вывести в нужном мне месте значение свойства, но это изменение базового контроллера, для чего нужен vqmod (а в некоторых шаблонах, которые я видел, авторы вообще без тени смущения перезаписывают контроллер header.php), а его использовать не хотелось бы. 
       
      Поэтому вопрос - как правильно это сделать БЕЗ vqmod и перезаписи, если мне модуль нужен лишь как место хранения и изменения настроек шаблона? 
    • От RGB
      Всем привет, недавно запустили на самых крупных тематических форумах баннерную рекламу с интересными большими скидками, и то ли лыжи не едут, то ли я переоцениваю количество людей, не знающих про адблок - выхлопа практически ноль, переходов совсем единицы, про заказы лучше вообще не говорить :) Либо это баннерная слепота развилась так сильно, я уж не знаю. У кого как с этим дела обстоят, пробовали ли нечто подобное и как это сработало?
    • От RGB
      Мы работаем с некоторыми бестолковыми дилерами, которые со временем перестают нормально следить за товаром, или его вечно нет, короче появляется задача удалить все товары определенных категорий определенного производителя, и не допустить там появления этих товаров в будущем. Поскольку эти чистки базы придется повторять не раз, мне кажется логичным составить приблизительный запрос и иногда прогонять его по базе, а не заставлять менеджеров удалять все руками из админки каждый раз, когда в этом возникнет необходимость. 
       
      Я смог скомпоновать запрос, используя модель из модуля фильтра товаров в админке, получилось вот так (мультиязычность и префиксы убрал, так как у меня этого не нужно):
      SELECT p.product_id FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p2c.category_id = '100' AND p.manufacturer_id = '50'; т.е. здесь выводятся ид всех товаров производителя 50 из категории 100. Для удаления есть запросы из ф-ции deleteProduct, которую вы все знаете
      $this->db->query("DELETE FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_description WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_image WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_option WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_option_value WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE related_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_reward WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_download WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_layout WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_store WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "review WHERE product_id = '" . (int)$product_id . "'"); Так вот, вопрос - как можно (и возможно ли вообще) объединить все эти делиты в один (у меня MySQL новее 4), чтобы не дублировать в условии для каждого из них верхний селект, а указать одно общее условие:
      WHERE ... IN (SELECT p.product_id FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p2c.category_id = '100' AND p.manufacturer_id = '50');
    • От RGB
      Доброго! Реальная ситуация на работе - есть хорошие постоянные покупатели, которым иногда делаем скидку для более красивой суммы заказа, ну или как договоримся, например за все про все получилось 9132.48, а мы скидываем 132.48. Раньше учет заказов не велся в админке, но теперь я решил туда перевести все, и столкнулся с такой проблемой - итоговая сумма привязана к стоимости товаров, и не редактируется.
       
      Мне пришла в голову идея реализовать такие скидки в виде купонов на фиксированную сумму, т.е. на каждый такой заказ применять универсальный купон, в котором будет указана каждый раз разная сумма скидки, но вероятно есть способ или модуль удобнее? Может кому-то попадалось на глаза?
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу