【问题标题】:CodeIgniter: howto override Pagination configuration in controller code?CodeIgniter:如何在控制器代码中覆盖分页配置?
【发布时间】:2012-07-31 14:05:30
【问题描述】:

我最近参加了 CodeIgniter 培训,因为我终于想为我不断增长的 PHP/MySQL 项目采用 MVC 架构。 现在我遇到了一个问题 PAgination configuratino,据我所知,它显然没有在前面描述过。

这个问题可能不仅仅是 PAgination 相关的,而是更普遍的。在我的第一次尝试中,我只是在控制器方法中填写了配置并将其传递给 initialize() 方法:

$config['base_url'] = $this->config->base_url() .  "/categorie/{$catName}/";
$config['total_rows'] =      $this->event_model->get_nrofevents_for_categorie($categorieObject->id, TRUE);
$config['per_page'] = 12;
$config['full_tag_open'] = '<div class="paging">';
$config['full_Tag_close'] = '</div>';
$config['prev_link'] = 'Vorige';
$config['next_link'] = 'Volgende';
$this->pagination->initialize($config);

这很好用。但是我有很多其他页面使用相同的分页,其大多数参数相同,只有 base_url 和 total_rows 配置属性对于每个页面是不同的。 我已将通用配置放在 config/pagination.php 配置文件中,但看不到在代码中添加页面相关属性的选项。 更一般地说,是否可以将通用配置放在配置文件中并在控制器方法中添加一些自定义属性? 对我来说,这似乎合乎逻辑,但无法弄清楚如何...... 我试过类似的东西:

$this->load->config('pagination');
$this->config->set_item('next_link', 'blablabla');

但似乎在读取配置文件后立即初始化分页,此代码无效。 请问有什么建议吗?

【问题讨论】:

    标签: codeigniter pagination


    【解决方案1】:

    由于initialize() 仅替换您提供的密钥,您可以让您的config/pagination.php 保持默认值并调用initialize() 更改值。

    config/pagination.php

     // put default values here
     $config['next_link'] = 'Volgende';
     $config['prev_link'] = 'Vorige';
     // ...
    

    控制器

     $this->pagination->initialize(array(
         'base_url' => base_url().'categorie/'.$catName.'/',
         'total_rows' => $totalRows,
          // ...
     )));
    

    【讨论】:

    • 所以这意味着我不会使用 Pagination.php 配置文件,它显然是由 Pagination 类自动使用的?
    • 是的,如果您复制示例,则不会。但是由于 initialize() only copies over the keys you provide 是默认值,它应该可以在没有明确合并到 $this-&gt;config-&gt;item('pager') 数组中的情况下工作。
    • 我重做了答案,证明单独的配置数组是多余的。
    • 似乎确实有效,所以谢谢!在配置文件中有一些分页参数,我需要读取它们以传递给模型中的查询方法: $this->load->config('pagination'); $per_page = $this->config->item('per_page'); (这个值是作为limit参数传递的)貌似可以,但是$this->config怎么用还不是很清楚,是不是总是引用最后加载的配置文件?
    • 再次阅读文档后,现在也很清楚了:) 加载配置文件只需将配置数据添加到配置数组中,以防名称冲突,可以使用第二个参数。
    【解决方案2】:

    不要使用 base_url()... 我总是使用 site_url();

    $config['base_url'] = site_url('');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      • 2017-09-13
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      相关资源
      最近更新 更多