public function hitsAction() { $total = $this->catalog->getTotal($this->query); // format it $total = Parser::number_format($total); // and tell the browser too $this->response->setVariable('hits', $total); // view template $this->response->setView('search/hits.xsl'); return $this->response; }
public function hitsAction() { // create an identifier for this search $id = $this->helper->getQueryID(); // see if one exists in session already $total = $this->request->getSessionData($id); // nope if ($total == null) { // so do a search (just the hit count) // and cache the hit total $total = $this->engine->getHits($this->query); $this->request->setSessionData($id, (string) $total); } // format it $total = Parser::number_format($total); // and tell the browser too $this->data["hits"] = $total; return $this->data; }
/** * Add a facet * * @param Facet $facets */ public function addFacet(Facet $facet) { $facet->count_display = Parser::number_format($facet->count); array_push($this->facets, $facet); }
/** * Parse facets out of the response * * @param DOMDocument $dom * @return Facets */ protected function extractFacets(\DOMDocument $dom) { $facets = new Search\Facets(); $xml = simplexml_import_dom($dom->documentElement); // for now just the database hit counts $databases = $xml->Statistics->Statistic; if (count($databases) > 1) { $databases_facet_name = $this->config->getConfig("DATABASES_FACET_NAME", false, "Databases"); $group = new Search\FacetGroup("databases"); $group->name = "databases"; $group->public = $databases_facet_name; $databases_array = array(); foreach ($databases as $database) { $database_id = (string) $database->Database; $database_hits = (int) $database->Hits; // nix the empty ones if ($database_hits == 0) { continue; } $databases_array[$database_id] = $database_hits; } // get 'em in reverse order arsort($databases_array); foreach ($databases_array as $database_id => $database_hits) { $facet = new Search\Facet(); $facet->name = $this->config->getDatabaseName($database_id); $facet->count = Parser::number_format($database_hits); $facet->key = $database_id; $group->addFacet($facet); } $facets->addGroup($group); } return $facets; }
/** * Add links to the query object limits * * @param Query $query */ public function addQueryLinks(Query $query) { // we have to pass in the query object here rather than take // the property above because adding the links doesn't seem // to reflect back in the main object, even though they should // be references, maybe because limit objects are in an array? // search option links $search = $this->registry->getConfig('search'); if ($search instanceof \SimpleXMLElement) { $controller_map = $this->request->getControllerMap(); foreach ($search->xpath("//option") as $option) { // format the number // is this the current tab? if ($controller_map->getControllerName() == (string) $option["id"] && ($this->request->getParam('source') == (string) $option["source"] || (string) $option["source"] == '')) { $option->addAttribute('current', "1"); } // url $params = $query->extractSearchParams(); $params['controller'] = $controller_map->getUrlAlias((string) $option["id"]); $params['action'] = "results"; $params['source'] = (string) $option["source"]; $url = $this->request->url_for($params); $option->addAttribute('url', $url); // cached search hit count? foreach ($this->request->getAllSessionData() as $session_id => $session_value) { // does this value in the cache have the save id as our tab? $id = str_replace("_" . $query->getHash(), "", $session_id); if ($id == (string) $option["id"]) { // yup, so add it $option->addAttribute('hits', Parser::number_format($session_value)); } } } $this->registry->setConfig('search', $search); } // links to remove facets foreach ($query->getLimits() as $limit) { $params = $this->currentParams(); $params = Parser::removeFromArray($params, $limit->field, $limit->value); $limit->remove_url = $this->request->url_for($params); } }
/** * Add links to the query object limits * * @param Query $query */ public function addQueryLinks(Query $query) { // we have to pass in the query object here rather than take // the property above because adding the links doesn't seem // to reflect back in the main object, even though they should // be references, maybe because limit objects are in an array? // search option links $search = $this->registry->getConfig('search'); if ($search instanceof \SimpleXMLElement) { $controller_map = $this->request->getControllerMap(); foreach ($search->xpath("//option") as $option) { $id = (string) $option["id"]; if ((string) $option["source"] != '') { $id .= '_' . (string) $option["source"]; } $id .= '_' . $this->query->getHash(); // is this the current tab? if ($controller_map->getControllerName() == (string) $option["id"] && ($this->request->getParam('source') == (string) $option["source"] || (string) $option["source"] == '')) { // mark as current $option->addAttribute('current', "1"); // keep the current url, too, minus the start # $params = $this->request->getParams(); $params['start'] = null; $this->request->setSessionData("url-{$id}", $this->request->url_for($params)); } // url $url = $this->request->getSessionData("url-{$id}"); // already cached, so use it if ($url == null) { $params = $query->extractSearchParams(); $params['controller'] = $controller_map->getUrlAlias((string) $option["id"]); $params['action'] = "results"; $params['source'] = (string) $option["source"]; $params['sort'] = $this->request->getParam('sort'); $url = $this->request->url_for($params); } $option->addAttribute('url', $url); // cached search hit count? $session_hits = $this->request->getSessionData($id); if ($session_hits != null) { $option->addAttribute('hits', Parser::number_format($session_hits)); } } $this->registry->setConfig('search', $search); } // links to remove facets foreach ($query->getLimits() as $limit) { $params = $this->currentParams(); // urlencode here necessary to support the urlencode above on 'key' urls $params = Parser::removeFromArray($params, urlencode($limit->field), $limit->value); $limit->remove_url = $this->request->url_for($params); } }
/** * Add links to the query object limits * * @param Query $query */ public function addQueryLinks(Query $query) { // we have to pass in the query object here rather than take // the property above because adding the links doesn't seem // to reflect back in the main object, even though they should // be references, maybe because limit objects are in an array? // add current query to query object itself $params = $query->extractSearchParams(); $params['controller'] = $this->request->getParam('controller'); $params['action'] = 'search'; $params['source'] = $this->request->getParam('source'); $params['sort'] = $this->request->getParam('sort'); // url $query->url = $this->request->url_for($params); // query only $query->url_query = Parser::removeLeft($query->url, '?'); // advanced search $params['action'] = 'advanced'; $query->url_advanced = $this->request->url_for($params); // search option links $search = $this->registry->getConfig('search'); if ($search instanceof \SimpleXMLElement) { $controller_map = $this->request->getControllerMap(); // combined results $combined = $controller_map->getUrlAlias('combined'); $combined_id = $combined . '_' . $query->getHash(); if ($this->request->getSessionData($combined_id) != null) { $params = $query->extractSearchParams(); $params['controller'] = $combined; $params['action'] = "results"; $search->combined_url = $this->request->url_for($params); } // individual search options foreach ($search->xpath("//option") as $option) { $id = (string) $option["id"]; if ((string) $option["source"] != '') { $id .= '_' . (string) $option["source"]; } $id .= '_' . $this->query->getHash(); // format the number // is this the current tab? if ($this->request->getControllerName() == (string) $option["id"] && ($this->request->getParam('source') == (string) $option["source"] || (string) $option["source"] == '')) { // mark as current $option->addAttribute('current', "1"); } // create url based on the search terms only! $params = $query->extractSearchParams(); $params['controller'] = $controller_map->getUrlAlias((string) $option["id"]); $params['action'] = "results"; $params['source'] = (string) $option["source"]; $params['sort'] = $this->request->getParam('sort'); // results url $url = $this->request->url_for($params); $option->addAttribute('url', $url); // hits url $params['action'] = 'hits'; $url = $this->request->url_for($params); $option->addAttribute('url_hits', $url); // cached search hit count? foreach ($this->request->getAllSessionData() as $session_id => $session_value) { // does this value in the cache have the save id as our tab? $id = str_replace("_" . $query->getHash(), "", $session_id); if ($id == (string) $option["id"]) { // yup, so add it $option->addAttribute('hits', Parser::number_format($session_value)); } } } // header('Content-type: text/xml'); echo $search->asXML(); exit; $this->registry->setConfig('search', $search); } // links to remove facets foreach ($query->getLimits() as $limit) { $params = $this->currentParams(); $value = $limit->value; if ($limit->display != "") { $value = $limit->display; } // urlencode here necessary to support the urlencode above on 'key' urls $params = Parser::removeFromArray($params, urlencode($limit->param), $value); $limit->remove_url = $this->request->url_for($params); } }