How to get CI pagination to work with a array();

我怕爱的太早我们不能终老 提交于 2020-02-06 08:33:42

问题


How can I get the codeigniter pagination to work with my $data['controller_files'][] = array()

I cannot figure out best place to put the uri->segment(4) and per page limit.

The pagination links work but not per page. Still shows full list of files on my table.

Routes

// Extensions
$route['admin/extension/permissions'] = "admin/extension/extension_permissions/index";
$route['admin/extension/permissions/(:any)'] = "admin/extension/extension_permissions/index/$1";

Controller

<?php

class Extension_permissions extends Admin_Controller {
    public function index($offset = 0) {
    $data['title'] = "Permissions";

    $controller_files = $this->model_extension_permissions->get_installed_permissions('name'); 

    $data['controller_files'] = array();

    $files = glob(FCPATH . 'application/modules/admin/controllers/*/*.php') ;

    if ($files) {

        foreach ($files as $file) {

            $controller =  basename(strtolower($file), '.php');

            $this->load->library('pagination');

            $limit = 1;
            $total_rows = 13; // Number of Current files.

            $config['base_url'] = base_url()."admin/extension/permissions";
            $config['total_rows'] = $total_rows;
            $config['per_page'] = $limit;
            $config['num_links'] = 5;
            $config['uri_segment'] = 4;
            $config['use_page_numbers'] = TRUE;
            $config['full_tag_open'] = '<ul class="pagination pagination-sm">'; 
            $config['full_tag_close'] = '</ul>'; 
            $config['num_tag_open'] = '<li>'; 
            $config['num_tag_close'] = '</li>'; 
            $config['cur_tag_open'] = '<li class="active"><span>'; 
            $config['cur_tag_close'] = '<span class="sr-only">(current)</span></span></li>'; 
            $config['prev_tag_open'] = '<li>'; 
            $config['prev_tag_close'] = '</li>'; 
            $config['next_tag_open'] = '<li>'; 
            $config['next_tag_close'] = '</li>'; 
            $config['first_link'] = '&laquo;'; 
            $config['prev_link'] = '&lsaquo;'; 
            $config['last_link'] = '&raquo;'; 
            $config['next_link'] = '&rsaquo;'; 
            $config['first_tag_open'] = '<li>'; 
            $config['first_tag_close'] = '</li>'; 
            $config['last_tag_open'] = '<li>'; 
            $config['last_tag_close'] = '</li>';

            $this->pagination->initialize($config);     

            $modules = $this->model_extension_permissions->get_permissions_by_controller($controller);

            $module_data = array();

            foreach ($modules as $module) {
                $module_data[] = array(
                    'permission_id' => $module['permission_id'],
                    'name' => ucwords(str_replace('_', ' ', $controller) . ' &gt; ' . $module['name']),
                    'edit' => site_url('admin/extension/permissions/update' .'/'. $controller .'/'. $module['permission_id']),
                    'delete' => site_url('admin/extension/permissions/uninstall' .'/'. $controller .'/'. $module['permission_id'])
                );
            }

            $data['controller_files'][] = array(
                'name' => $controller,
                'controller' => $controller,
                'module'    => $module_data,
                'install' => site_url('admin/extension/permissions/install') .'/'.$controller,
                'installed' => in_array($controller, $controller_files)
            );
        }
    }

    $this->parser->parse('template/extension/extension_permissions', $data);
}
}

View

<div class="panel panel-default">
<div class="panel-heading"><h1 class="panel-title"></h1>{title}</div>
<div class="panel-body">
<div class="table-responsive">

<table class="table table-striped table-bordered table-hover" >
<thead>
    <tr>
    <td data-field="name">Controller Name</td>
    <td class="text-right">Action</td>
    </tr>
</thead id="myTable">
<tbody>
<?php if ($controller_files) { ?>
<?php foreach ($controller_files as $controllers) { ?>

<tr>
<td><?php echo $controllers['name']; ?></td>
<td class="text-right">
<?php if (!$controllers['installed']) { ?>
<a href="<?php echo $controllers['install']; ?>" class="btn btn-success"><i class="fa fa-plus-circle"></i> Install</a>
<?php } else { ?>
<a href="<?php echo $controllers['uninstall']; ?>" class="btn btn-danger"><i class="fa fa-minus-circle"></i> Uninstall</a>
<?php } ?>
</td>
</tr>

<?php foreach ($controllers['module'] as $module) { ?>
<tr>
<td class="text-left"><?php echo $module['name']; ?></td>
<td class="text-right">
<a href="<?php echo $module['delete']; ?>"  class="btn btn-danger"><i class="fa fa-trash-o"></i> Uninstall</a> 
<a href="<?php echo $module['edit']; ?>"  class="btn btn-primary"><i class="fa fa-pencil"></i> Edit</a>
</td>
</tr>
<?php } ?>

<?php } ?>
<?php } else { ?>
<tr>
    <td class="text-center">No Results</td>
</tr>
<?php } ?>
</tbody>
</table>
</div><!-- Table Responsive End -->
</div><!-- Panel Body End -->
<div class="panel-footer">
    <div class="clearfix">
        <div class="pull-left">
            <?php echo $this->pagination->create_links();?>
        </div>
        <div class="pull-right">
        </div>
    </div>
</div>
</div><!-- Panel Default End -->

回答1:


You can do it by using array_slice to get data per page.

public function index($page = 1) {

        $data['title'] = "Permissions";

        $controller_files = $this->model_extension_permissions->get_installed_permissions('name'); 

        $data['controller_files'] = array();

        $files = glob(FCPATH . 'application/modules/admin/controllers/*/*.php') ;

        $per_page = 5;

        $offset = ($page - 1) * $per_page;

        $paginatedFiles = array();

        if (count($files)) {
            $paginatedFiles = array_slice($files, $offset, $per_page, true);
        }

        if ($paginatedFiles) {

            foreach ($paginatedFiles as $file) {

                $controller =  basename(strtolower($file), '.php');

                $modules = $this->model_extension_permissions->get_permissions_by_controller($controller);

                $module_data = array();

                foreach ($modules as $module) {
                    $module_data[] = array(
                        'permission_id' => $module['permission_id'],
                        'name' => ucwords(str_replace('_', ' ', $controller) . ' &gt; ' . $module['name']),
                        'edit' => site_url('admin/extension/permissions/update' .'/'. $controller .'/'. $module['permission_id']),
                        'delete' => site_url('admin/extension/permissions/uninstall' .'/'. $controller .'/'. $module['permission_id'])
                    );
                }

                $data['controller_files'][] = array(
                    'name' => $controller,
                    'controller' => $controller,
                    'module'    => $module_data,
                    'install' => site_url('admin/extension/permissions/install') .'/'.$controller,
                    'installed' => in_array($controller, $controller_files)
                );
            }
        }

        $this->load->library('pagination');

        $config['base_url'] = base_url()."admin/extension/permissions";
        $config['total_rows'] = count($files);
        $config['per_page'] = $per_page;
        $config['num_links'] = 5;
        $config['uri_segment'] = 4;
        $config['use_page_numbers'] = TRUE;
        $config['full_tag_open'] = '<ul class="pagination pagination-sm">'; 
        $config['full_tag_close'] = '</ul>'; 
        $config['num_tag_open'] = '<li>'; 
        $config['num_tag_close'] = '</li>'; 
        $config['cur_tag_open'] = '<li class="active"><span>'; 
        $config['cur_tag_close'] = '<span class="sr-only">(current)</span></span></li>'; 
        $config['prev_tag_open'] = '<li>'; 
        $config['prev_tag_close'] = '</li>'; 
        $config['next_tag_open'] = '<li>'; 
        $config['next_tag_close'] = '</li>'; 
        $config['first_link'] = '&laquo;'; 
        $config['prev_link'] = '&lsaquo;'; 
        $config['last_link'] = '&raquo;'; 
        $config['next_link'] = '&rsaquo;'; 
        $config['first_tag_open'] = '<li>'; 
        $config['first_tag_close'] = '</li>'; 
        $config['last_tag_open'] = '<li>'; 
        $config['last_tag_close'] = '</li>';

        $this->pagination->initialize($config); 

        $this->parser->parse('template/extension/extension_permissions', $data);
    }

Hope it will be useful for you.




回答2:


The pagination library is self serving, meaning it has no indication where/what the data is, it basically runs off its own configuration.

You could use array_chunk to split an array of files into per_page or limits and create a new array that generates an index as the key that can be used for finding your offset

Most of this stuff can/should be moved to a model

public function index($offset=0)
{
    $chunks = array();

    // How many files to show per page
    $limit = 5; 

    // an index you can use to find offsets for pagination
    $index=0;

    $count = count($files);

    // loop through the files array in chunks, and create
    // an index or offset you can query from 
    foreach(array_chunk($files, $limit) as $file){
        $index++;
        $chunks[$index] = $file; // build your array 
    }

    $data = $chunks[$offset]; 

    $config = array(
        // pagination config....
    );

    $this->pagination->initialize($config);

    $links = $this->pagination->create_links();

    return $this->parser->parse('template/extension/extension_permissions', array(
        'data'   =>  $data,
        'links'  =>  $links
    ));

}



回答3:


public function auswertung_ma($per_page = 0)
{
    //PAGINATION
    $this->load->library('pagination');

    $config = $this->config->item('pagination');
    $config['total_rows'] = count($ma_zeiten);
    $config['base_url'] = site_url('site/auswertung_ma');

    $this->pagination->initialize($config);
    $this->data['pagination_links'] = $this->pagination->create_links();
    $this->data['zeiten'] = array_chunk($ma_zeiten, RECORDS_PER_PAGE)[$per_page / 10];


来源:https://stackoverflow.com/questions/29180938/how-to-get-ci-pagination-to-work-with-a-array

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!