【问题标题】:Codeigniter pagination conceptual problemCodeigniter 分页概念问题
【发布时间】:2011-07-04 19:45:31
【问题描述】:

我有一个页面/讨论,我想在其中实现分页。现在,我希望页面第一次加载为 /discussion,这意味着这就像 /discussion/page/1 一样。对于其他页面,URL 将是 /discussion/page/$pagenumber。

现在,问题是 index()。通常,我初始化 index() 中的所有页面数据,然后使用初始化数据加载视图。但是,在这里我必须在 index() 中初始化默认页面内容,然后在 page() 中初始化分页内容。那么,有没有办法将另一组数据从 page() 发送到视图?我不想加载视图,因为它会被 index() 加载。

但是,我认为不可能做到我上面提到的。所以,也许我应该让我的 index() 为空并在 page() 中进行所有初始化,然后在那里加载视图。你说什么?

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    您不需要同时使用“page”和“index”方法,只需使用route

    使用index() 方法并删除page() 方法:

    $route['discussion/page/(:num)'] = 'discussion/index/$1';
    

    /discussion 仍然为您提供第 1 页,请求 discussion/page/32 将映射到 discussion/index/32

    这假设您正在获取页码作为参数(url 段),如下所示:

    function index ($page = 1) {}
    

    如果您正在做其他事情,路线仍然是合适的,可能只是不是提供的路线。

    【讨论】:

    • 我试过这个,它似乎有点工作。但是,所有的图像文件路径都会改变。我正在以 ../images/imagename.jpg 的形式获取图像,但是在这些分页更改之后,我必须使用 ../../images/imagename.jpg 来获取它们。添加这条路线对路径有影响:(.
    • 问题真正在于图像的相对路径的使用。使用完整的 URL,/absolute/paths/to-image.jpg,或者只使用 img() 函数。处理动态 url 时不能依赖相对路径。
    • 酷。那行得通:)。还有一点:分页区域的第一页是/discussions/page。如何将其更改为 /discussions/page/1 或只是 /discussions?
    • 你的意思是/discussions/page是分页生成的第一个链接?
    • 是的 /discussions/page 是第一个链接。我应该添加类似:function page(){ $this->index(1);}
    【解决方案2】:

    我建议看一下 PEAR 的精彩 Pager package。它会自动生成一个寻呼机,并根据 (GET) 输入变量为您提供正确的索引。

    【讨论】:

      【解决方案3】:

      听起来您正试图让您的页面方法装饰您的索引方法。在不了解控制器的整体结构的情况下,真的没什么好说的,但听起来下面会有所帮助:

      function page( $pos )
      {
          $this->index( $pos );
      }
      
      // a default parameter lets you ensure that this does not neet to have a page set.
      function index( $pos = 0 )
      {
         // when calling the DB (I'm guessing that is where the pagination really happens)
         // COUNT should be defined in the config if possible.
         $this->db->where/*... add more here...*/->limit( COUNT, $pos );
      }
      

      实际上,您应该查看您的 URI 路由类或使用 _resolve 方法,但这应该可以满足您的需要。

      【讨论】:

        【解决方案4】:

        我不太确定你的问题是什么。

        如果你有一个index() 方法,你可以在那里设置所有的分页信息,记住你必须告诉分页库将使用哪个 uri 段来获取页码,这与index()

        控制器中没有page() 方法,所有页面都是相同的index(),具有不同的分页数据集,由定义为页码的uri_segment 给出,这意味着所有不是与分页查询集相关的页面完整无缺。

        【讨论】:

        • 那么,url 会是什么样子(对于不同的页面)?
        • 它可以看起来像你想要的那样,/discussions/index/2 或 /discussions/index/page/2,('discussions' 控制器的名称和 'index' 方法。请注意,如果您想从 url 中删除 index 并仅使用 page 您必须在路由配置文件中设置该 url:$route['discussions/page/:any'] = "discussions/index/page/$1";
        猜你喜欢
        • 1970-01-01
        • 2011-10-22
        • 1970-01-01
        • 1970-01-01
        • 2011-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-21
        相关资源
        最近更新 更多