首先,我处于绝望状态需要帮助。请尽快我会尽快开始赏金。
我有一个非常大的网站(社交网络)MANY PAGES,我正在进行一次完整的重写,以便在2年前做得更好。我决定更改的一件事是我网站上的网址,有这样的 http://example.com/?p=page-identifier-name ,有时 http://example.com/?p=page-identifier-name&page=2&user=343433 你得到了多点URL中的项目,我现在切换到使用mod_rewrite,我实际上已经完成了,我已将整个站点更改为使用它但我有1个大问题,
我的分页功能,我喜欢它,它使得非常好的分页像这个prev 1 2 - 34 35 36 37 - 189 190 next或者类似并且工作得很好但是现在我已经切换到使用mod-rewrite,显然我的URL现在不同了,这打破了我的寻呼机,我已经尝试了一些没有运气的事情让它再次正常工作,这就是为什么我已经为下面的分页提供了完整的代码,所以如果你关心帮助我你可以轻易放弃它进入一个页面,看看它是如何工作的。
分页代码目前在$_GET
的网址中查找所有密钥和值,然后基本将其全部显示,因为有些网页在我的网站上有更多其他网页,然后重新构建正确的网址正确的页码,并在我的寻呼机的屏幕上吐出。那么 www.example.com/?p=mail.inbox 之类的内容现在是 www.example.com/mail/inbox ,如果页面上有足够的项目它将显示为 www.example.com/?p=mail.inbox&page=12 现在 www.example.com/?mail/inbox/page/12 另一个页面可能有更多,只有p=page
显示和page=page
数字一些页面也有user_id的排序和只是差异的东西,现在我不介意有些东西只是附加到漂亮的网址,但东西喜欢页码我想展示我希望它如何显示,我有所有mod_rewrite和正则表达式工作我只需要帮助,使我的寻呼机代码生成正确的链接。由于所有页面都是通过 index.php 文件处理的,因此显示的页面永远不会比根文件夹更深,但是如果我能欺骗它认为它是有一个漂亮的网址那么它会很好这使它看起来像是在一个不同的文件夹中。 example.com/mail/inbox实际上是在根级别索引中,而不是2个文件夹深度,尝试使用类似
$selfurl = $_SERVER["REQUEST_URI"].'/page/'. $pagenumber;
如果我在此页 www.example.com/mail/inbox ,那么这会使分页链接看起来像这样 www.example.com/mail/inbox/page/ 12 但是,如果我点击该链接,那么新的分页链接将如下所示 www.example.com/mail/inbox/page/12/page/34 所以很明显不是解决方案,我真的被困在这里,如果我找不到解决方案,那么我将不得不退出使用正则表达式,并有一些非常糟糕的分页,我真的很感激任何可以尝试帮助我的人,我看不到解决方案,但肯定有一个。
<?PHP
class Paging
{
/*////////////////////////////////////////////////////////////////////////
* Paging Function
* //paging(10000, 50, 4); //number of results / items per page / number of page links in center
* // paging(10000, 50); //or
*/ ///////////////////////////////////////////////////////////////////////
public static function show_paging($total_results, $items_per_page, $adjacents = 3)
{
//$total_results = $reccnt;
//$items_per_page = $pagesize;
// adjacements will determinine how many paging links are in the middle of the outer paging
if ($total_results > $items_per_page) {
// build our link URLs
$url_string = "?";
foreach ($_GET as $k => $v) {
if ($k != "page") { // <-- the key you don't want, ie "page"
if ($url_string != "?") {
$url_string .= "&"; // Prepend ampersands nicely
}
$url_string .= $k . "=" . $v;
}
}
$selfurl = $url_string . '&page=';
$page = $_GET['page'];
if ($page) {
$start = ($page - 1) * $items_per_page;
}
else {
$start = 0;
}
if ($page == 0) {
$page = 1; //if no page var is given, default to 1.
}
$prev = $page - 1; //previous page is page - 1
$next = $page + 1; //next page is page + 1
$lastpage = ceil($total_results / $items_per_page); //lastpage is = total_results/ items per page, rounded up.
$lpm1 = $lastpage - 1; //last page minus 1
/*
* Now we apply our rules and draw the pagination object.
* We're actually saving the code to a variable in case we want to draw it more than once.
*/
$pagination = "";
if ($lastpage > 1) {
$pagination .= '<div class="pagingspace"><div class="pager">';
//previous button
if ($page > 1) {
$pagination .= '<a href="' . $selfurl . $prev .
'" title="go to previous page"><span class="page-numbers prev">prev</span></a>';
}
//pages
if ($lastpage < 7 + ($adjacents * 2)) { //not enough pages to bother breaking it up{
for ($counter = 1; $counter <= $lastpage; $counter++) {
if ($counter == $page) {
$pagination .= '<span class="page-numbers current">' . $counter . '</span>';
}
else {
$pagination .= '<a href="' . $selfurl . $counter . '" title="go to page ' . $counter .
'"><span class="page-numbers">' . $counter . '</span></a>';
}
}
}
else {
if ($lastpage > 5 + ($adjacents * 2)) { //enough pages to hide some{
//close to beginning; only hide later pages
if ($page < 1 + ($adjacents * 2)) {
for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++) {
if ($counter == $page) {
$pagination .= '<span class="page-numbers current">' . $counter . '</span>';
}
else {
$pagination .= '<a href="' . $selfurl . $counter . '" title="go to page ' . $counter .
'"><span class="page-numbers">' . $counter . '</span></a>';
}
}
$pagination .= '<span class="page-numbers dots">…</span>';
$pagination .= '<a href="' . $selfurl . $lpm1 . '" title="go to page ' . $lpm1 .
'"><span class="page-numbers">' . $lpm1 . '</span></a>';
$pagination .= '<a href="' . $selfurl . $lastpage . '" title="go to page ' . $lastpage .
'"><span class="page-numbers">' . $lastpage . '</span></a>';
//in middle; hide some front and some back
}
else {
if ($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) {
$pagination .= '<a href="' . $selfurl .
'1" title="go to page 1"><span class="page-numbers">1</span></a>';
$pagination .= '<a href="' . $selfurl .
'2" title="go to page 2"><span class="page-numbers">2</span></a>';
$pagination .= '<span class="page-numbers dots">…</span>';
for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++) {
if ($counter == $page) {
$pagination .= '<span class="page-numbers current">' . $counter . '</span>';
}
else {
$pagination .= '<a href="' . $selfurl . $counter . '" title="go to page ' . $counter .
'"><span class="page-numbers">' . $counter . '</span></a>';
}
}
$pagination .= '<span class="page-numbers dots">…</span>';
$pagination .= '<a href="' . $selfurl . $lpm1 . '" title="go to page ' . $lpm1 .
'"><span class="page-numbers">' . $lpm1 . '</span></a>';
$pagination .= '<a href="' . $selfurl . $lastpage . '" title="go to page ' . $lastpage .
'"><span class="page-numbers">' . $lastpage . '</span></a>';
//close to end; only hide early pages
}
else {
$pagination .= '<a href="' . $selfurl .
'1" title="go to page 1"><span class="page-numbers">1</span></a>';
$pagination .= '<a href="' . $selfurl .
'2" title="go to page 2"><span class="page-numbers">2</span></a>';
$pagination .= '<span class="page-numbers dots">…</span>';
for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++) {
if ($counter == $page) {
$pagination .= '<span class="page-numbers current">' . $counter . '</span>';
}
else {
$pagination .= '<a href="' . $selfurl . $counter . '" title="go to page ' . $counter .
'"><span class="page-numbers">' . $counter . '</span></a>';
}
}
}
}
}
}
//next button
if ($page < $counter - 1) {
$pagination .= '<a href="' . $selfurl . $next .
'" title="go to next page"><span class="page-numbers prev">next</span></a>';
}
else {
$pagination .= '<span class="page-numbers prev">next</span>';
$pagination .= '</div></div>';
}
}
echo '<table width="100%" border="0" cellspacing="0" cellpadding="5" class="paginator">';
echo '<tr><td align="center" height="20" class="black11bold">';
echo $pagination;
echo '</td></tr></table>';
}
}
// converts page number to a start position number for MySQL query
public static function page2db($page, $items_per_page)
{
if ($page) {
$start = ($page - 1) * $items_per_page;
}
else {
$start = 0;
}
return $start;
}
}
?>
使用
<?PHP
//to use the paging functions i do something like this
$pagesize = 10;
$start = Paging::page2db($_GET['page'], $pagesize); //page number and items perpage
//the show the pager links
Paging::show_paging($total_count, $pagesize, 4);
?>
更新
我需要想办法从这样的URL中获取值,并且只有部分减去域名,所以
http://example.com/mail/inbox 只会返回 / mail / inbox 这应该处理和目录数量,并且不应该返回其上的?var1=something
等值,所以它应该只返回添加到的文件夹
一个域,catch是这些文件夹不是真正的文件夹,它们是用URL
http://example.com的 /邮件/收件箱
http://example.com的 /论坛/类别
http://example.com的 /用户/在线
http://example.com / users / online / friends
我正在尝试修复PHP分页代码,现在因为我使用mod-rewrite而搞砸了,它打印到屏幕的链接不正确,因为它根据$_GET
值重建了URL,这不是因为URL中的名称与$_GET
值
如果网址为http://example.com / users / online 或http://example.com / users / online / page / 22 ,那么我需要重新制作它变成http://example.com ** / users / online /变量,然后我的分页代码可以根据需要添加到页面部分。
答案 0 :(得分:1)
首先,你不必须改变任何东西,如果mod-rewrite中的正则表达式是好的,它将不会触及你的http://domain.com/?p=page-identifier-name&page=2&user=343433 url,它只会处理找到文件夹的网址(/ bla / bla / etc /中的文件夹)。因此,即使没有新的分页功能,一切都应该像以前一样使用旧网址和新网址。
除此之外,我总是建议从头开始构建你的url,根据需要添加必要的元素,这样你就可以知道url将如何/可以看到并相应地设计你的mod-rewrite正则表达式。
因此,在页面的开头,获取所有变量(页面,页码,子页面等)并使用这些元素构建每个URL。
编辑:好的,看来你的分页与网址的其他部分非常分开,所以一个肮脏的解决方案是搜索你已经拥有的网页 - [0-9]部分并替换该号码或添加该部分(如果找不到)。我不会真的推荐它,但似乎有可能。
答案 1 :(得分:0)
我找到的最好的方法似乎是传入分页功能,即我正在使用的页面的URL
$pagingurl = 'http://localhost/mail/inbox/';
Paging::show_paging($total_count, 3, $pagingurl, 4);
这看起来是允许我使用我的mod-rewrite URL的最佳解决方案