Exemplo n.º 1
0
 public function getHtml()
 {
     //Build pagination data and dysplay
     /**
      * @var $registry Registry
      */
     $registry = $this->data['registry'];
     $html = new AHtml($registry);
     $s = $this->sts;
     //some more defaults
     if ($s['page'] < 1 || !is_numeric($s['page'])) {
         $s['page'] = 1;
     }
     if (!$s['limit'] || !is_numeric($s['limit'])) {
         $s['limit'] = 10;
     }
     if (!$s['limits']) {
         $s['limits'][0] = $x = $s['split'] ? $s['split'] : $registry->get('config')->get('config_catalog_limit');
         while ($x <= 50) {
             $s['limits'][] = $x;
             $x += 10;
         }
     }
     $s['url'] = str_replace('{limit}', $s['limit'], $s['url']);
     $s['total_pages'] = ceil($s['total'] / $s['limit']);
     if ($s['page'] > 1) {
         //not first page
         $this->view->assign('first_url', str_replace('{page}', 1, $s['url']));
         $this->view->assign('prev_url', str_replace('{page}', $s['page'] - 1, $s['url']));
     }
     if ($s['total_pages'] > 1) {
         if ($s['total_pages'] <= $s['num_links']) {
             $s['start'] = 1;
             $s['end'] = $s['total_pages'];
         } else {
             $s['start'] = $s['page'] - floor($s['num_links'] / 2);
             $s['end'] = $s['page'] + floor($s['num_links'] / 2);
             if ($s['start'] < 1) {
                 $s['end'] += abs($s['start']) + 1;
                 $s['start'] = 1;
             }
             if ($s['end'] > $s['total_pages']) {
                 $s['start'] -= $s['end'] - $s['total_pages'];
                 $s['end'] = $s['total_pages'];
             }
         }
     } else {
         $s['start'] = $s['end'] = 1;
     }
     if ($s['page'] < $s['total_pages']) {
         $this->view->assign('next_url', str_replace('{page}', $s['page'] + 1, $s['url']));
         $this->view->assign('last_url', str_replace('{page}', $s['total_pages'], $s['url']));
     }
     $replace = array($s['total'] ? ($s['page'] - 1) * $s['limit'] + 1 : 0, ($s['page'] - 1) * $s['limit'] > $s['total'] - $s['limit'] ? $s['total'] : ($s['page'] - 1) * $s['limit'] + $s['limit'], $s['total'], $s['total_pages']);
     if (!in_array($s['limit'], $s['limits'])) {
         $s['limits'][] = $s['limit'];
         sort($s['limits']);
     }
     $options = array();
     foreach ($s['limits'] as $item) {
         $options[$item] = $item;
     }
     $limit_select = $html->buildSelectbox(array('name' => 'limit', 'value' => $s['limit'], 'options' => $options, 'style' => 'input-mini', 'attr' => ' onchange="location=\'' . str_replace('{page}', 1, $s['url']) . '&limit=\'+this.value;"'));
     $limit_select = str_replace('&', '&amp;', $limit_select);
     $this->view->assign('limit_select', $limit_select);
     $find = array('{start}', '{end}', '{total}', '{pages}', '{limit}');
     $s['text'] = str_replace($find, $replace, $s['text']);
     $this->view->batchAssign($s);
     $return = $this->view->fetch('form/pagination.tpl');
     return $return;
 }