phpcakephpcakephp-2.0

Cakephp 2.0 Pagination issue. How to pass arguments in pagination link?


Cakephp 2.0 Pagination issue. How to pass arguments in pagination link?

I passed the arguments like

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

but after 2 nd page its not working .

On first page submitted values are coming in $this->request->query but from second page its coming in $this->params->named but it needs to come in $this->request->query

My Pagination part from view file:

<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'));
    ?>

while printing params on first page :

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

    )

while printing params on second page :

    [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>

Solution

  • I added the following code in View file and now every thing is working fine. in all pages param values are coming in request->query

    $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)); 
    

    And in Controller action method I added the following

        $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;
        }