/**
  * 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);
     }
 }
Ejemplo n.º 2
0
 /**
  * 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);
     }
 }