Просмотр файла system/inc/classes/navigation.class.php
- <?
- class Navigation
- {
- public function __construct($input,$on_page,$print_str = false, $order = 'asc',$link = '?')
- {
- if(is_array($input))
- {
- $this->rfile=array_values($input);
- $this->all_files = count($this->rfile);
- $this->rfile = $order == 'asc' ? $this->rfile : array_reverse($this->rfile);
- $this->type_result = 'Файлов';
- }
- else
- {
- $this->all_files = $input;
- $this->type_result = 'Записей';
- }
- $this->link = $link;
- $this->on_page = $on_page < 1 ? 1 : $on_page;
- $this->str = $print_str === true ? ' ' : '';
- $this->order = $order;
- // всего страниц
- $this->all_pages = ceil($this->all_files / $this->on_page);
- $this->page = !isset($_GET['p']) || $_GET['p'] <= 0 ? 1 : abs(intval($_GET['p']));
- $this->page = $this->page > $this->all_pages ? $this->all_pages : $this->page;
- $this->page = isset($_GET['last']) ? $this->all_pages : $this->page;
- $this->start = ($this->page * $this->on_page) - 1;
- $this->start = $this->start > $this->all_files ? $this->all_files : $this->start;
- // начальное число массива
- $this->end = ($this->page * $this->on_page)- $this->on_page;
- // последние 3 страницы
- $this->last_three_page = $this->all_pages - 2;
- // "стрелочки" возле ссылок Вперед/Назад
- $this->lt = '← '; // Назад
- $this->gt = ' →'; // Вперед
- }
- /**
- * вывод списка страниц
- */
- public function pagination($navigat = "") {
- $string_pages = $this->str;
- if($this->all_pages > 10)
- {
- if($this->page <= 3)
- {
- for($i=1;$i<=3;$i++)
- {
- $string_pages .= $this->page == $i ? ' '.$i.' ' : '<a class="navigation" href="'.$this->link.''.$navigat.'&p='.$i.'">'.$i.'</a> ';
- }
- if($this->page == 3)
- {
- $string_pages .= ' <a class="navigation" href="'.$this->link.'&p=4">4</a> ';
- }
- $string_pages .= '...';
- for($i = $this->last_three_page;$i<=$this->all_pages;$i++)
- {
- $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&p='.$i.'">'.$i.'</a> ';
- }
- }
- elseif($this->page < 6 && $this->page <= $this->last_three_page)
- {
- // выводим первые три ссылки
- for($i=1;$i<=6;$i++)
- {
- $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&p='.$i.'">'.$i.'</a> ';
- }
- // и последние 3 ссылки, через троеточие
- $string_pages .= '...';
- for($i = $this->last_three_page;$i<=$this->all_pages;$i++)
- {
- $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&p='.$i.'">'.$i.'</a> ';
- }
- }
- // если выбранная страница >= 6
- elseif($this->page >= 6 && $this->page <= ($this->last_three_page - 2))
- {
- // выводим первые три ссылки
- for($i=1;$i<=3;$i++)
- {
- $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&p='.$i.'">'.$i.'</a> ';
- }
- $string_pages .= '...';
- // одна ссылка слева/ неактивная посредине / ссылка справа
- $string_pages .= ' <a class="navigation" href="'.$this->link.''.$navigat.'&p='.($this->page - 1).'">'.($this->page - 1).'</a> ';
- $string_pages .= ' '.$this->page.' ';
- $string_pages .= ' <a class="navigation" href="'.$this->link.''.$navigat.'&p='.($this->page + 1).'">'.($this->page + 1).'</a> ';
- // и последние 3 ссылки, через троеточие
- $string_pages .= '...';
- for($i = ($this->last_three_page);$i<=$this->all_pages;$i++)
- {
- $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&p='.$i.'">'.$i.'</a> ';
- }
- }
- elseif(($this->page + 1) >= ($this->last_three_page))
- {
- for($i=1;$i<=3;$i++)
- {
- $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&p='.$i.'">'.$i.'</a> ';
- }
- $string_pages .= '...';
- for($i = ($this->last_three_page - 3);$i<=$this->all_pages;$i++)
- {
- $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&p='.$i.'">'.$i.'</a> ';
- }
- }
- }
- else
- {
- // вывод всех ссылок, если ссылок <= 10
- for($i=1;$i<=$this->all_pages;$i++)
- {
- $string_pages .= $this->page == $i ? ' <span class="navigation">'.$i.'</span> ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&p='.$i.'">'.$i.'</a> ';
- }
- }
- return $string_pages;
- }
- /*
- * результирующий массив файлов
- */
- public function result_files() {
- $this->arr = array();
- for($i=$this->end;$i<=$this->start;$i++)
- {
- if(isset($this->rfile[$i]))
- {
- $this->arr[$i] = $this->rfile[$i];
- }
- }
- return $this->arr;
- }
- /*
- * выводим сколько всего файлов
- */
- public function show_info($vsego = false) {
- $res = $vsego != false ? $vsego : $this->type_result;
- return $res.': '.$this->all_files;
- }
- /*
- * функция вывода линков вида - Назад | Вперед
- */
- public function back_forward_links($razdelitel = ' | ' , $poradok = true) {
- if($poradok === true)
- {
- if($this->page <= 1)
- {
- $this->this_links = '<a href="'.$this->link.'&p='.($this->page+1).'">Вперед'.$this->gt.'</a>';
- }
- elseif($this->page >= $this->all_pages)
- {
- $this->this_links = '<a href="'.$this->link.'&p='.($this->page-1).'">'.$this->lt.'Назад</a>';
- }
- else
- {
- $this->this_links = '<a href="'.$this->link.'&p='.($this->page-1).'">'.$this->lt.'Назад</a>'.$razdelitel.'<a href="'.$this->link.'&p='.($this->page+1).'">Вперед'.$this->gt.'</a>';
- }
- }
- else
- {
- if($this->page <= 1)
- {
- $this->this_links = '<a href="'.$this->link.'&p='.($this->page+1).'">Назад'.$this->gt.'</a>';
- }
- elseif($this->page >= $this->all_pages)
- {
- $this->this_links = '<a href="'.$this->link.'&p='.($this->page-1).'">'.$this->lt.'Вперед</a>';
- }
- else
- {
- $this->this_links = '<a href="'.$this->link.'&p='.($this->page-1).'">'.$this->lt.'Вперед</a>'.$razdelitel.'<a href="'.$this->link.'&p='.($this->page+1).'">Назад'.$this->gt.'</a>';
- }
- }
- return $this->this_links;
- }
- /*
- * Лимит выводящих записей
- */
- function limit() {
- return 'limit '.(($this->page*$this->on_page)-$this->on_page).' ,'.$this->on_page." ;";
- }
- }
- ?>