URL );
if( $return == "url" ) return $link;
if( $title ) $page = $title;
return "{$page} ";
}
// Генерирует лист ссылок
function LPage( $start, $end ){
while( $start < $end )
{
if( $start == $this->Page )
$navigation .= "".$start."\n";
else
$navigation .= $this->CNPage( $start );
$start++;
}
return $navigation;
}
// Формирование навигации происходит в этой функции
function BuildNavigation(){
global $tpl;
// Если ноль страниц, то навигацию не формируем
if( $this->Total < 2 ) return;
// Отчищаем старую сгенерированную навигацию
//$tpl->result[ $this->Compile ] = "";
// Чтобы не было недоразумений
if( $this->Page < 1 ) $this->Page = 1;
if( $this->Page > $this->Total ) $this->Page = $this->Total;
$first = $this->Page - 4; // Сколько страниц выводится слева от активной
$last = $this->Page + 5; // Сколько страниц выводится справа от активной
$PPage = $this->CNPage( $this->Page - 1 , "", "url" ); // Предыдущая страница
$NPage = $this->CNPage( $this->Page + 1 , "", "url" ); // Следующая страница
$PageMin = 8; // Минимально значение для начала пагинации
$PageMax = $this->Total - 8; // Максимально значение для начала пагинации
$divider = "... "; // На что заменяем пробелы
// Подгрузка шаблона
$tpl->load_template( $this->Tpl );
// Предыдущая страница
if( $this->Page > 1 )
$tpl->set_block( "'\[prev-link\](.*?)\[/prev-link\]'si", "\\1" );
else
$tpl->set_block( "'\[prev-link\](.*?)\[/prev-link\]'si", "\\1" );
// Слудеющая страница
if( $this->Page < $this->Total )
$tpl->set_block( "'\[next-link\](.*?)\[/next-link\]'si", "\\1" );
else
$tpl->set_block( "'\[next-link\](.*?)\[/next-link\]'si", "\\1" );
// Если страниц меньше чем 10
if( $this->Total < 10 )
{
$navigation = $this->LPage( 1, $this->Total + 1 );
$navigation = $navigation;
}
else
{
// По середине
if( ( $this->Page >= $PageMin - 2 ) and ( $this->Page <= $PageMax + 2 ) )
{
$navigation = $this->LPage( $first, $last );
$navigation = $this->CNPage( "1" ).$divider.$navigation.$divider.$this->CNPage( $this->Total );
}
// Если страница не больше 8 - ой
elseif( $this->Page < $PageMin )
{
$navigation = $this->LPage( 1, $PageMin + 1 );
$navigation = $navigation.$divider.$this->CNPage( $this->Total );
}
// Если страница больше пред 8 - ми последней
elseif( $this->Page > $PageMax )
{
$navigation = $this->LPage( $PageMax, $this->Total + 1 );
$navigation = $this->CNPage( "1" ).$divider.$navigation;
}
}
// Назначение тегов для шаблона
$tpl->set( "{pages}", $navigation );
$tpl->set( "{page}", $this->Page );
$tpl->set( "{count_page}", $this->Total );
if( $this->Total < 2 )
{
$tpl->set_block( "'\[page\](.*?)\[/page\]'si", "" );
}
else
{
$tpl->set( "[page]", "" );
$tpl->set( "[/page]", "" );
}
// Формирование шаблона
$tpl->compile( $this->Compile );
// Очистка класса шаблонов от навигации
$tpl->clear();
// Очистка навигации
unset( $navigation );
}
}
?>