【发布时间】:2014-06-17 13:19:10
【问题描述】:
我正在使用引导分页和 PHP/mysql 组合方法来显示我的结果(例如,results.php?results=1 每个页面)。这工作正常,但实际上在我的页面底部显示分页 div,即哪个是活动的,您是否可以单击以下或前面的项目(如果这些页面上确实有结果)
所以我已经为几乎所有我能想到的会影响任何事情的组合做了一个具体的案例,但它肯定不是有效的。任何人都可以提出更好的方法吗?有些情况会很明显,比如如果我在第一页,我不想在分页中显示第 0 页和 -1,其他情况不太明显,比如我在第 3 页,并且有没有更多的页面,我希望第 3 页在中间,因为显示了 5 个数字,但是您应该无法点击 4 和 5。
我正在使用显示here 的插件的精确副本,除了我在第一页/最后一页之外添加了左右增加/减少一个。
<div id="pagination" style="width: 340px; margin-left: auto; margin-right: auto;">
<? if ($results == 1) { ?>
<ul class="pagination">
<li class="disabled"><a href="#"> <i class="fa fa-lg fa-angle-double-left"></i> </a></li>
<li class="disabled"><a href="#"> <i class="fa fa-lg fa-angle-left"></i> </a></li>
<li class="active"><a href="#"><? echo $results; ?> <span class="sr-only">(current)</span></a></li>
<li <?if ($num_rows < $num_res) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"><? echo $results + 1; ?></a></li>
<li <?if ($num_rows < ($num_res * 2)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 2); ?>"><? echo $results + 2; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 3); ?>"><? echo $results + 3; ?></a></li>
<li <?if ($num_rows < ($num_res * 4)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 4); ?>"><? echo $results + 4; ?></a></li>
<li <?if ($num_rows < ($num_res)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"> <i class="fa fa-lg fa-angle-right"></i> </a></li>
<li <?if ($num_rows < ($num_res)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($last_page); ?>"> <i class="fa fa-lg fa-angle-double-right"></i> </a></li>
</ul>
<? } ?>
<? if ($results == 2) { ?>
<ul class="pagination">
<li><a href="<? echo $url."&results=".(1); ?>"> <i class="fa fa-lg fa-angle-double-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"> <i class="fa fa-lg fa-angle-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"><? echo $results - 1; ?></a></li>
<li class="active"><a href="<? echo $url."&results=".($results); ?>"><? echo $results; ?> <span class="sr-only">(current)</span></a></li>
<li <?if ($num_rows < ($num_res * 2)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"><? echo $results + 1; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 2); ?>"><? echo $results + 2; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 3); ?>"><? echo $results + 3; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"> <i class="fa fa-lg fa-angle-right"></i> </a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($last_page); ?>"> <i class="fa fa-lg fa-angle-double-right"></i> </a></li>
</ul>
<? } ?>
<? if (($results == 3) && (($last_page == 3))) { ?>
<ul class="pagination">
<li><a href="<? echo $url."&results=".(1); ?>"> <i class="fa fa-lg fa-angle-double-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"> <i class="fa fa-lg fa-angle-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 2); ?>"><? echo $results - 2; ?> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"><? echo $results - 1; ?></a></li>
<li class="active"><a href="<? echo $url."&results=".($results); ?>"><? echo $results; ?><span class="sr-only">(current)</span></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"><? echo $results + 1; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 2); ?>"><? echo $results + 2; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"> <i class="fa fa-lg fa-angle-right"></i> </a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($last_page); ?>"> <i class="fa fa-lg fa-angle-double-right"></i> </a></li>
</ul>
<? } ?>
<? if (($results > 2) && ($results < ($last_page - 1))) { ?>
<ul class="pagination">
<li><a href="<? echo $url."&results=".(1); ?>"> <i class="fa fa-lg fa-angle-double-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"> <i class="fa fa-lg fa-angle-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 2); ?>"><? echo $results - 2; ?> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"><? echo $results - 1; ?></a></li>
<li class="active"><a href="<? echo $url."&results=".($results); ?>"><? echo $results; ?><span class="sr-only">(current)</span></a></li>
<li><a href="<? echo $url."&results=".($results + 1); ?>"><? echo $results + 1; ?></a></li>
<li><a href="<? echo $url."&results=".($results + 2); ?>"><? echo $results + 2; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"> <i class="fa fa-lg fa-angle-right"></i> </a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($last_page); ?>"> <i class="fa fa-lg fa-angle-double-right"></i> </a></li>
</ul>
<? } ?>
<? if (($results > 2) && ($results == ($last_page - 1))) { ?>
<ul class="pagination">
<li><a href="<? echo $url."&results=".(1); ?>"> <i class="fa fa-lg fa-angle-double-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"> <i class="fa fa-lg fa-angle-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 3); ?>"><? echo $results - 3; ?></a></li>
<li><a href="<? echo $url."&results=".($results - 2); ?>"><? echo $results - 2; ?></a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"><? echo $results - 1; ?></a></li>
<li class="active"><a href="<? echo $url."&results=".($results ); ?>"><? echo $results ?><span class="sr-only">(current)</span></a></li>
<li><a href="<? echo $url."&results=".($results + 1); ?>"><? echo $results + 1; ?></a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($results + 1); ?>"> <i class="fa fa-lg fa-angle-right"></i> </a></li>
<li <?if ($num_rows < ($num_res * 3)) { echo "class=\"disabled\""; } ?>><a href="<? echo $url."&results=".($last_page); ?>"> <i class="fa fa-lg fa-angle-double-right"></i> </a></li>
</ul>
<? } ?>
<? if (($results > 2) && ($results == $last_page) && ($results != 3)){ ?>
<ul class="pagination">
<li><a href="<? echo $url."&results=".(1); ?>"> <i class="fa fa-lg fa-angle-double-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"> <i class="fa fa-lg fa-angle-left"></i> </a></li>
<li><a href="<? echo $url."&results=".($results - 4); ?>"><? echo $results - 4; ?> </a></li>
<li><a href="<? echo $url."&results=".($results - 3); ?>"><? echo $results - 3; ?></a></li>
<li><a href="<? echo $url."&results=".($results - 2); ?>"><? echo $results - 2; ?></a></li>
<li><a href="<? echo $url."&results=".($results - 1); ?>"><? echo $results - 1; ?></a></li>
<li class="active"><a href="<? echo $url."&results=".($results ); ?>"><? echo $results ?><span class="sr-only">(current)</span></a></li>
<li class="disabled"><a href="#"> <i class="fa fa-lg fa-angle-right"></i> </a></li>
<li class="disabled"><a href="#"> <i class="fa fa-lg fa-angle-double-right"></i> </a></li>
</ul>
<? } ?>
</div>
如果没有人愿意在第一部分提供帮助,我理解,就我所知,它可以正常工作。
但我也想知道是否有办法在我的class="disabled" 上删除href?还是我只需要对每个人都添加一个 if 语句?谢谢。
编辑:基于@Scopey 的建议。我更改了一些我认为合适的东西,以及几个变量名。
$numberOfPages = ceil($num_rows / $num_res);
$numberOfPages = (int)$numberOfPages;
$url = explode('&', $_SERVER['REQUEST_URI']);
function myFilter($string) {
return strpos($string, 'results=') === false;
}
$url = array_filter($url, 'myFilter');
$url = implode('&', $url);
?>
<ul class="pagination">
<li<?php if($results === $numberOfPages): ?> class="disabled"<?php endif; ?>><a href="<?php
if($results !== $numberOfPages){
echo $url.'&results=' . 1;
} else { echo '#'; }
?>"> <i class="fa fa-lg fa-angle-double-left"></i> </a></li>
<li<?php if($results === 1): ?> class="disabled"<?php endif; ?>><a href="<?php
if($results !== 1){
echo $url.'&results=' . ($results - 1);
} else { echo '#'; }
?>"> <i class="fa fa-lg fa-angle-left"></i> </a></li>
<?php
// Print the pagination...
// Minimum of 5 pages in the pagination, even if there aren't 5 pages...
$pageCount = ($numberOfPages < 5) ? 5 : $numberOfPages;
// Loop through from page 1 until the last page ($pageCount)
for($i = 1; $i <= $pageCount; $i++)
{
// Echo out just the beginning of the <li> tag as we don't yet
// know if this needs to be disabled...
echo '<li';
// Added to show if current page is active
if($i === $results) {
echo ' class="active"';
}
// Check if:
// - This current page is greater than the amount of pages of
// results we have
// - OR, this is the currently selected page
if($i > $numberOfPages || $results === $i)
{
// <li> tag needs the disabled class....
echo ' class="disabled"';
}
// Finish the <li> tag and start generating the link
echo '><a href="';
// Opposite logic from above... Only if this is a page we know about
// AND this is not the current page.
if($i < $numberOfPages && $results !== $i)
{
// The link will be your page, with the get param, and the
// current page number we're printing
echo $url.'&results=' . $i;
}
else
{
// Otherwise just a # (no link)
echo '#';
}
// Finish this page... Print the page number ($i)
echo '">' . $i . '</a></li>';
}
?>
<li<?php if($results === $numberOfPages): ?> class="disabled"<?php endif; ?>><a href="<?php
if($results !== $numberOfPages){
echo $url.'&results=' . ($results + 1);
} else { echo '#'; }
?>"> <i class="fa fa-lg fa-angle-right"></i> </a></li>
<li<?php if($results === $numberOfPages): ?> class="disabled"<?php endif; ?>><a href="<?php
if($results !== $numberOfPages){
echo $url.'&results=' . $numberOfPages;
} else { echo '#'; }
?>"> <i class="fa fa-lg fa-angle-double-right"></i> </a></li>
<?php
@Scobey,这很有效,符合预期,与我原来的帖子一样,除了几件事。在我的示例中,我能够在 .例如,3 | 4 | 5 >>,这就是为什么我有这么多不同的语句 +1 和 -1、+2、-2 等。
其次,我的意图是始终显示 5 个页面选项,而不仅仅是至少 5 个。所以如果我在第 6 页,我只会看到 6 | 7 | 8 >>,而不是 1-8。可能没有必要这样做,这很好。但是,我不想在分页中有超过 50 个不同的页码。
【问题讨论】:
-
怎么会有人写出那样的代码呢?或阅读。
-
这就是我在这里寻求帮助的原因。就阅读而言,它只是完全相同的 UL 中的 6 个,结果不同。
-
好吧,你不需要几乎相同的块,一个函数\循环会将其减少到总共 6 行
-
我知道它真的是拼凑起来的,因为我有点从头开始,并根据需要不断添加,但我不知道我怎么可能把它减少到 6 行。而且我不想争论,正如你从我的声誉中看到的那样,我不是专家。使用循环,我在这里看到太多可能的变量,改变页码,启用/禁用按钮。我试图让当前页面位于中间,除非您在第一页或第二页,或者倒数第二页或最后一页。如果我的分页只显示 3 个数字会更容易。
-
您真的总是想要 5 个结果吗?所以没有超过 5 个或正好 1 个结果的案例?或者您是否选择了五个,因为它在引导程序的示例中?在大多数分页用例中,您只显示可用的页面。
标签: php twitter-bootstrap pagination