Добавляем "Цена от" для категории miniShop2
В некоторых моих сайтах-магазинах я отображаю в списке категорий цену в формате «от XXX руб.», вот так:

Небольшая инструкция, как я это делаю:
1. Создаем доп поле с именем categoryFromPrice и назначаем его для категорий. Тип ввода — число.
2. Создаем плагин с именем UpdateCategoryFromPrice на событие OnDocFormSave:
Вот такое небольшое решение, может кому пригодится. Ну и как минимум сам буду пользоваться =)
И да, это не оптимальное по скорости решение, если у вас много товаров (> нескольких сотен), то могут быть проблемы с производительностью.

Небольшая инструкция, как я это делаю:
1. Создаем доп поле с именем categoryFromPrice и назначаем его для категорий. Тип ввода — число.
2. Создаем плагин с именем UpdateCategoryFromPrice на событие OnDocFormSave:
<?php
if($resource->get('class_key') == 'msProduct') {
$parent = $modx->getObject('msCategory', $resource->get('parent'));
// вычисляем минимальную цену в категории товара
$minPrice = 0;
$products = $modx->getCollection('msProduct', array('published' => 1, 'deleted' => 0, 'parent' => $parent->get('id')));
foreach($products as $product) {
$productPrice = $product->get('price');
if($minPrice == 0 || $productPrice < $minPrice) {
$minPrice = $productPrice;
}
}
// задаем эту цену для категории-родителя
$parent->setTVValue('categoryFromPrice', $minPrice);
$parent->save();
// а теперь для всех категорий выше
$doCycle = true;
while($doCycle) {
$minPrice = 0;
$parent = $modx->getObject('msCategory', $parent->get('parent'));
if($parent) {
$childCategories = $modx->getCollection('msCategory', array('published' => 1, 'deleted' => 0, 'parent' => $parent->get('id')));
foreach($childCategories as $childCategory) {
$categoryPrice = floatval($childCategory->getTVValue('categoryFromPrice'));
if($categoryPrice !=0 && ($minPrice == 0 || $categoryPrice < $minPrice)) {
$minPrice = $categoryPrice;
};
}
$parent->setTVValue('categoryFromPrice', $minPrice);
$parent->save();
}
else {
$doCycle = false;
}
}
}3. Используем categoryFromPrice где нам нужно, в частности в списке категорий.Вот такое небольшое решение, может кому пригодится. Ну и как минимум сам буду пользоваться =)
И да, это не оптимальное по скорости решение, если у вас много товаров (> нескольких сотен), то могут быть проблемы с производительностью.
Комментарии: 7
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Сортировочку потом можно сделать.
У меня пять разных категорий, и для каждой нужно указать в отдельности.