Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Вывести в категории мин., макс. и среднюю цены, а также кол-во товаров


WIXVW

Recommended Posts

Добрый день, подскажите пожалуйста, как на странице категории в ocStore 3.0.2 вывести
количество товаров в этой категории, минимальную, среднюю и максимальную цену товаров в ней?

Это нужно править model и делать отдельные запросы к базе?

P.S. Товаров в категории немного и цены не меняются

Надіслати
Поділитися на інших сайтах


10 минут назад, WIXVW сказал:

P.S. Товаров в категории немного и цены не меняются

Выведите в описании категории просто текстом в таком случае.

Надіслати
Поділитися на інших сайтах

29 минут назад, WIXVW сказал:

вывести
количество товаров в этой категории, минимальную, среднюю и максимальную цену товаров в ней?

Нужно править и контроллер и модель и шаблонизатор twig.
В модели есть функция получения количества товаров в категории. Достаточно просто вызвать её в контроллере, передать данные в твиг и отобразить, а вот с мин, макс и средней ценой чуть "интереснее"
Нужно создать функцию, которая будет возвращать эти значения. 
Т.е. обращаемся к БД, говорим - дай все товары, которые в нужной нам категории. Перебираем их циклом и используем поле price для сравнения. Перебором находим мин и макс, а среднее получаем методом сложения всех прайсов и делим на количество товаров.

Но функция будет вешать Ваш сайт, особенно если в ней много товаров, потому результат выполнения нужно "кешировать", например писать в статичный файл в json, указывая в нём все 3 значения и "срок годности" . И при обращении к категории проверять файл на существование, а затем на срок годности. Если устарел или не существует - запускаем функцию вышеуказанную и снова пишем в файл. А если существует и дата в порядке - берем данные из json.

По реализации - часа полтора-два (без стилизации вывода), т.е. получение, кеширование и передача данных шаблонизатору.
При желании можно повесить рассчет и кеширование на крон, чтобы тех редких юзеров, на участь которых может выпасть "устаревание" - не напрягать, а рассчитывать всё в фоне и поддерживать кеш в актуальном состоянии.
А при НАСТОЯЩЕМ желании сделать красиво, можно так же обновлять кеш из админки каждый раз, когда добавляется, удаляется или редактируется товар, в зависимости от категории, в которую он входит.

Если это "сложно" или "дорого", то вариант предложенный @Tom выше - идеальное решение.


 

Надіслати
Поділитися на інших сайтах

Ну вам нужно получить в контроллере, все цены товаров из этой категории и total products, без фильтрации. 

Потом получить акционные цены для этих товаров. Если нет акции - обычная цена, есть есть акционная.

 

Сложить все это в массивчик и на вьюху. 

А там уже min, max, количество и средняя легко

Надіслати
Поділитися на інших сайтах


10 минут назад, nogocuHoBuk сказал:


В модели есть функция получения количества товаров в категории. Достаточно просто вызвать её в контроллере, передать данные в твиг и отобразить, а вот с мин, макс и средней ценой чуть "интереснее"
Нужно создать функцию, которая будет возвращать эти значения. 
Т.е. обращаемся к БД, говорим - дай все товары, которые в нужной нам категории. Перебираем их циклом и используем поле price для сравнения. Перебором находим мин и макс, а среднее получаем методом сложения всех прайсов и делим на количество товаров.
 

зачем перебором?  Сложите в массив $data['products_price'] цены с ключом 'price_normal'. И получите, что вам нужно. 

$numbers = preg_replace('/[^0-9.]/','',array_column($products_price, 'price_normal'));
$max_numbers = max($numbers2);
$min_numbers = min($numbers2);
$average = ( $max_numbers + $min_numbers ) / 2;

 

Надіслати
Поділитися на інших сайтах


28 минут назад, Tom сказал:

Выведите в описании категории просто текстом в таком случае.

 

да, наверно, Вы правы, поставлю второе описание категории, чтобы выводилось внизу, и выведу вручную туда

Надіслати
Поділитися на інших сайтах


10 минут назад, niger сказал:

array_column

По ресурсозатратности и времени выполнения ж то же самое, вроде. Не?
Да и для того, чтобы 

 

10 минут назад, niger сказал:

Сложите в массив $data['products_price'] 


нужно запустить всё тот же цикл перебора полученных товаров.

Тут же главное суть... :)

  

10 минут назад, niger сказал:

$average = ( $max_numbers + $min_numbers ) / 2;

не. Имеем сто товаров
99 порублю
1 за 100 рублей
в вашем случае средняя цена (100+1)/2 примерно 50 руб
в реальности (99+100)/100 примерно 2 руб

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.