【问题标题】:Reduce lines of code for pagination codeigniter/declare once减少分页codeigniter/declare的代码行数
【发布时间】:2018-07-13 17:03:42
【问题描述】:

我正在构建一个项目,我必须对数据进行多次分页。

在控制器函数中,有 2 个结果。失败和成功,但无论结果如何,页面都将被重定向回调用函数的页面。

假设该页面上有 2 个数据分页,(例如,如果一个页面有目录和 cmets)。

所以在我的控制器中,代码行会非常高,因为我必须在控制器中添加分页行以获得失败和成功的结果。

这是我的分页代码:

$config['base_url'] = ;
    $config['total_rows'] = $num_rows;
    $config['per_page'] = 10;
    $config['num_links'] = $num_rows;
    $config['uri_segment'] = 4;

    $config['full_tag_open'] = '<ul class="pagination">';
    $config['full_tag_close'] = '</ul>';
    $config['first_link'] = '0';
    $config['last_link'] = 'Last';
    $config['first_tag_open'] = '<li class="page-item">';
    $config['first_tag_close'] = '</li>';
    $config['prev_link'] = '&laquo';
    $config['prev_tag_open'] = '<li class="page-item prev">';
    $config['prev_tag_close'] = '</li>';
    $config['next_link'] = '&raquo';
    $config['next_tag_open'] = '<li class="page-item">';
    $config['next_tag_close'] = '</li>';
    $config['last_tag_open'] = '<liclass="page-item">';
    $config['last_tag_close'] = '</li>';
    $config['cur_tag_open'] = '<li class="page-item active"><a href="#">';
    $config['cur_tag_close'] = '</a></li>';
    $config['num_tag_open'] = '<li class="page-item">';
    $config['num_tag_close'] = '</li>';

这让我的代码变得非常凌乱且难以理解,因为它变得很长。

有什么方法可以让我只执行一次,每次执行时都启动分页。

我认为只需要第一部分,我认为第二部分只能声明一次并使其全局化?

编辑:也许我可以在我的控制器中添加一个构造函数并在那里声明它?它会让它全球化吗? Idk 如果这是正确的解决方案。还是索引函数?

Edit1:这现在是我的配置文件夹中的 pagination.php 文件。我还对此进行了测试,以检查它是否正在工作/影响我的分页链接。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

    $config['full_tag_open'] = '<ul class="pagination">';
    $config['full_tag_close'] = '</ul>';
    $config['first_link'] = 'First';
    $config['last_link'] = 'Last';
    $config['first_tag_open'] = '<li class="page-item">';
    $config['first_tag_close'] = '</li>';
    $config['prev_link'] = '&laquo';
    $config['prev_tag_open'] = '<li class="page-item prev">';
    $config['prev_tag_close'] = '</li>';
    $config['next_link'] = '&raquo';
    $config['next_tag_open'] = '<li class="page-item">';
    $config['next_tag_close'] = '</li>';
    $config['last_tag_open'] = '<liclass="page-item">';
    $config['last_tag_close'] = '</li>';
    $config['cur_tag_open'] = "<li class='page-item active'><a href='#'>";
    $config['cur_tag_close'] = "</a></li>";
    $config['num_tag_open'] = '<li class="page-item">';
    $config['num_tag_close'] = '</li>';

?>

【问题讨论】:

    标签: php codeigniter pagination


    【解决方案1】:

    只需在 config 文件夹中创建一个 pagination.php 文件并将您的配置放入其中。 codeigniter 将自动加载您的配置。

    【讨论】:

    • 会自动加载吗?如何?我是否必须以特定方式命名它才能让 codeigniter 识别它?
    • @ChiefMakii 不,你只需要再读一遍manual
    【解决方案2】:

    最简单/最短的方法是使用array_fill_keysarray_merge,例如:

    $keys = ['first_tag_close', 'next_tag_close','prev_tag_close',
             'last_tag_close','num_tag_close'];
    $config = array_merge($config, array_fill_keys($keys, '</li>'));
    

    不过,简单的重复使用也会缩短行数:

    $config['first_tag_open'] = $config['last_tag_open'] =
        $config['next_tag_open'] = '<li class="page-item">';
    $config['first_tag_close'] = $config['next_tag_close'] =
        $config['prev_tag_close'] = $config['last_tag_close'] =
        $config['num_tag_close'] = '</li>';
    $config['prev_link'] = $config['next_link'] = '&laquo';
    

    或者,如果您更喜欢 PHP 7 中的 list

    list($config['first_tag_open'], $config['last_tag_open'],
      $config['next_tag_open']) = array_fill(0, 3, '<li class="page-item">');
    list($config['first_tag_close'], $config['next_tag_close'],
      $config['prev_tag_close'], $config['last_tag_close'],
      $config['num_tag_close']) = array_fill(0, 5,'</li>');
    
    【解决方案3】:
    1. 在config文件夹中创建pagination.php文件

    2. 将下面的代码放在pagination.php中

           <?php
               $config['full_tag_open'] = '<ul class="pagination">';
               $config['full_tag_close'] = '</ul>';
               $config['num_tag_open'] = '<li class="page-item">';
               $config['num_tag_close'] = '</li>';
               $config['cur_tag_open'] = '<li class="page-item active"><a class="page-link" href="#">';
               $config['cur_tag_close'] = '</a></li>';
               $config['next_tag_open'] = '<li class="page-item">';
               $config['next_tagl_close'] = '</a></li>';
               $config['prev_tag_open'] = '<li class="page-item">';
               $config['prev_tagl_close'] = '</li>';
               $config['first_tag_open'] = '<li class="page-item disabled">';
               $config['first_tagl_close'] = '</li>';
               $config['last_tag_open'] = '<li class="page-item">';
               $config['last_tagl_close'] = '</a></li>';
               $config['attributes'] = array('class' => 'page-link');    
      

      ?>

    3. 控制器视图

       $total_users = $this->User_model->get_total_users(1,$search_text);
       $config['base_url'] = base_url().'manage/users/index/';
       $config['total_rows'] = $total_users;
       $config['per_page'] = 10;
      
       $this->pagination->initialize($config);
      
    4. 输出如下

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多