示例#1
0
 public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false)
 {
     $field = $this->getField($filterDefinition);
     $preSelect = $this->getPreSelect($filterDefinition);
     $value = $params[$field];
     if (empty($value) && !$params['is_reload']) {
         $o = $preSelect;
         if (!empty($o)) {
             if (is_object($o)) {
                 $value = $o->getId();
             } else {
                 $value = $o;
             }
         }
     } else {
         if ($value == OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) {
             $value = null;
         }
     }
     $currentFilter[$field] = $value;
     if (!empty($value)) {
         $productList->addRelationCondition($field, $value);
     }
     return $currentFilter;
 }
示例#2
0
 public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false)
 {
     $field = $this->getField($filterDefinition);
     $preSelect = $this->getPreSelect($filterDefinition);
     $value = $params[$field];
     if (empty($value) && !$params['is_reload'] && $preSelect) {
         $value = explode(",", $preSelect);
     } else {
         if (!empty($value) && in_array(OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING, $value)) {
             $value = null;
         }
     }
     $currentFilter[$field] = $value;
     if (!empty($value)) {
         $quotedValues = array();
         foreach ($value as $v) {
             if (!empty($v)) {
                 $quotedValues[] = $v;
             }
         }
         if (!empty($quotedValues)) {
             if ($filterDefinition->getUseAndCondition()) {
                 foreach ($quotedValues as $value) {
                     $productList->addCondition($value, $field);
                 }
             } else {
                 $productList->addCondition(['terms' => ["attributes." . $field => $quotedValues]], $field);
             }
         }
     }
     return $currentFilter;
 }
示例#3
0
 public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false)
 {
     $field = $filterDefinition->getField();
     $rawValue = $params[$field];
     if (!empty($rawValue) && $rawValue != OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) {
         $values = explode("-", $rawValue);
         $value['from'] = trim($values[0]);
         $value['to'] = trim($values[1]);
     } else {
         if ($rawValue == OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) {
             $value = null;
         } else {
             $value['from'] = $filterDefinition->getPreSelectFrom();
             $value['to'] = $filterDefinition->getPreSelectTo();
         }
     }
     $currentFilter[$field] = $value;
     if (!empty($value)) {
         $range = [];
         if (!empty($value['from'])) {
             $range['gte'] = $value['from'];
         }
         if (!empty($value['to'])) {
             $range['lte'] = $value['from'];
         }
         $productList->addCondition(['range' => ['attributes.' . $field => $range]], $field);
     }
     return $currentFilter;
 }
示例#4
0
 public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false)
 {
     $rawValue = $params[$filterDefinition->getField()];
     if (!empty($rawValue) && $rawValue != OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) {
         $values = explode("-", $rawValue);
         $value['from'] = trim($values[0]);
         $value['to'] = trim($values[1]);
     } else {
         if ($rawValue == OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) {
             $value = null;
         } else {
             $value['from'] = $filterDefinition->getPreSelectFrom();
             $value['to'] = $filterDefinition->getPreSelectTo();
         }
     }
     $currentFilter[$filterDefinition->getField()] = $value;
     if (!empty($value)) {
         if (!empty($value['from'])) {
             if ($isPrecondition) {
                 $productList->addCondition($filterDefinition->getField() . " >= " . $productList->quote($value['from']), "PRECONDITION_" . $filterDefinition->getField());
             } else {
                 $productList->addCondition($filterDefinition->getField() . " >= " . $productList->quote($value['from']), $filterDefinition->getField());
             }
         }
         if (!empty($value['to'])) {
             if ($isPrecondition) {
                 $productList->addCondition($filterDefinition->getField() . " <= " . $productList->quote($value['to']), "PRECONDITION_" . $filterDefinition->getField());
             } else {
                 $productList->addCondition($filterDefinition->getField() . " <= " . $productList->quote($value['to']), $filterDefinition->getField());
             }
         }
     }
     return $currentFilter;
 }
示例#5
0
 public function getFilterFrontend(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter)
 {
     // init
     $script = $filterDefinition->getScriptPath() ?: $this->script;
     $rawValues = $productList->getGroupByValues('CategoryPath', true);
     $values = array();
     // ...
     $availableRelations = array();
     if ($filterDefinition->getAvailableCategories()) {
         foreach ($filterDefinition->getAvailableCategories() as $rel) {
             $availableRelations[$rel->getId()] = true;
         }
     }
     // prepare values
     foreach ($rawValues as $v) {
         $explode = explode(",", $v['value']);
         foreach ($explode as $e) {
             if (!empty($e) && (empty($availableRelations) || $availableRelations[$e] === true)) {
                 if ($values[$e]) {
                     $count = $values[$e]['count'] + $v['count'];
                 } else {
                     $count = $v['count'];
                 }
                 $values[$e] = array('value' => $e, "count" => $count);
             }
         }
     }
     // done
     return $this->view->partial($script, ['hideFilter' => $filterDefinition->getRequiredFilterField() && empty($currentFilter[$filterDefinition->getRequiredFilterField()]), 'label' => $filterDefinition->getLabel(), 'currentValue' => $currentFilter[$filterDefinition->getField()], 'values' => array_values($values), 'fieldname' => $filterDefinition->getField(), 'metaData' => $filterDefinition->getMetaData()]);
 }
示例#6
0
 public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false)
 {
     $field = $this->getField($filterDefinition);
     $value = $params[$field];
     if (empty($value)) {
         $value['from'] = $filterDefinition->getPreSelectFrom();
         $value['to'] = $filterDefinition->getPreSelectTo();
     }
     $currentFilter[$field] = $value;
     if (!empty($value)) {
         if (!empty($value['from'])) {
             if ($isPrecondition) {
                 $productList->addCondition($this->getField($filterDefinition) . " >= " . $productList->quote($value['from']), "PRECONDITION_" . $this->getField($filterDefinition));
             } else {
                 $productList->addCondition($this->getField($filterDefinition) . " >= " . $productList->quote($value['from']), $this->getField($filterDefinition));
             }
         }
         if (!empty($value['to'])) {
             if ($isPrecondition) {
                 $productList->addCondition($this->getField($filterDefinition) . " <= " . $productList->quote($value['to']), "PRECONDITION_" . $this->getField($filterDefinition));
             } else {
                 $productList->addCondition($this->getField($filterDefinition) . " <= " . $productList->quote($value['to']), $this->getField($filterDefinition));
             }
         }
     }
     return $currentFilter;
 }
 /**
  * @param OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition
  * @param OnlineShop_Framework_IProductList                  $productList
  * @param array                                             $currentFilter
  * @param                                                   $params
  * @param bool                                              $isPrecondition
  *
  * @return string[]
  */
 public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false)
 {
     $field = $this->getField($filterDefinition);
     $preSelect = $this->getPreSelect($filterDefinition);
     $value = $params[$field];
     if (empty($value) && !$params['is_reload']) {
         if (is_array($preSelect)) {
             $value = $preSelect;
         } else {
             $value = explode(",", $preSelect);
         }
         foreach ($value as $key => $v) {
             if (!$v) {
                 unset($value[$key]);
             }
         }
     } else {
         if (!empty($value) && in_array(OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING, $value)) {
             $value = null;
         }
     }
     $currentFilter[$field] = $value;
     if (!empty($value)) {
         $quotedValues = array();
         foreach ($value as $v) {
             if ($v) {
                 $v = ".*\"" . OnlineShop_Framework_IndexService_Tenant_IWorker::MULTISELECT_DELIMITER . $v . OnlineShop_Framework_IndexService_Tenant_IWorker::MULTISELECT_DELIMITER . "\".*";
                 $quotedValues[] = $v;
             }
         }
         if ($quotedValues) {
             if ($filterDefinition->getUseAndCondition()) {
                 foreach ($quotedValues as $value) {
                     $productList->addCondition(['regexp' => ["attributes." . $field => $value]], $field);
                 }
             } else {
                 $regexArray = [];
                 foreach ($quotedValues as $value) {
                     $regexArray[] = ['regexp' => ["attributes." . $field => $value]];
                 }
                 $productList->addCondition(['or' => ['filters' => $regexArray]], $field);
             }
         }
     }
     return $currentFilter;
 }
示例#8
0
 /**
  * @param OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition
  * @param OnlineShop_Framework_IProductList                 $productList
  * @param                                                   $currentFilter
  * @param                                                   $params
  * @param bool                                              $isPrecondition
  *
  * @return mixed
  */
 public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false)
 {
     // init
     $field = $this->getField($filterDefinition);
     $value = $params[$field];
     // set default preselect
     if (empty($value)) {
         $value['from'] = $filterDefinition->getPreSelectFrom();
         $value['to'] = $filterDefinition->getPreSelectTo();
         $currentFilter[$field] = $value;
     }
     // add condition
     if (!empty($value)) {
         $productList->addPriceCondition($value['from'], $value['to']);
     }
     return $currentFilter;
 }
示例#9
0
 public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false)
 {
     $field = $this->getField($filterDefinition);
     $preSelect = $this->getPreSelect($filterDefinition);
     $value = $params[$field];
     if (empty($value) && !$params['is_reload']) {
         $objects = $preSelect;
         $value = array();
         if (!is_array($objects)) {
             $objects = explode(",", $objects);
         }
         if (is_array($objects)) {
             foreach ($objects as $o) {
                 if (is_object($o)) {
                     $value[] = $o->getId();
                 } else {
                     $value[] = $o;
                 }
             }
         }
     } else {
         if (!empty($value) && in_array(OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING, $value)) {
             $value = null;
         }
     }
     $currentFilter[$field] = $value;
     if (!empty($value)) {
         $quotedValues = array();
         foreach ($value as $v) {
             if (!empty($v)) {
                 $quotedValues[] = $productList->quote($v);
             }
         }
         if (!empty($quotedValues)) {
             if ($filterDefinition->getUseAndCondition()) {
                 foreach ($quotedValues as $value) {
                     $productList->addRelationCondition($field, "dest = " . $value);
                 }
             } else {
                 $productList->addRelationCondition($field, "dest IN (" . implode(",", $quotedValues) . ")");
             }
         }
     }
     return $currentFilter;
 }
 /**
  * @param OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition
  * @param OnlineShop_Framework_IProductList                  $productList
  * @param array                                             $currentFilter
  * @param                                                   $params
  * @param bool                                              $isPrecondition
  *
  * @return string[]
  */
 public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false)
 {
     $field = $this->getField($filterDefinition);
     $preSelect = $this->getPreSelect($filterDefinition);
     $value = $params[$field];
     if (empty($value) && !$params['is_reload']) {
         if (is_array($preSelect)) {
             $value = $preSelect;
         } else {
             $value = explode(",", $preSelect);
         }
         foreach ($value as $key => $v) {
             if (!$v) {
                 unset($value[$key]);
             }
         }
     } else {
         if (!empty($value) && in_array(OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING, $value)) {
             $value = null;
         }
     }
     //  $value = trim($value);
     $currentFilter[$field] = $value;
     if (!empty($value)) {
         $quotedValues = array();
         foreach ($value as $v) {
             $v = "%" . OnlineShop_Framework_IndexService_Tenant_IWorker::MULTISELECT_DELIMITER . $v . OnlineShop_Framework_IndexService_Tenant_IWorker::MULTISELECT_DELIMITER . "%";
             $quotedValues[] = $field . ' like ' . $productList->quote($v);
         }
         if ($filterDefinition->getUseAndCondition()) {
             $quotedValues = implode(' and ', $quotedValues);
         } else {
             $quotedValues = implode(' or ', $quotedValues);
         }
         $quotedValues = '(' . $quotedValues . ')';
         if (!empty($quotedValues)) {
             if ($isPrecondition) {
                 $productList->addCondition($quotedValues, "PRECONDITION_" . $field);
             } else {
                 $productList->addCondition($quotedValues, $field);
             }
         }
     }
     return $currentFilter;
 }
示例#11
0
 public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false)
 {
     $field = $filterDefinition->getField($filterDefinition);
     $preSelect = $filterDefinition->getPreSelect($filterDefinition);
     $value = $params[$field];
     if ($value == OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) {
         $value = null;
     } else {
         if (empty($value) && !$params['is_reload']) {
             $value = $preSelect;
         }
     }
     $value = trim($value);
     $currentFilter[$field] = $value;
     if (!empty($value)) {
         $value = ".*\"" . $value . "\".*";
         $productList->addCondition(['regexp' => ["attributes." . $field => $value]], $field);
     }
     return $currentFilter;
 }
示例#12
0
 public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false)
 {
     $value = $params[$filterDefinition->getField()];
     if ($value == OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) {
         $value = null;
     } else {
         if (empty($value) && !$params['is_reload']) {
             $value = $filterDefinition->getPreSelect();
             if (is_object($value)) {
                 $value = $value->getId();
             }
         }
     }
     $currentFilter[$filterDefinition->getField()] = $value;
     if (!empty($value)) {
         $value = trim($value);
         $productList->addCondition($value, $filterDefinition->getField());
     }
     return $currentFilter;
 }
示例#13
0
 public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false)
 {
     $field = $this->getField($filterDefinition);
     $value = $params[$field];
     if (empty($value)) {
         $value['from'] = $filterDefinition->getPreSelectFrom();
         $value['to'] = $filterDefinition->getPreSelectTo();
     }
     $currentFilter[$field] = $value;
     if (!empty($value)) {
         $range = [];
         if (!empty($value['from'])) {
             $range['gte'] = $value['from'];
         }
         if (!empty($value['to'])) {
             $range['lte'] = $value['from'];
         }
         $productList->addCondition(['range' => ['attributes.' . $field => $range]], $field);
     }
     return $currentFilter;
 }
示例#14
0
 /**
  * @param OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition
  * @param OnlineShop_Framework_IProductList                 $productList
  * @param array                                             $currentFilter
  * @param array                                             $params
  * @param bool                                              $isPrecondition
  *
  * @return array
  */
 public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false)
 {
     // init
     $field = $this->getField($filterDefinition);
     $preSelect = $this->getPreSelect($filterDefinition);
     $value = $params[$field];
     // set defaults
     if ($value == OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) {
         $value = null;
     } else {
         if (empty($value) && !$params['is_reload']) {
             $value = $preSelect;
         }
     }
     $value = trim($value);
     $currentFilter[$field] = $value;
     // add condition
     if (!empty($value)) {
         $productList->addCondition(trim($value), $field);
     }
     return $currentFilter;
 }
示例#15
0
 public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false)
 {
     $field = $this->getField($filterDefinition);
     $preSelect = $this->getPreSelect($filterDefinition);
     $value = $params[$field];
     if ($value == OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) {
         $value = null;
     } else {
         if (empty($value) && !$params['is_reload']) {
             $value = $preSelect;
         }
     }
     $value = trim($value);
     $currentFilter[$field] = $value;
     if (!empty($value)) {
         if ($isPrecondition) {
             $productList->addCondition("TRIM(`" . $field . "`) LIKE " . $productList->quote("%" . $value . "%"), "PRECONDITION_" . $field);
         } else {
             $productList->addCondition("TRIM(`" . $field . "`) LIKE " . $productList->quote("%" . $value . "%"), $field);
         }
     }
     return $currentFilter;
 }
示例#16
0
 /**
  * returns all possible group by values for given column group, product list and field combination
  *
  * @param $columnGroup
  * @param OnlineShop_Framework_IProductList $productList
  * @param string $field
  * @return array
  */
 public static function getGroupByValuesForFilterGroup($columnGroup, OnlineShop_Framework_IProductList $productList, $field)
 {
     $columnType = self::getColumnTypeForColumnGroup($columnGroup);
     $data = array();
     if ($columnType == "relation") {
         $productList->prepareGroupByRelationValues($field);
         $values = $productList->getGroupByRelationValues($field);
         foreach ($values as $v) {
             $obj = \Pimcore\Model\Object\AbstractObject::getById($v);
             if ($obj) {
                 $name = $obj->getKey();
                 if (method_exists($obj, "getName")) {
                     $name = $obj->getName();
                 }
                 $data[$v] = array("key" => $v, "value" => $name . " (" . $obj->getId() . ")");
             }
         }
     } else {
         if ($columnType == "multiselect") {
             $values = $productList->getGroupByValues($field);
             sort($values);
             foreach ($values as $v) {
                 $helper = explode(OnlineShop_Framework_IndexService_Tenant_IWorker::MULTISELECT_DELIMITER, $v);
                 foreach ($helper as $h) {
                     $data[$h] = array("key" => $h, "value" => $h);
                 }
             }
         } else {
             if ($columnType == "category") {
                 $values = $productList->getGroupByValues($field);
                 foreach ($values as $v) {
                     $helper = explode(",", $v);
                     foreach ($helper as $h) {
                         $obj = \Pimcore\Model\Object\AbstractObject::getById($h);
                         if ($obj) {
                             $name = $obj->getKey();
                             if (method_exists($obj, "getName")) {
                                 $name = $obj->getName();
                             }
                             $data[$h] = array("key" => $h, "value" => $name . " (" . $obj->getId() . ")");
                         }
                     }
                 }
             } else {
                 $values = $productList->getGroupByValues($field);
                 sort($values);
                 foreach ($values as $v) {
                     $data[] = array("key" => $v, "value" => $v);
                 }
             }
         }
     }
     return $data;
 }
示例#17
0
 /**
  * returns order by statement for simularity calculations based on given fields and object ids
  *
  * @param $fields
  * @param $objectId
  */
 public function buildSimularityOrderBy($fields, $objectId)
 {
     try {
         $fieldString = "";
         $maxFieldString = "";
         foreach ($fields as $f) {
             if (!empty($fieldString)) {
                 $fieldString .= ",";
                 $maxFieldString .= ",";
             }
             $fieldString .= $this->db->quoteIdentifier($f->getField());
             $maxFieldString .= "MAX(" . $this->db->quoteIdentifier($f->getField()) . ") as " . $this->db->quoteIdentifier($f->getField());
         }
         $query = "SELECT " . $fieldString . " FROM " . $this->model->getCurrentTenantConfig()->getTablename() . " a WHERE a.o_id = ?;";
         OnlineShop_Plugin::getSQLLogger()->log("Query: " . $query, Zend_Log::INFO);
         $objectValues = $this->db->fetchRow($query, $objectId);
         OnlineShop_Plugin::getSQLLogger()->log("Query done.", Zend_Log::INFO);
         $query = "SELECT " . $maxFieldString . " FROM " . $this->model->getCurrentTenantConfig()->getTablename() . " a";
         OnlineShop_Plugin::getSQLLogger()->log("Query: " . $query, Zend_Log::INFO);
         $maxObjectValues = $this->db->fetchRow($query);
         OnlineShop_Plugin::getSQLLogger()->log("Query done.", Zend_Log::INFO);
         if (!empty($objectValues)) {
             $subStatement = array();
             foreach ($fields as $f) {
                 $subStatement[] = "(" . $this->db->quoteIdentifier($f->getField()) . "/" . $maxObjectValues[$f->getField()] . " - " . $objectValues[$f->getField()] / $maxObjectValues[$f->getField()] . ") * " . $f->getWeight();
             }
             $statement = "ABS(" . implode(" + ", $subStatement) . ")";
             OnlineShop_Plugin::getSQLLogger()->log("Similarity Statement: " . $statement, Zend_Log::INFO);
             return $statement;
         } else {
             throw new Exception("Field array for given object id is empty");
         }
     } catch (Exception $e) {
         OnlineShop_Plugin::getSQLLogger()->err($e);
         return "";
     }
 }
示例#18
0
 public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false)
 {
     $field = $this->getField($filterDefinition);
     $preSelect = $this->getPreSelect($filterDefinition);
     $value = $params[$field];
     if (empty($value) && !$params['is_reload']) {
         if (!empty($preSelect) || $preSelect == '0') {
             $value = explode(",", $preSelect);
         }
     } else {
         if (!empty($value) && in_array(OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING, $value)) {
             $value = null;
         }
     }
     $currentFilter[$field] = $value;
     if (!empty($value)) {
         $quotedValues = array();
         foreach ($value as $v) {
             if (!empty($v)) {
                 $quotedValues[] = $productList->quote($v);
             }
         }
         if (!empty($quotedValues)) {
             if ($filterDefinition->getUseAndCondition()) {
                 foreach ($quotedValues as $value) {
                     if ($isPrecondition) {
                         $productList->addCondition($field . " = " . $value, "PRECONDITION_" . $field);
                     } else {
                         $productList->addCondition($field . " = " . $value, $field);
                     }
                 }
             } else {
                 if ($isPrecondition) {
                     $productList->addCondition($field . " IN (" . implode(",", $quotedValues) . ")", "PRECONDITION_" . $field);
                 } else {
                     $productList->addCondition($field . " IN (" . implode(",", $quotedValues) . ")", $field);
                 }
             }
         }
     }
     return $currentFilter;
 }
示例#19
0
 /**
  * @param \Pimcore\Model\Object\FilterDefinition $filterDefinition
  * @param OnlineShop_Framework_IProductList $productList
  * @param $params
  * @param Zend_View $view
  * @param OnlineShop_Framework_FilterService $filterService
  * @param $loadFullPage
  * @param bool $excludeLimitOfFirstpage
  */
 public static function setupProductList(\Pimcore\Model\Object\FilterDefinition $filterDefinition, OnlineShop_Framework_IProductList $productList, $params, Zend_View $view, OnlineShop_Framework_FilterService $filterService, $loadFullPage, $excludeLimitOfFirstpage = false)
 {
     $orderByOptions = array();
     $orderKeysAsc = explode(",", $filterDefinition->getOrderByAsc());
     if (!empty($orderKeysAsc)) {
         foreach ($orderKeysAsc as $orderByEntry) {
             if (!empty($orderByEntry)) {
                 $orderByOptions[$orderByEntry]["asc"] = true;
             }
         }
     }
     $orderKeysDesc = explode(",", $filterDefinition->getOrderByDesc());
     if (!empty($orderKeysDesc)) {
         foreach ($orderKeysDesc as $orderByEntry) {
             if (!empty($orderByEntry)) {
                 $orderByOptions[$orderByEntry]["desc"] = true;
             }
         }
     }
     $offset = 0;
     $pageLimit = intval($params["perPage"]);
     if (!$pageLimit) {
         $pageLimit = $filterDefinition->getPageLimit();
     }
     if (!$pageLimit) {
         $pageLimit = 50;
     }
     $limitOnFirstLoad = $filterDefinition->getLimitOnFirstLoad();
     if (!$limitOnFirstLoad) {
         $limitOnFirstLoad = 6;
     }
     if ($params["page"]) {
         $view->currentPage = intval($params["page"]);
         $offset = $pageLimit * ($params["page"] - 1);
     }
     if ($filterDefinition->getAjaxReload()) {
         if ($loadFullPage && !$excludeLimitOfFirstpage) {
             $productList->setLimit($pageLimit);
         } else {
             if ($loadFullPage && $excludeLimitOfFirstpage) {
                 $offset += $limitOnFirstLoad;
                 $productList->setLimit($pageLimit - $limitOnFirstLoad);
             } else {
                 $productList->setLimit($limitOnFirstLoad);
             }
         }
     } else {
         $productList->setLimit($pageLimit);
     }
     $productList->setOffset($offset);
     $view->pageLimit = $pageLimit;
     $orderBy = $params["orderBy"];
     $orderBy = explode("#", $orderBy);
     $orderByField = $orderBy[0];
     $orderByDirection = $orderBy[1];
     if (array_key_exists($orderByField, $orderByOptions)) {
         $view->currentOrderBy = htmlentities($params["orderBy"]);
         $productList->setOrderKey($orderByField);
         $productList->setOrder($orderByDirection);
     } else {
         $orderByCollection = $filterDefinition->getDefaultOrderBy();
         $orderByList = array();
         if ($orderByCollection) {
             foreach ($orderByCollection as $orderBy) {
                 $orderByList[] = array($orderBy->getField(), $orderBy->getDirection());
             }
         }
         $productList->setOrderKey($orderByList);
         $productList->setOrder("ASC");
     }
     if ($filterService) {
         $view->currentFilter = $filterService->initFilterService($filterDefinition, $productList, $params);
     }
     $view->orderByOptions = $orderByOptions;
 }