<?
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 = '&#8592; '; // Назад
    $this->gt = ' &#8594;'; // Вперед
}
/**
  *  вывод списка страниц 
  */
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.'&amp;p='.$i.'">'.$i.'</a> ';
            }
            
            if($this->page == 3)
            {
                $string_pages .= ' <a class="navigation" href="'.$this->link.'&amp;p=4">4</a> ';
            }
            
            $string_pages .= '...';
            
            for($i = $this->last_three_page;$i<=$this->all_pages;$i++)
            {
                $string_pages .= $this->page == $i ? ' '.$i.' ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;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 ? ' '.$i.' ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.$i.'">'.$i.'</a> ';
            }
            
            // и последние 3 ссылки, через троеточие
            $string_pages .= '...';
            
            for($i = $this->last_three_page;$i<=$this->all_pages;$i++)
            {
                $string_pages .= $this->page == $i ? ' '.$i.' ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;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 ? ' '.$i.' ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.$i.'">'.$i.'</a> ';
            }
            $string_pages .= '...';
            
            // одна ссылка слева/ неактивная посредине / ссылка справа
            $string_pages .= ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.($this->page - 1).'">'.($this->page - 1).'</a> ';
            $string_pages .= ' '.$this->page.' ';
            $string_pages .= ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;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 ? ' '.$i.' ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.$i.'">'.$i.'</a> ';
            }
        }
        elseif(($this->page + 1) >= ($this->last_three_page))
        {
            for($i=1;$i<=3;$i++)
            {
                
                $string_pages .= $this->page == $i ? ' '.$i.' ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.$i.'">'.$i.'</a> ';
            }
                        
            $string_pages .= '...';
            
            for($i = ($this->last_three_page - 3);$i<=$this->all_pages;$i++)
            {
                $string_pages .= $this->page == $i ? ' '.$i.' ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;p='.$i.'">'.$i.'</a> ';
            }
        }
    }
    else
    {
        // вывод всех ссылок, если ссылок <= 10
        for($i=1;$i<=$this->all_pages;$i++)
        {
            $string_pages .= $this->page == $i ? ' '.$i.' ' : ' <a class="navigation" href="'.$this->link.''.$navigat.'&amp;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.'&amp;p='.($this->page+1).'">Вперед'.$this->gt.'</a>';
    }
    elseif($this->page >= $this->all_pages)
    {
        $this->this_links = '<a href="'.$this->link.'&amp;p='.($this->page-1).'">'.$this->lt.'Назад</a>';
    }
    else
    {
        $this->this_links = '<a href="'.$this->link.'&amp;p='.($this->page-1).'">'.$this->lt.'Назад</a>'.$razdelitel.'<a href="'.$this->link.'&amp;p='.($this->page+1).'">Вперед'.$this->gt.'</a>';
    }
    }
    else
    {
        if($this->page <= 1)
    {
        $this->this_links = '<a href="'.$this->link.'&amp;p='.($this->page+1).'">Назад'.$this->gt.'</a>';
    }
    elseif($this->page >= $this->all_pages)
    {
        $this->this_links = '<a href="'.$this->link.'&amp;p='.($this->page-1).'">'.$this->lt.'Вперед</a>';
    }
    else
    {
        $this->this_links = '<a href="'.$this->link.'&amp;p='.($this->page-1).'">'.$this->lt.'Вперед</a>'.$razdelitel.'<a href="'.$this->link.'&amp;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." ;";
}

}
?>