[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Пагинация с разбивкой троеточием
sashgera
Здравствуйте

В этой теме http://joomlaforum.ru/index.php/topic,6593....html#msg473487 было предложено решение, как скрыть часть ссылок в пагинации троеточием (Joomla 1.5)

В переменных функции pagination_list_render($list) можно указать:
- максимальное количество позиций ленты
- количество позиций в начале ленты и в конце
если страниц больше чем позиций в ленте - страницы разбиваются троеточием
тоесть будет выглядеть примерно так:
1 2 ... 9 [10] 11 ... 45 46

Но мне нужно чтобы была возможность изменять количество позиций и в середине ленты (слева и справа от активной страницы).
Для этого я добавил переменную (4 строка кода)

$numCenter = 4; // количество позиций страниц в середине ленты

также добавил на 32 строке:

for($j=$i-$numCenter; $j<$i; $j++){ $html .= $list['pages'][$j]['data']; } // количество позиций страниц в середине ленты

и на 41 строке:

for($j=$i-$numCenter; $j<$i; $j++){ $html .= $list['pages'][$j+$numCenter+1]['data']; } // количество позиций страниц в середине ленты

Теперь в пагинации можно настроить нужное количество страниц в середине ленты, указав нужное количество в переменной $numCenter.
Но что-то сделал не так и на 2-5 страницах, а также на предпоследней появляются дубли.
Вот пример: http://www.glassbus.ru/test/gb.html

В PHP не силен, поэтому прошу помощи.

function pagination_list_render($list)
{
$numlr = 1; // количество позиций страниц в начале ленты и в конце
$numCenter = 4; // количество позиций страниц в середине ленты
$numpos = 6; // количество позиций ленты вообще
$lang =& JFactory::getLanguage();
$html = '<ul class="paginationNew">';
// Предыдущая
if($lang->isRTL()){ $list['pages'] = array_reverse( $list['pages'] ); }
if ( strpos( $list['start']['data'], '<a' ) !== false ) {
$begin = strpos( $list['previous']['data'], 'href="' );
$begin += strlen( 'href="' );
$end = strpos( $list['previous']['data'], '"', $begin );
$link = substr( $list['previous']['data'], $begin, $end - $begin );
$html .= '<li><a href="'.$link.'" title="'.$lang->_('Prev').'" class="pageLink" id="prev_text"> </a></li>';
} else {
$html .= '<li><span class="pageLinkDisable" id="prev_text"> </span></li>';
}

// ссылки страниц
if(count($list['pages'])>$numpos) { // если страниц больше чем позиций в ленте - разбиваем троеточием
for($i=1; $i<=count($list['pages']); $i++){
if(!$list['pages'][$i]['active']) {
if($i > $numlr){
for($j=1; $j<=$numlr; $j++){ $html .= $list['pages'][$j]['data']; }
}
else{
for($j=1; $j<$i; $j++){ $html .= $list['pages'][$j]['data']; }
}

if(($numlr+1) < ($i-1)){ $html .= '<li>...</li>'; }
if((count($list['pages']) - $numlr) <= $i){
for($j=(count($list['pages'])-$numlr-2); $j<$i; $j++){ $html .= $list['pages'][$j]['data']; }
}
else{
// if($i > ($numlr+1)){ $html .= $list['pages'][$i-1]['data']; }
for($j=$i-$numCenter; $j<$i; $j++){ $html .= $list['pages'][$j]['data']; } // количество позиций страниц в середине ленты
}
$html .= '<li><span class="pageLinkActive">';
$html .= $list['pages'][$i]['data'];
$html .= '</span></li>';
if(($numlr+1) >= $i){
for($j=($i+1); $j<=($numlr+3); $j++){ $html .= $list['pages'][$j]['data']; }
}
else{
// if($i < (count($list['pages'])-$numlr)){ $html .= $list['pages'][$i+1]['data']; }
for($j=$i-$numCenter; $j<$i; $j++){ $html .= $list['pages'][$j+$numCenter+1]['data']; } // количество позиций страниц в середине ленты
}
if((count($list['pages']) - $numlr) > ($i+1)){ $html .= '<li>...</li>'; }
if($i <= (count($list['pages'])-$numlr)){
for($j=(count($list['pages'])-$numlr+1); $j<=count($list['pages']); $j++){ $html .= $list['pages'][$j]['data']; }
}
else{
for($j=$i+1; $j<=count($list['pages']); $j++){ $html .= $list['pages'][$j]['data']; }
}
}
}
}
else {
foreach( $list['pages'] as $page ){
if(!$page['active']) {
$html .= '<li><span class="pageLinkActive">';
}
$html .= $page['data'];
if(!$page['active']) {
$html .= '</span></li>';
}
}
}

// следующая
if ( strpos( $list['end']['data'], '<a' ) !== false ) {
$begin = strpos( $list['next']['data'], 'href="' );
$begin += strlen( 'href="' );
$end = strpos( $list['next']['data'], '"', $begin );
$link = substr( $list['next']['data'], $begin, $end - $begin );
$html .= '<li><a href="'.$link.'" title="'.$lang->_('Next').'" class="pageLink" id="next_text"> </a></li>';
} else {
$html .= '<li><span class="pageLinkDisable" id="next_text"> </span></li>';
}

$html .= '</ul>';
return $html;
}

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.