Помогите разобраться с кодом

M
На сайте с 03.06.2012
Offline
73
518

есть код:

 function writePagesLinks($prefix='') {

$txt = '';

$displayed_pages = 10;
$total_pages = $this->limit ? ceil( $this->total / $this->limit ) : 0;
$this_page = $this->limit ? ceil( ($this->limitstart+1) / $this->limit ) : 1;
$start_loop = (floor(($this_page-1)/$displayed_pages))*$displayed_pages+1;
if ($start_loop + $displayed_pages - 1 < $total_pages) {
$stop_loop = $start_loop + $displayed_pages - 2;
} else {
$stop_loop = $total_pages-1;
}

if (!defined( '_PN_LT' ) || !defined( '_PN_RT' ) ) {
DEFINE('_PN_LT','&lt;');
DEFINE('_PN_RT','&gt;');
}
DEFINE('_PN_START','Первая');
DEFINE('_PN_PREVIOUS','Предыдущая');
DEFINE('_PN_NEXT','Следующая');
DEFINE('_PN_END','Последняя');

$pnSpace = '';
if (_PN_LT || _PN_RT) $pnSpace = "&nbsp;";
$txt .= '<span class="pagenav">';
if ($this_page > 1) {
$page = ($this_page - 2) * $this->limit;

$txt .= '<a href="#bot" onclick="'.$prefix.'loadProduct('.$page.')" title="'. _PN_PREVIOUS .'">'. _PN_LT . $pnSpace . _PN_PREVIOUS .'</a> ';
} else {

$txt .= '<span>'. _PN_LT . $pnSpace . _PN_PREVIOUS .'</span> ';
}

for ($i=$start_loop; $i <= $stop_loop; $i++) {
$page = ($i - 1) * $this->limit;
if ($i == $this_page) {
$txt .= '<span>'. $i .'</span> ';
} else {
$txt .= '<a href="#bot" onclick="'.$prefix.'loadProduct('.$page.')" ><strong>'. $i .'</strong></a> ';
}
}

if ($this_page < $total_pages) {
$page = $this_page * $this->limit;
$end_page = ($total_pages-1) * $this->limit;
$txt .= '<a href="#bot" onclick="'.$prefix.'loadProduct('.$page.')" title="'. _PN_NEXT .'">'. _PN_NEXT . $pnSpace . _PN_RT .'</a> ';

} else {
$txt .= '<span>'. _PN_NEXT . $pnSpace . _PN_RT .'</span> ';

}
$txt .= '</span>';
return $txt;
}
}

он делает пагинацию при поиске, но почему то последняя иногда и две страницы получаются пустыми, подскажите в чем причина, спасибо

M
На сайте с 03.06.2012
Offline
73
#1

итак, опишу более подробно свою проблему :).

Есть компонент поиска для VirtueMart 1.1.4 называется com_vm_ext_search_free можно взять на сайте http://joomlaforum.ru/index.php/topic,115793.new.html#new. Я установил его добавил поля по наименованию и количеству на складе. Но выявилась проблема когда формируется результат, то показывает что в поиске 9 страниц. но на самом деле их 8. а последняя показывает что в результате нет записей для показа. В компоненте нашел код который отвечает за пагинацию (он выше), но если честно в коде php слабо разбираюсь, поэтому прошу вашей помощи. Если что нужно еще скинуть. то скажите и я скину. Спасибо всем за ответы :)

DP
На сайте с 24.04.2012
Offline
16
#2

Вообще логика у подсчетов видимо хромает. Если задать limit 10 и total 20, то $total_pages получит значение 2(как и нужно), $start_loop 1(опять правильно), а $stop_loop тоже 1, что неверно. В результате цикл for выведет только одну страницу, вместо двух. При каких значениях limit и total у вас лишние страницы?

M
На сайте с 03.06.2012
Offline
73
#3
developer_php:
Вообще логика у подсчетов видимо хромает. Если задать limit 10 и total 20, то $total_pages получит значение 2(как и нужно), $start_loop 1(опять правильно), а $stop_loop тоже 1, что неверно. В результате цикл for выведет только одну страницу, вместо двух. При каких значениях limit и total у вас лишние страницы?

Не совсем понятно когда именно код выдаст две страницы вместо одной, иногда значение тотал может быть 3, а может и 7, я уже начинаю грешить в сторону БД, потому что на первой странице показывает что нашел 94 результата, а на последней 72, хз почему

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий