Cakephp 2.0 вопрос о нумерации страниц.Как передать аргументы в пагинации? - PullRequest
3 голосов
/ 03 февраля 2012

Cakephp 2.0 Проблема с нумерацией страниц.Как передать аргументы в пагинационной ссылке?

Я передал аргументы как

 $this->Paginator->options(array('url' =>  $this->request->query));

, но после 2-й страницы он не работает.

На первой странице отправленные значения поступают в $this->request->query, но со второй страницы они поступают в $this->params->named, но должны поступать в $this->request->query

Моя часть разбиения на страницы из файла представления:

<div class="paging">
    <?php
    $this->Paginator->options(array('url' =>  $this->request->query));
        echo $this -> Paginator -> prev('< ' . __('Previous'), array(), null, array('class' => 'prev disabled'));
        echo $this -> Paginator -> numbers(array('separator' => ''));
        echo $this -> Paginator -> next(__('Next') . ' >', array(), null, array('class' => 'next disabled'));
    ?>

при печати параметров на первой странице:

[query] => Array
    (
        [first_name] => 
        [username] => an
        [email] => 
        [dob] => Array
            (
                [year] => 
                [month] => 
                [day] => 
            )

    )

при печати параметров на второй странице:

    [named] => Array
            (
                [first_name] => 
                [username] => an
                [email] => 
                [dob%5Byear%5D] => 
                [dob%5Bmonth%5D] => 
                [dob%5Bday%5D] => 
                )
[query] => Array
    (
        [/admin/users/index/first_name:/username:an/email:/dob] => Array
            (
                [year] => 
            )

    )
</div>

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Я добавил следующий код в файл View, и теперь все работает нормально. на всех страницах значения параметров поступают в запрос-> запрос

$url = $this->params['url'];

    unset($url['url']);
    if(isset($this->request->data) && !empty($this->request->data)) {
        foreach($this->request->data[$model_name] as $key=>$value)
            $url[$key] = $value;
    }
    $get_var = http_build_query($url);

    $arg1 = array();
    $arg2 = array();
    //take the named url
    if(!empty($this->params['named']))
        $arg1 = $this->params['named'];

    //take the pass arguments
    if(!empty($this->params['pass']))
        $arg2 = $this->params['pass'];

    //merge named and pass
    $args = array_merge($arg1,$arg2);

    //add get variables
    $args["?"] = $get_var;
    $this->Paginator->options(array('url' =>  $args)); 

И в методе действия контроллера я добавил следующее

    $args = $this->params['url'];
    unset($args['url']);
    if(isset($args['submit'])) 
        unset($args['submit']);
    if(!empty($this->request->data)){
        foreach($this->data['User'] as $key=>$value)
            $args[$key] = $value;
    }else{
        foreach($args as $key=>$value)
            $this->request->data['User'][$key] = $value;
    }
1 голос
/ 05 февраля 2012

Согласно документам , опция url для PaginatorHelper::options имеет следующие 3 подопции:

  • 1008 * рода *
  • направление
  • страница

В вашем CakeRequest::query эти ключи не определены. Я не уверен, почему это будет работать для первой страницы, а не для других, но ваша текущая структура неверна.

Если вы беспокоитесь о передаче значений строки запроса на следующую страницу, имейте это в виду:

По умолчанию PaginatorHelper объединит все текущие параметры передачи и именованные параметры. Так что вам не нужно делать это в каждом файле просмотра.

...