/** * 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; }
public function getFilterFrontend(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter) { $field = $this->getField($filterDefinition); $values = $productList->getGroupByRelationValues($field, true); $objects = array(); Logger::log("Load Objects...", Zend_Log::INFO); $availableRelations = array(); if ($filterDefinition->getAvailableRelations()) { $availableRelations = $this->loadAllAvailableRelations($filterDefinition->getAvailableRelations()); } foreach ($values as $v) { if (empty($availableRelations) || $availableRelations[$v['value']] === true) { $objects[$v['value']] = \Pimcore\Model\Object\AbstractObject::getById($v['value']); } } Logger::log("done.", Zend_Log::INFO); if ($filterDefinition->getScriptPath()) { $script = $filterDefinition->getScriptPath(); } else { $script = $this->script; } return $this->view->partial($script, array("hideFilter" => $filterDefinition->getRequiredFilterField() && empty($currentFilter[$filterDefinition->getRequiredFilterField()]), "label" => $filterDefinition->getLabel(), "currentValue" => $currentFilter[$field], "values" => $values, "objects" => $objects, "fieldname" => $field, "metaData" => $filterDefinition->getMetaData())); }