【问题标题】:CI class Pagination links troubleCI类分页链接麻烦
【发布时间】:2014-02-27 00:57:58
【问题描述】:

这是我目前拥有的代码。 附言我目前正在编辑这个,试图解决这个问题,同时等待有人在这里解决它。我不太清楚为什么会这样。

分页:

$character = $this->uri->segment(3);    
        $config['base_url'] = base_url() . 'index.php/Controller/function/'.$character;
        $config['total_rows'] = $this->Model->browse_total_rows();
        $config['per_page'] = 1;
        $config['num_links'] = 10;
        $config['uri_segment'] = 4;
        $this->pagination->initialize($config);
        if(!is_numeric($character)){$data['records'] = $this->Model->get_records_filtered($character,$config['per_page'],$this->uri->segment(4));}
        else{ $data['records'] = $this->Model->get_records($config['per_page'], $this->uri->segment(3));}
        $data['links'] = $this->pagination->create_links();
        $this->load->view('browse', $data);

每当我转到我的浏览页面时,而不是在我的页面的第 1 页上进行分页。默认情况下,我在第 2 页上。为什么?因为我认为这是我的链接。

1 2 3 >

另外,我不能点击链接 2,但我可以点击链接 1。我不知道 pagination_links 是否这样工作。但我觉得很奇怪。无论如何,我不确定它是否与我的其他问题有关。

字符部分用于选择的字母,所以例如我只想查看结果,其中 A 作为 url 的第一个字母。

index.php/controller/function/A/

因此分页的每页将放置在第 4 段。这样没有错误。但是当我不点击任何字母而只显示所有结果时。

每当我点击一个链接(每页)。网址如下所示。

index.php/controller/function/2/ 

但是当我点击下一页时,它会像

 index.php/controller/function/2/4

所以基本上打破了分页并且没有检索到任何结果。

我尝试了其他解决方案,例如添加 IF/else 语句,如果字符为 null 或不等于 range('A','Z'),则 $config['base_url'] 最后应该没有 .$character,uri_segment 应该在第 3 位。但还是和上面一样。

编辑:

第二个问题解决了,我用的是这样的。

$character = $this->uri->segment(3);
$Alphabet = range('A','Z');
$flag = 0;

for($i=0;$i<26;$i++)
{
    if($character==$Alphabet[$i])
    {
        $flag +=1;
    }
} 

似乎,if($character==range('A','Z')) 不起作用,因为只有在我回显该范围返回数组结果时才注意到,所以我不得不循环。有没有比我上面所做的更好的检查方法?

【问题讨论】:

  • 您的页面段应该是 3,而不是 4。index.php 不算作段。我猜你在真正的第 4 段中的任何内容当前都被转换为 2,因此默认为第 2 页。
  • 所以我应该把 index.php 放在我的配置文件的 base_url 上?因为如果我不放 index.php。它会出错,因为 ci 需要在控制器之前通过 index.php
  • 我编辑了,我的分页。第 4 部分是用户选择一个字母的地方,因此每页应该在 4 上,而字母在 3 上。这就是为什么我制作了另一个名为 get_records_filtered 的模型。到目前为止,我在控制器上进行了 2 次分页,从问题的最后一部分开始,我添加了一个循环,检查用户是否选择了一个字母,如果没有,则进入默认分页,页面段为 3。而如果用户点击一封信,因为我认为的链接是这个。 foreach(range('A', 'Z')as $key=>$letter) { echo anchor('Controller/_browse/'.$letter, ' '.$letter); }
  • 应该是这样的。点击字母:控制器/功能/A/[perpage here] 没有点击字母:controller/function/[perpage here]
  • 如果你在url中使用index.php(没有设置url重写),你应该在config.php中设置$config['index_page'] = 'index.php';。然后 base_url() 和其他 url 助手会自动添加它。我想我现在了解您对分页的要求,并会发布答案。

标签: php codeigniter pagination


【解决方案1】:

使用您的分页配置,无论是否指定了字母,您都将分页段设置为 4。但如果我理解正确的话,应该是没有字符的时候是 3。

试试这样的:

if(!is_numeric($character)) {
    $config['uri_segment'] = 4;
    $data['records'] = $this->Model->get_records_filtered($character,$config['per_page'],$this->uri->segment(4));
} else {
    $config['uri_segment'] = 3;
    $data['records'] = $this->Model->get_records($config['per_page'], $this->uri->segment(3));
}
$this->pagination->initialize($config);

要检查范围内的字符,您可以使用

if (in_array(strtoupper($character), range('A', 'Z'))

strtoupper() 是可选的。如果您希望 'a' 匹配 'A',请保留它。

【讨论】:

  • 我还需要在我的 config['base_url'] 中插入 index.php 吗?
  • 顺便说一句,num_links 是干什么用的?我不太明白ellislab的解释,他们没有详细说明
  • 只要您的网址需要在其中包含“index.php”,那么可以。正如我在问题 cmets 中提到的,site_url() 会自动添加它。 num_links 设置生成的分页链接中的编号链接数。例如:num_links = 1 个输出 2 3 >,num_links = 3 个输出 4 5 6 7 >
  • 所以它设置了默认页面?就像您如何将 num_links 为 1 的 2 部分加粗一样。还是我误解了?无论如何,假设 $character 不为空,您添加的 If(in_array).. 代码行仅有效或仅应运行,对吗?
  • 不,抱歉。它设置当前页面之前和之后的链接数。粗体数字是当前页面。因此对于第二个示例,4 是当前页面,并且将 num_links 设置为 3,它将在 4 之前添加最后 3 个数字,在 4 之后添加接下来的 3 个数字。
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多