Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 2 Ответов
  • 1229 Просмотров
*

devirus

  • Захожу иногда
  • 140
  • 6 / 0
По умолчанию бестселлеры сортируются по общему количеству проданных товаров за все время.
При чем если пришел клиент и купил сразу 100000 лейкопластырей, они могут зависнуть в бестселлерах на несколько месяцев.

Кому как, возможно в разных тематиках по разному, но считаю такой подход не верным.
Бестселлеры должны считаться за некоторый период времени (допустим последние 2 недели). Плюс, количество купленное в одном заказе (т. е. одним человеком), не должно влиять на популярность этого товара (должен влиять только сам факт продажи).

Потому написал для себя такой плагин (это две разные версии).

Учитывать только продажи за последние 14 дней:
Код
function onBeforeQueryGetProductList($type, &$adv_result, &$adv_from, &$adv_query, &$order_query, &$filters){
        if ($type=="bestseller_products"){
            $adv_from .= "LEFT JOIN `#__jshopping_orders` AS orders ON OI.order_id = orders.order_id";
            $adv_query .= " AND orders.order_date > '" . date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-14,   date("Y"))). "' ";
        }
}

Учитывать только продажи за последние 14 дней + не учитывать количество в заказе.
Чтобы не трогать исходник, пришлось вынести весь метод в onBeforeDisplayProductListView.

Код
function onBeforeDisplayProductListView(&$view){

        $count = 3;
        $tProduct = JTable::getInstance('product', 'jshop');
        $adv_result = $tProduct->getBuildQueryListProductDefaultResult();
        $adv_query = "";
        $adv_from = "";

        //Get bestsellers
        if (JRequest::getInt('category_id')){

            $jshopConfig = JSFactory::getConfig();
            $db = JFactory::getDBO();
            $array_categories = JRequest::getInt('category_id');
            $filters = array();

            $tProduct->getBuildQueryListProductSimpleList("best", $array_categories, $filters, $adv_query, $adv_from, $adv_result);

            $adv_from .= "LEFT JOIN `#__jshopping_orders` AS orders ON OI.order_id = orders.order_id";
            $adv_query .= " AND orders.order_date > '" . date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-14,   date("Y"))). "' ";
    
            $query = "SELECT SUM(1) as max_num, $adv_result FROM #__jshopping_order_item AS OI
                      INNER JOIN `#__jshopping_products` AS prod   ON prod.product_id=OI.product_id
                      INNER JOIN `#__jshopping_products_to_categories` AS pr_cat ON pr_cat.product_id = prod.product_id
                      LEFT JOIN `#__jshopping_categories` AS cat ON pr_cat.category_id = cat.category_id
                      $adv_from
                      WHERE prod.product_publish = '1' AND cat.category_publish='1' ".$adv_query."
                      GROUP BY prod.product_id
                      ORDER BY max_num desc LIMIT ".$count;
            $db->setQuery($query);
            $bestsellers = $db->loadObjectList();
            $bestsellers = listProductUpdateData($bestsellers);

            $view->assign('bestsellers', $bestsellers);

        }
    }

p. s. на самом деле выкладываю, чтобы более толковые люди проверили и, возможно, подсказали более правильное решение *DRINK*
« Последнее редактирование: 24.06.2014, 00:42:10 от devirus »
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Цитировать
на самом деле выкладываю, чтобы более толковые люди проверили и, возможно, подсказали более правильное решение
а я то наивный предполагал, чтобы другим помочь, кому такое надо... а вы исключительно в личных интересах :)

Код
NOW() - INTERVAL [b]14 DAY[/b]
1. движок форума не понимает BB-code внутри тега code.
2. обычно нет смысла грузить MySQL вычислением того, что можно сделать на PHP
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

devirus

  • Захожу иногда
  • 140
  • 6 / 0
Цитировать
вычислением того, что можно сделать на PHP
Дельный совет, разберусь с форматами дат и доработаю.

p. s. моя корыстность полезна миру :)

upd: поправил первый пост (дату считает php, а не mysql).
« Последнее редактирование: 24.06.2014, 00:42:59 от devirus »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Bestseller - не верный принцип работы

Автор threemonkeys

Ответов: 7
Просмотров: 1127
Последний ответ 18.12.2015, 02:57:58
от threemonkeys
К стандартному модулю поиска от разработчиков - немного полезностей

Автор kit2m2

Ответов: 0
Просмотров: 981
Последний ответ 12.10.2013, 00:23:02
от kit2m2