Я начал писать веб-приложение в Codigniter 4, и в настоящее время я застрял с нумерацией страниц.
Я создал контроллер, модель и представление для извлечения записей из базы данных для групп пользователей и использовал встроенную в CI библиотеку разбивки на страницы.
Модель групп пользователей:
<?php namespace App\Models;
use CodeIgniter\Model;
class UsergroupsModel extends Model{
protected $table = 'roles';
protected $allowedFields = [];
protected $beforeInsert = ['beforeInsert'];
protected $beforeUpdate = ['beforeUpdate'];
public function getGroups(){
$db = \Config\Database::connect();
$builder = $db->table('roles');
$query = $builder->get();
$results = $query->getResultArray();
return $results;
}
}
Контроллер (группы пользователей):
<?php namespace App\Controllers;
use App\Models\UsergroupsModel;
class Usergroups extends BaseController
{
public function index()
{
//Helper laden
helper(['form','template','userrights']);
$data = [];
$data['template'] = get_template();
$data['info'] = [
"active" => "menu_dash",
"title" => "Dashboard",
"icon" => "fab fa-fort-awesome fa-lg",
"sub" => "Frontend",
];
//Check Permissions
$data['userrights'] = get_userrights(session()->get('id'));
if($data['userrights'][1] == 1)
{
foreach($data['userrights'] as $key => $value){
$data['userrights'][$key] = '1';
}
}
else
{
$data['userrights'] = $data['userrights'];
}
$model = new UsergroupsModel;
$model->getGroups();
$pager = \Config\Services::pager();
$data['usergroups'] = $model->paginate(5);
$data['pager'] = $model->pager;
//Create Views
echo view($data['template'].'/templates/header', $data);
echo view($data['template'].'/backend/navigation');
echo view($data['template'].'/templates/sidebar');
echo view($data['template'].'/backend/usergroups');
echo view($data['template'].'/templates/footer');
}
//--------------------------------------------------------------------
}
В представлении я получил свою разбивку на страницы, используя
<?= $pager->links() ?>
Разбивка на страницы по умолчанию работает нормально, но я получаю URI типа https://DOMAIN.DE/usergroups?page= 2а>
В официальной документации Codeigniter 4 для разбивки на страницы вы можете найти следующее:
Указание сегмента URI для страницы Также можно использовать сегмент URI для номера страницы вместо параметра запроса страницы. ›Просто укажите номер сегмента, который будет использоваться в качестве четвертого аргумента. Тогда URI, сгенерированные пейджером, будут выглядеть следующим образом: https://domain.tld/model/%5BpageNumber%5D вместо https://domain.tld/model?page=%5BpageNumber%5D.:
::
$users = $userModel-›paginate(10, ‘group1’, null, 3); Обратите внимание: значение $segment не может превышать число сегментов URI плюс 1.
Итак, в моем контроллере я изменил
$data['usergroups'] = $model->paginate(5);
to
$data['usergroups'] = $model->paginate(5,'test',0,2);
и в представлении я добавил «тест» в качестве параметра.
<?= $pager->links('test') ?>
В Маршрутах я добавил
$routes->get('usergroups/(:num)', 'Usergroups::index/$1');
и в контроллере я изменил индексную функцию на
public function index($segment = null)
URI, сгенерированные из разбиения на страницы, теперь выглядят так:
https://DOMAIN.DE/usergroups/2
но это ничего не меняет в записях и сама нумерация страниц всегда липнет к странице 1.
Я думаю, что я не могу использовать встроенную библиотеку CI при переключении на URI сегмента, и поэтому мне нужно создать разбиение на страницы вручную.
Может ли кто-нибудь помочь мне решить эту проблему?