Пользовательский маршрут разбивки на страницы с использованием CakePHP 2.3.1

Я использую cakephp 2.3.1, и у меня проблема с компонентом Paginator.

Моя цель – такие страницы, как:

example.com/abruzzo example.com/abruzzo/2 example.com/abruzzo/3 

Я создал следующий маршрут:

 Router::connect('/:regione/:page', array('controller'=>'regions','action'=>'home'), array('page' =>'[0-9]+')); Router::connect('/:regione', array('controller' => 'regions', 'action' => 'home')); 

(так как вы видите, что первая работа по маршруту обрабатывает параметр страницы )

Теперь, чтобы правильно обрабатывать параметр страницы, я добавил следующую строку в параметр BeforeFilter RegionsController .

 public function beforeFilter() { $this->request->params['named']['page'] = (isset($this->request->params['page'])) ? $this->request->params['page'] : 1; } 

потому что я прочитал компонент Componentet Paginator, он будет выглядеть как ad ['named'] ['page'] вместо ['page'].

ПЕРВЫЙ ВОПРОС:

Это верно? мне действительно нужен этот взлом в beforeFilter ()?


Затем мне нужно показать номера страницы, используя:

 <?php echo $this->Paginator->numbers(); ?> 

Проблема здесь в том, что URL-адрес, созданный по ссылке, неверен .. они указывают на:

 example.com/regions/home/page:2 example.com/regions/home/page:3 etc... 

Мне не нужны такие URL-адреса, мне нужно:

 example.com/abruzzo example.com/abruzzo/2 example.com/abruzzo/3 

ВТОРОЙ ВОПРОС:

Как заставить URL-адрес, который я хочу, вместо файла controller / action / page: N?

Благодаря!

Это, вероятно, дубликат .

Но, отвечая на ваш первый вопрос: это зависит. Если вы уверены, что ваш URL не получит больше параметров, ваша маршрутизация может быть больше похожа на

 Router::connect('/:regione/*', array('controller'=>'regions','action'=>'home')); 

и в «домашнем» действии

 public function home($pageOption=null) { if (is_numeric($option)) { $this->passedArgs['page'] = $pageOption; } $items = $this->paginate('Home'); ... } 

Я думаю, что опция beforeFilter лучше, так как она многократно используется и позволяет вам лучше настроить ваши параметры.

Теперь статья, которая помогла другим подобным вопросам (и ваш второй вопрос), возобновилась до этого

В представлении home.ctp (или что вам угодно)

 $prev_link = str_replace('page:', '', $this->Paginator->prev('« Prev')); $prev_link = preg_replace('/\/1"/', '"', $prev_link); $next_link = str_replace('page:', '', $this->Paginatornext('Next »')); echo $prev_link; echo $next_link; 

Итак, вместо обычного

 echo $this->Paginator->prev('< Prev'); echo $this->Paginator->numbers(); echo $this->Paginator->next('Next >'); 

вам придется вручную заменить часть страницы «page:», а затем повторить ее.

Конечно, вы всегда можете изменить PaginationHelper, но я бы не рекомендовал этого, потому что для каждого обновления торта вам нужно проверить, был ли PaginationHelper изменен, а затем повторно настроить его.

Прочитайте статью, опубликованную по другому вопросу, в случае, если вам не ясно, что-то надействует.

Я думаю, это то, что вы ищете

https://github.com/hashmode/Cakephp-Beauty-Paginator