Example #1
0
 /**
  * Search over data
  * 
  * @return string
  */
 public function search()
 {
     // determine configuration
     $dataset = $this->fetch('dataset', null, false, false, false);
     $parameters = $this->gatherParameters();
     $config = $this->tasks->loadDataset($dataset, $parameters);
     // short-circuit this if no query
     if (!trim($config['query'])) {
         return Parse::tagLoop($this->content, array(array('no_query' => true, '_query' => '')));
     }
     // do search
     $output = $this->tasks->lookUp($config['query'], $config);
     $total_found = count($output);
     // limit if we need to
     if ($config['limit'] || $config['offset']) {
         if ($config['limit'] && $config['paginate'] && !$config['offset']) {
             // pagination requested, isolate the appropriate page
             $count = count($output);
             $page = URL::getCurrentPaginationPage();
             // return the last page of results if $page is out of range
             if (Config::getFixOutOfRangePagination()) {
                 if ($config['page_limit'] && $page > $config['page_limit']) {
                     $page = $config['page_limit'];
                 } elseif ($config['limit'] * $page > $count) {
                     $page = ceil($count / $config['limit']);
                 } elseif ($page < 1) {
                     $page = 1;
                 }
             }
             $offset = ($page - 1) * $config['limit'];
             $output = array_slice($output, $offset, $config['limit']);
         } else {
             // just limit or offset
             $output = array_slice($output, $config['offset'], $config['limit']);
         }
     }
     // supplement with first, last, etc.
     $output = $this->tasks->supplement($output, array('total_found' => $total_found));
     return Parse::tagLoop($this->content, $output);
 }
Example #2
0
 /**
  * Grabs one page from a paginated set
  *
  * @param int  $page_size  Size of page to grab
  * @param int  $page  Page number to grab
  * @return void
  */
 public function isolatePage($page_size, $page)
 {
     $count = $this->count();
     // return the last page of results if $page is out of range
     if (Config::getFixOutOfRangePagination()) {
         if ($page_size * $page > $count) {
             $page = ceil($count / $page_size);
         } elseif ($page < 1) {
             $page = 1;
         }
     }
     $offset = ($page - 1) * $page_size;
     $this->limit($page_size, $offset);
 }