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('&', '&', $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; }