Список наиболее покупаемых товаров minishop2
Вчера пришло письмо от работодателя, с просьбой придумать способ, который позволит менеджеру сайта видеть перечень всех приобретенных товаров, а также видеть, сколько раз каждый товар был куплен.
Решением этого стал сниппет mostPopular.php, которым делюсь с вами, хотя уверен, что большинство сделает лучше, но тем не менее — вдруг кому пригодится.
Скачать можно с гитхаб, там всего два файла — сниппет и чанк к нему.
github.com/Alex-Mel/mostBoughtProducts
Решением этого стал сниппет mostPopular.php, которым делюсь с вами, хотя уверен, что большинство сделает лучше, но тем не менее — вдруг кому пригодится.
Скачать можно с гитхаб, там всего два файла — сниппет и чанк к нему.
github.com/Alex-Mel/mostBoughtProducts
Комментарии: 10
Это сообщение было удалено
Справится ли сниппет, если на сайте будет 10К заказов?
Не знаю, Артем. Я ведь не позиционирую это как превосходную программу.
Это ведь лишь один из вариантов решения этого вопроса, на который у меня хватило мозгов и он очень не идеальный, но свою функцию выполняет.
Да и «справиться или нет» наверное во многом будет зависеть от мощностей сервера, настройки php.ini и так далее.
Это ведь лишь один из вариантов решения этого вопроса, на который у меня хватило мозгов и он очень не идеальный, но свою функцию выполняет.
Да и «справиться или нет» наверное во многом будет зависеть от мощностей сервера, настройки php.ini и так далее.
У тебя методы типа getCollection будут тормозить. Мне кажется лучше бы было напрямую SQL запросом получить все заказы.
Я думаю, что здесь нужно добавить дополнительное поле для товара в админке, в котором будет хранится количество покупок. После создавать свой плагин и вешать на событие создания заказа. Ну, и как раз тогда уже записывать количество покупок товара в эти поля.
Вы совершенно правы. Но это нужно было изначально про составлении ТЗ подумать. А у нас все как всегда, через одно место)
на 1000 + заказов очень тормозило
Попробовал избавиться от лишнего, хотя я не особо силён в php. То есть у меня заработало, но я не до конца понимаю всё ли сделал правильно.
Просто напрямую выбираю из таблицы msOrderProduct айди товаров и сразу считаю. Код сниппета получился такой:
Теперь гораздо быстрее, а результат тот же
повторюсь, я так себе программист, всё методом тыка, но вроде бы работает. Автору спасибо за идею!
Total parse time 2.7370908 s
Total queries 3713
Total queries time 1.4645813 s
Memory peak usage 14 Mb
MODX version MODX Revolution 2.7.0-pl (advanced)
PHP version 7.1.26
Database version mysql 5.6.33-79.0-log
From cache false
Попробовал избавиться от лишнего, хотя я не особо силён в php. То есть у меня заработало, но я не до конца понимаю всё ли сделал правильно.
Просто напрямую выбираю из таблицы msOrderProduct айди товаров и сразу считаю. Код сниппета получился такой:
<?php
$q = $modx->newQuery('msOrderProduct', array('id:>' => 0));
$q->limit(0);
$res = $modx->getCollection('msOrderProduct', $q);
foreach ($res as $v) {
$list[]= $v->get('product_id');
}
$products=[];
foreach ($list as $product) {
$products[(int)$product]++;
}
arsort($products);
$result=[];
$pdoFetch = new pdoFetch($modx, $scriptProperties);
foreach ($products as $id=>$oneProduct){
$url = $modx->makeUrl($id);
$test = $modx->getObject('modResource',$id);
$name = $test->get('pagetitle');
$result[]=['id'=>$id,'name'=>$name,'url'=>$url,'counter'=>$oneProduct];
}
$output = $pdoFetch->getChunk($tpl, array(
'products' => $result
));
return $output;
Теперь гораздо быстрее, а результат тот же
Total parse time 0.4497349 s
Total queries 338
Total queries time 0.0402529 s
Memory peak usage 6 Mb
повторюсь, я так себе программист, всё методом тыка, но вроде бы работает. Автору спасибо за идею!
Попробуйте заменить getCollection на getIterator
Вы молодец.
Не плохо. Сейчас работаю над похожим проектом, только заказчик требует очень подробную статистику по заказам, товарам, какие товары зарезервированы пользователем, а какие нет, короче много всякой инфы и я решил делать такую црмку на Ларке, спустя месяц работы могу сказать, что MODX прекрасно работает вместе с Laravel и довольно шустро, мне кажется фронтенд статистику лучше делать на Ларе, чисто мое мнение.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.