Вывод наименьшей цены из списка товаров в категори
Здравствуйте.
Уже вхожу в тотальный затуп, но так и не получается реализовать в minishop2 вышеозвученную задачу.
Реализую запрос следующим образом:
Уже вхожу в тотальный затуп, но так и не получается реализовать в minishop2 вышеозвученную задачу.
Реализую запрос следующим образом:
//получаем список "детей" категории
if (empty($parent)) {$parent = $modx->resource->id;}
$pids = array_merge(array($parent), $modx->getChildIds($parent));
$ids = array();
//выбираем из него только опубликованные товары
$q = $modx->newQuery('msProduct');
$q->where(array('class_key' => 'msProduct','parent:IN' => $pids,'published' => 1,'deleted' => 0));
$q->select('`msProduct`.`id`');
if ($q->prepare() && $q->stmt->execute()) {
$ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
}
//подцепляем к нему товары из мультикатегорий
$q = $modx->newQuery('msProduct');
$q->leftJoin('msCategoryMember', 'Member', '`Member`.`product_id` = `msProduct`.`id`');
$q->where(array('class_key' => 'msProduct','Member.category_id:IN' => $pids,'published' => 1,'deleted' => 0));
$q->select('`msProduct`.`id`');
if ($q->prepare() && $q->stmt->execute()) {
$ids2 = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
if (!empty($ids2)) {
$ids = array_unique(array_merge($ids, $ids2));
}
}
//счетчик товаров
$count = count($ids);
$modx->setPlaceholder('catalog.count',$count);
if ($count == 0) {
$modx->setPlaceholder('catalog.min',$count);
}
else {
//получаем наименьшую цену из товаров категории
$q = $modx->newQuery('msProduct');
$q->where(array('id:IN' => $ids));
$q->sortby('price', 'DESC');
$q->select(array(
"msProduct.id",
"msProduct.price",
));
$q->limit(1);
if ($q->prepare() && $q->stmt->execute()) {
$min = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
if (!empty($min['price'])) {
$modx->setPlaceholder('catalog.min',$min['price']);
}
}
}
return;
— ошибок в консоли нет, но цена упорно не выбирается. В чем может быть причина? Заранее спасибо. Комментарии: 5
Слегка обновил последнюю часть до:
$q = $modx->newQuery('msProduct');
$q->innerJoin('msProductData', 'msProductData', '`msProductData`.`product_id` = `msProduct`.`id`');
$q->where(array('msProduct.id:IN' => $ids, 'msProductData.price:>=' => "0"));
$q->sortby('msProductData.price', 'DESC');
$q->select('`msProductData`.`price`');
$q->limit(1);
if ($q->prepare() && $q->stmt->execute()) {
$min = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
if (!empty($min['price'])) {
$modx->setPlaceholder('catalog.min',$min['price']);
}
}
— но все равно нет никакого результата и в логах пустота… $pdo = $modx->getService('pdoFetch');
$result = $pdo->getArray(
// Класс
'msProduct',
// Условие where
array(
'deleted' => false,
'published' => true,
),
// Параметры выборки
array(
'parents' => 5, // Категория с товарами
'innerJoin' => array(
'Data' => array('class' => 'msProductData')
),
'select' => array('Data' => 'price'),
'sortby' => 'Data.price',
'sortdir' => 'asc',
)
);
if (!empty($result)) {
echo $result['price'];
}
// При желании можно лог посмотреть
echo '<pre>';
print_r($modx->getPlaceholder('pdoTools.log'));
Оу, большое спасибо! Даже не думал, что так легко можно их зассумонить.
Вот что вышло (вывожу минимальную цену товара из категорий, включая мультикатегории, имея список id товаров):
Вот что вышло (вывожу минимальную цену товара из категорий, включая мультикатегории, имея список id товаров):
$pdo = $modx->getService('pdoFetch');
$result = $pdo->getArray(
'msProduct',
array(
'deleted' => false,
'published' => true,
'Data.price:>' => '0',
'id:IN' => $ids,
),
array(
'innerJoin' => array(
'Data' => array('class' => 'msProductData')
),
'select' => array('Data' => 'price'),
'sortby' => 'Data.price',
'sortdir' => 'asc',
'limit' => '1',
)
);
if (!empty($result)) {
if (substr($result['price'], -3, 3) == ".00") {
$min = substr($result['price'],0,-3);
}
$modx->setPlaceholder('catalog.min',$min);
}
'id:IN' => $ids,Указание parents и так выберет нужные id товаров с учетом мультикатегорий MS2.
Работает ровно как указание parents в msProducts и pdoResources.
Добрый день! Подскажите, пожалуйста, при такой конструкции запроса:
$pdo = $modx->getService('pdoFetch');
$result = $pdo->getArray(
'msProduct',
array(
'id' => $id,),
array(
'innerJoin' => array(
'Data' => array('class' => 'msProductData')),
'select' => array('Data' => '*'),
'limit' => '1',
)
);
как заджойнить табличку modx_ms2_product_options, т.е. вместе со свойствами товара получить ещё и опции?
$pdo = $modx->getService('pdoFetch');
$result = $pdo->getArray(
'msProduct',
array(
'id' => $id,),
array(
'innerJoin' => array(
'Data' => array('class' => 'msProductData')),
'select' => array('Data' => '*'),
'limit' => '1',
)
);
как заджойнить табличку modx_ms2_product_options, т.е. вместе со свойствами товара получить ещё и опции?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.