问题
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'] = '«';
$config['prev_link'] = '‹';
$config['last_link'] = '»';
$config['next_link'] = '›';
$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) . ' > ' . $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) . ' > ' . $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'] = '«';
$config['prev_link'] = '‹';
$config['last_link'] = '»';
$config['next_link'] = '›';
$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