Example #1
0
 /**
  *  Apply selected product sort order to ARSelectFilter instance
  */
 private function applySortOrder(ARSelectFilter $selectFilter, $order)
 {
     $dir = array_pop(explode('_', $order)) == 'asc' ? 'ASC' : 'DESC';
     if (substr($order, 0, 12) == 'product_name') {
         $selectFilter->setOrder(Product::getLangOrderHandle(new ARFieldHandle('Product', 'name')), $dir);
     } else {
         if (substr($order, 0, 5) == 'price') {
             $selectFilter->setOrder(new ARFieldHandle('ProductPrice', 'price'), $dir);
             $selectFilter->joinTable('ProductPrice', 'Product', 'productID AND (ProductPrice.currencyID = "' . $this->application->getDefaultCurrencyCode() . '")', 'ID');
         } else {
             if (substr($order, 0, 3) == 'sku') {
                 $selectFilter->setOrder(new ARFieldHandle('ProductPrice', 'price'), $dir);
                 $selectFilter->joinTable('ProductPrice', 'Product', 'productID AND (ProductPrice.currencyID = "' . $this->application->getDefaultCurrencyCode() . '")', 'ID');
             } else {
                 if ('newest_arrivals' == $order) {
                     $selectFilter->setOrder(new ARFieldHandle('Product', 'dateCreated'), 'DESC');
                 } else {
                     if (in_array($order, array('rating', 'sku'))) {
                         $selectFilter->setOrder(new ARFieldHandle('Product', $order), $dir);
                     } else {
                         if ('sales_rank' == $order) {
                             Product::updateSalesRank();
                             $selectFilter->setOrder(new ARFieldHandle('Product', 'salesRank'), 'DESC');
                         } else {
                             if (is_numeric($fieldID = array_shift(explode('-', $order))) && !SpecField::getInstanceByID($fieldID, true)->isMultiValue->get()) {
                                 $field = SpecField::getInstanceByID($fieldID);
                                 $field->defineJoin($selectFilter);
                                 $f = $field->getJoinAlias() . ($field->isSelector() ? '_value' : '') . '.value';
                                 $selectFilter->setOrder(new ARExpressionHandle($f . ' IS NOT NULL'), 'DESC');
                                 $selectFilter->setOrder(new ARExpressionHandle($f . ' != ""'), 'DESC');
                                 $f = new ARExpressionHandle($f);
                                 if ($field->isSelector()) {
                                     $f = MultiLingualObject::getLangOrderHandle($f);
                                 }
                                 $selectFilter->setOrder($f, array_pop(explode('_', $order)) == 'desc' ? 'DESC' : 'ASC');
                             } else {
                                 $selectFilter->setOrder(new ARFieldHandle('Product', 'isFeatured'), 'DESC');
                                 $selectFilter->setOrder(new ARFieldHandle('Product', 'salesRank'), 'DESC');
                                 $selectFilter->setOrder(new ARFieldHandle('Product', 'position'), 'DESC');
                             }
                         }
                     }
                 }
             }
         }
     }
 }