/** * Called before a query is executed. Modifies the query to add sorting * parameters. * * @param Varien_Event_Observer $observer Observer/event data * @throws InvalidArgumentException for invalid dir and order parameters */ public function modifyQuery(Varien_Event_Observer $observer) { // get query part from current URL $urlQuery = Mage::getModel('core/url')->getRequest()->getQuery(); if (!array_key_exists('order', $urlQuery)) { return; } $direction = $urlQuery['dir']; $field = $urlQuery['order']; if (!in_array($direction, $this->directions)) { throw new InvalidArgumentException('Invalid sort direction parameter "' . $direction . '", must be asc or desc.', 1397868721); } if (array_key_exists($field, $this->sortAttributes)) { if ($field == 'relevance') { $sortField = 'relevance'; } else { if ($field == 'name') { $sortField = 'sortTitle'; } else { $sortField = Mage::helper('solr/schema')->getFieldNameByAttribute($field); } } /** @var Asm_Solr_Model_Solr_Query $query */ $query = $observer->getQuery(); $query->setSorting($sortField . ' ' . $direction); } else { throw new InvalidArgumentException('No sortable attribute found for sort parameter ' . $field, 1397868606); } }
/** * Called before a query is executed. Modifies the query to add faceting * parameters. * * @param Varien_Event_Observer $observer Observer/event data */ public function modifyQuery(Varien_Event_Observer $observer) { /** @var Asm_Solr_Model_Solr_Query $query */ $query = $observer->getQuery(); $query->setFaceting(); $this->filterableAttributes = $this->getFilterableAttributes(); // set facet.* query parameters / which facets to generate foreach ($this->filterableAttributes as $attribute) { $query->addFacetField(Mage::helper('solr/schema')->getFieldNameByAttribute($attribute)); } // set filter query (fq) parameters / actually filtering results $filters = $this->getQueryFilters(); foreach ($filters as $fieldName => $value) { $query->addFilter($fieldName, $value); } }