Codeigniter 分页 URL 以 ?page=1 开头,依此类推

Posted

技术标签:

【中文标题】Codeigniter 分页 URL 以 ?page=1 开头,依此类推【英文标题】:Codeigniter pagination URLs to be start with ?page=1 and so on 【发布时间】:2019-04-29 03:42:39 【问题描述】:

我已经在 Codeigniter 框架中创建了我的网站,并且想要为特定页面而不是整个网站更新我的分页 URL。在当前有效的 URL 模式下方

https://www.example.com/city/2
https://www.example.com/city/hotel-with-air-conditioning.html/2
https://www.example.com/locality/hotels-in-dwarka.html/2
https://www.example.com/locality/5-star-hotel-in-dwarka.html/2
https://www.example.com/city/5-star-hotels-in-newdelhi.html/2
https://www.example.com/locality/hotel-with-air-conditioning-in-dwarka.html/2

Now I want to change them all above to as shown below:

https://www.example.com/city?page=2
https://www.example.com/city/hotel-with-air-conditioning.html?page=2
https://www.example.com/locality/hotels-in-dwarka.html?page=2
https://www.example.com/locality/5-star-hotel-in-dwarka.html?page=2
https://www.example.com/city/5-star-hotels-in-newdelhi.html?page=2
https://www.example.com/locality/hotel-with-air-conditioning-in-dwarka.html?page=2

我使用了 $config['page_query_string'] = TRUE;在初始化分页方法之前,

进行更改后,我得到了“&per_page=/2”,但不是我需要的。还建议我应该在 $config['uri_segment'] 中传递什么,因为我不想从段中选择页码,而是从查询参数 ?page = X 其中 X 将是一个整数

【问题讨论】:

【参考方案1】:

在使用 page_query_string 时不应设置 uri_segment。

要获得 page=1 而不是 per_page,您应该使用 query_string_segment 配置,如下所示:

$config['query_string_segment'] = 'page';

你的 url 上多余的 / 可能是因为你设置了一个基本的 url。尝试删除它。

您也可以尝试将每次出现的 '&page=/' 替换为 '?page='。

【讨论】:

您好 marcogmonteiro,感谢您的建议。我现在尝试更改 $config['query_string_segment'] = 'page' 而不是显示“page”的“per_page”。但是我怎样才能摆脱“&page=/2”或“&per_page=/3”等等。我希望 URL 为“?page=2”或“?page=3”等等。 codeigniter 分页是否有任何配置,以便我可以将“&”更改为“?”也可以删除“/” @ashokostech 我认为这与以下事实有关像example.com/index.php?c=test&m=page&per_page=20 一样使用它,这样就假定分页将是您正在执行的最后一个查询字符串,而不是第一个。我认为要解决这部分问题,您可以将基本分页 url 设置为 foo.com?而不是 foo.com。至于您的 / 问题,我需要更多信息。请发布您的整个控制器方法,以便我可以测试它。 实际上我通过用 '?page=' 替换每次出现的 '&page=/' 来修复它而不更改基本 url,它工作正常...... 如何用'?page='.替换每次出现的'&page=/' 删除所有可能以 / 结尾的链接【参考方案2】:

我创建了一个始终使用的分页助手。需要做一些数学运算才能计算出您总共有多少页,但这应该可行。

<?php
function paginate($pagecount, $currentpage, $baseurl, $params = array()) 

    //var_dump($params);
    $param_parts = array();
    foreach ($params as $key => $param) 
        $param_parts[] = $key . '=' . $param;
    
    ?>
    <div class="text-center">
    <?php
    $left_ellipsis = false;
    $right_ellipsis = false;
    for ($i = 1; $i <= $pagecount; $i++) 

        if ( ($i < 4) || ($i > $pagecount - 3) || ($i > $currentpage - 3 && $i < $currentpage + 3) ) 

            if ($i == $currentpage) 
                ?>
                <span class="btn btn-sm disabled"><?php echo $i; ?></span>
                <?php
             else 
                $urlout = array(
                    'currentpage=' . $i
                );
                $urlout = implode('&',$param_parts);
                if ($urlout != '') $urlout = '&' . $urlout;
                ?>
                <a class="btn btn-default btn-sm" href="<?php echo $baseurl; ?>?page=<?php echo $i; ?><?php echo $urlout; ?>"><?php echo $i; ?></a>
                <?php
            
         else 
            if ($currentpage > 6 && !$left_ellipsis) 
                $left_ellipsis = true;
                echo '<span class="ellip-block">...</span>';
            
            if ($currentpage < $pagecount - 5 && $i > $currentpage && !$right_ellipsis) 
                $right_ellipsis = true;
                echo '<span class="ellip-block">...</span>';
            
        
        //echo $pagecount; 
    
    ?></div><?php

?>

我将帮助文件命名为 paginate_helper.php 并使用它只需将其添加到任何视图中。

$params 变量只是获取通过“get”传入的参数数组。

<?php paginate($page, $cur, $url, array('q' => $q)); ?>

可能会有所帮助。随时更新和分发。

【讨论】:

以上是关于Codeigniter 分页 URL 以 ?page=1 开头,依此类推的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter 分页 url 页码

带有获取参数的codeigniter分页url

codeigniter 分页首页 URL

使用分页时的 Codeigniter url 重写问题

PHP codeigniter pagging

如何在 Codeigniter 分页中使用页码而不是偏移量?