public function process() { $result = array(); $queryAll = array('class' => $this->classKey, 'where' => $this->modx->toJSON(['key' => 'tags']), 'select' => $this->modx->toJSON(['value' => 'msProductOption.value']), 'groupby' => 'msProductOption.value', 'limit' => 0, 'fastMode' => true, 'sortby' => 'msProductOption.value', 'sortdir' => 'ASC', 'return' => 'data'); $this->pdoFetch->setConfig($queryAll); $tagsAll = $this->pdoFetch->run(); $tagsAll = array_map(function ($tag) { return array('id' => $tag['value'], 'text' => $tag['value']); }, $tagsAll); $result['all'] = $tagsAll; if ($this->pid !== '0') { $queryProduct = array('class' => $this->classKey, 'where' => $this->modx->toJSON(['product_id' => $this->pid, 'key' => 'tags']), 'select' => $this->modx->toJSON(['value' => 'msProductOption.value']), 'groupby' => 'msProductOption.value', 'limit' => 0, 'fastMode' => true, 'sortby' => 'msProductOption.value', 'sortdir' => 'ASC', 'return' => 'data'); $this->pdoFetch->setConfig($queryProduct); $tagsProduct = $this->pdoFetch->run(); $tagsProduct = array_map(function ($tag) { return $tag['value']; }, $tagsProduct); $result['product'] = $tagsProduct; } return $this->success('', $result); }
$dataColumns = $modx->getSelectColumns('msProductData', 'Data', '', array('id'), true) . ',`Data`.`price` as `original_price`'; $vendorColumns = $modx->getSelectColumns('msVendor', 'Vendor', 'vendor.', array('id'), true); $orderProductColumns = $modx->getSelectColumns('msOrderProduct', 'msOrderProduct', '', array('id'), true); // Tables for joining $leftJoin = '{"class":"msProduct","alias":"msProduct","on":"msProduct.id=msOrderProduct.product_id"},{"class":"msProductData","alias":"Data","on":"msProduct.id=Data.id"},{"class":"msVendor","alias":"Vendor","on":"Data.vendor=Vendor.id"}'; if (!empty($thumbsLeftJoin)) { $leftJoin .= $thumbsLeftJoin; } $select = '"msProduct":"' . $resourceColumns . '","Data":"' . $dataColumns . '","OrderProduct":"' . $orderProductColumns . '","Vendor":"' . $vendorColumns . '"'; if (!empty($thumbsSelect)) { $select .= ',' . implode(',', $thumbsSelect); } $default = array('class' => 'msOrderProduct', 'where' => '{"msOrderProduct.order_id":"' . $id . '"}', 'leftJoin' => '[' . $leftJoin . ']', 'select' => '{' . $select . '}', 'sortby' => 'id', 'sortdir' => 'ASC', 'groupby' => 'msOrderProduct.id', 'fastMode' => false, 'limit' => 0, 'return' => 'data', 'nestedChunkPrefix' => 'minishop2_'); // Merge all properties and run! $scriptProperties['tpl'] = $scriptProperties['tplRow']; $pdoFetch->setConfig(array_merge($default, $scriptProperties)); $rows = $pdoFetch->run(); /* @var msOrderProduct $row */ foreach ($rows as $row) { $outer['cart_count'] += $row['count']; $row['old_price'] = $miniShop2->formatPrice($row['original_price'] != $row['price'] ? $row['original_price'] : $row['old_price']); $row['price'] = $miniShop2->formatPrice($row['price']); $row['cost'] = $miniShop2->formatPrice($row['cost']); $row['weight'] = $miniShop2->formatWeight($row['weight']); // Additional properties of product $options = !is_array($row['options']) ? $modx->fromJSON($row['options']) : $row['options']; if (!empty($options) && is_array($options)) { foreach ($options as $key => $value) { $row['option.' . $key] = $value; } }
// Fields to select $resourceColumns = !empty($includeContent) ? $modx->getSelectColumns('msProduct', 'msProduct') : $modx->getSelectColumns('msProduct', 'msProduct', '', array('content'), true); $dataColumns = $modx->getSelectColumns('msProductData', 'Data', '', array('id'), true); $vendorColumns = $modx->getSelectColumns('msVendor', 'Vendor', 'vendor.', array('id'), true); // Tables for joining $leftJoin = '{"class":"msProductData","alias":"Data","on":"msProduct.id=Data.id"},{"class":"msVendor","alias":"Vendor","on":"Data.vendor=Vendor.id"}'; if (!empty($thumbsLeftJoin)) { $leftJoin .= $thumbsLeftJoin; } $select = '"msProduct":"' . $resourceColumns . '","Data":"' . $dataColumns . '","Vendor":"' . $vendorColumns . '"'; if (!empty($thumbsSelect)) { $select .= ',' . implode(',', $thumbsSelect); } $pdoFetch->addTime('Query parameters are prepared.'); $scriptProperties['tpl'] = $scriptProperties['tplRow']; $pdoFetch->setConfig($scriptProperties); // Working $outer = array('goods' => '', 'total_count' => 0, 'total_weight' => 0, 'total_cost' => 0); foreach ($cart as $k => $v) { $default = array('class' => 'msProduct', 'where' => '{"msProduct.id":"' . $v['id'] . '","class_key":"msProduct"}', 'leftJoin' => '[' . $leftJoin . ']', 'select' => '{' . $select . '}', 'sortby' => 'id', 'sortdir' => 'ASC', 'groupby' => 'msProduct.id', 'fastMode' => false, 'limit' => 0, 'return' => 'data', 'nestedChunkPrefix' => 'minishop2_'); // Merge all properties and run! $pdoFetch->config = array_merge($pdoFetch->config, $default, $scriptProperties); $rows = $pdoFetch->run(); // If not empty and relevant to the context, then show if (!empty($rows[0]) && (empty($v['ctx']) || $v['ctx'] == $modx->context->key)) { $row = $rows[0]; $row['key'] = $k; $row['count'] = $v['count']; $row['old_price'] = $miniShop2->formatPrice($row['price'] != $v['price'] ? $row['price'] : $row['old_price']); $row['price'] = $miniShop2->formatPrice($v['price']); $row['weight'] = $miniShop2->formatWeight($v['weight']);