views:

467

answers:

2

Hi ..., Im trying to implement pagination using multiple searching criteria. Supposed I Have student table. I also use pagination when the list of student displayed. The pagination link is. site_url . '/student/page/'; so I use $config['uri_segment'] = 1; so the pagination link will be

<a href="http://mysite/index.php/student/page/0"&gt;1&lt;/a&gt;
<a href="http://mysite/index.php/student/page/1"&gt;2&lt;/a&gt;

and son.

After that I wanna search student data using 3 searching criteria implemented using textfield.

id  name    address.

user can search by id or name or address or combination of the three criteria. the url become

http://mysite/index.php/student/page/0
href=http://mysite/index.php/student/page/1

and son.

but I use get method for searching. and while trying to search using the search criteria field the url become

href="http://mysite/index.php/student/page/1?id=1&amp;name=a&amp;address=b

the problem occurred when I try create pagination based on criteria. because the pagination link have contain query string i don't know how to create become

href="http://mysite/index.php/student/page/0?id=1&amp;name=a&amp;address=b
href="http://mysite/index.php/student/page/1?id=1&amp;name=a&amp;address=b

or do you have a best practice to solve this problem ?


Hi phill .... I have try your suggestion.

$array = array('id' => '001', 'name' => 'a', 'address' => 'canada');

the url become id/001/name/a/address/canada. I use $this->uri->uri_to_assoc() function to get key and value of the segment.

array (
    id => 001,
    name=>a,
    address=>canada
)

but while there some searching criteria that not included while searching. let say, the user only search by name and address. the array become $array = array('id' => '', 'name' => 'a', 'address' => 'canada'); and the url id/name/a/address/canada the assoc array become

array (
    id => name,
    a=>address,
    canada=>
)

the assoc array is not disorganized again. so I can't get the right value of the assoc array. I think i will set the identifier to the searching criteria if not included. supposed i put #.

if isset($_GET['id']) then
$id = '#'
else 
$id = $_GET['id']

$array = array('id' => $id, 'name' => 'a', 'address' => 'canada');

How about that ... ? or if there are another best practice ?

+1  A: 

For that I would use $this->uri->uri_to_assoc():

index.php/user/search/name/joe/location/UK/gender/male

Using this function you can turn the URI into an associative array with this prototype:

[array]
(
    'name' => 'joe'
    'location' => 'UK'
    'gender' => 'male'
)

See the full documentation here.

You can still use page/1 as the first lot then have /name/whatever afterwards.

Phil Sturgeon
Hi ..., phil. I have try your suggestion. but I have some problem. I have edit my question. Hope you can check my question and give me some problem solving.Thanks
adisembiring
Just make sure you dont put keys into the URL if they don't have a value.
Phil Sturgeon
A: 

Actualy, we can create pagination with multiple and unlimited criteria. Read here http://dengkul.com/2010/07/08/codeigniter-pagination-with-multiple-unlimited-searching-criteria/

Samuel Prasetya