Fungsi PHP: Paging dengan Parameter Tambahan

Dulu sudah pernah buat helper paging atau pagination untuk Codeigniter, dengan fitur untuk ditambahkan parameter seperti filter, lengkap dengan menggunakan URI assoc atau Associative Array. Tapi kali ini rasanya perlu dibuat fungsi paging untuk versi PHP murni alias tanpa framework (CI), karena kadang ini diperlukan juga untuk script-script pendek, atau yang perlu menggunakan fungsi ini untuk belajar.

Proses paging biasanya yang diperlukan adalah total record, offset, dan limit dari situ aja bisa didapat jumlah halaman yang kemudian diolah jadi link-link dari offset dan limit. Di sini ada tambahan parameter yaitu query string yang disertakan ke dalam link paging tadi, artinya parameter dari GET nantinya juga disertakan di link paging tersebut.

Langsung saja, bisa dilihat demonya di sini.
Atau copas sourcenya di sini.

Berikut fungsi pagingnya:

function paging($varnm, $total, $offset, $limit, $qstr='')
{
	//query string
	$nqstr = '';
	foreach($qstr as $key => $value)
	{
		if ($varnm!=$key)
			$nqstr .= $key.'='.$value.'&';
	}

	//offset top bot
	$p_str = $rt = '';
	if ($offset=='') $offset=0;
	$lim_bot = 4;
	$lim_top = 3;
	$bot = ($offset/$limit)-$lim_bot;
	$top = ($offset/$limit)+$lim_top;

	if ($bot$limit)
	{
		$offsetnum = floor($total/$limit);
		$offsetmod = $total%$limit;
		if ($offsetmod>0)
			$offsetnum++;

		for($i=0;$i$i)
			{				
				if($pp==$offset)
					$p_str .= ''.$j.' ';
				else
					$p_str .= '<a href="?'.$nqstr.''.$varnm.'='.$pp.'">'.$j.'</a> ';
			}
		}

		//prev next first last
		$prev = $next = '';
		$p_prev = $p_next = 0;
		if ($offset>0)
			$p_prev = ($offset-$limit);
		if ($offset=0)
			$prev = '?'.$nqstr.$varnm.'='.$p_prev;
		if ($total>=$p_next)
			$next = '?'.$nqstr.$varnm.'='.$p_next;

		$first = '?'.$nqstr.$varnm.'=0';
		$last = '?'.$nqstr.$varnm.'='.($total-1);

		$rt = sprintf("Showing %s of %s. <a href="\"%s\"">First</a> <a href="\"%s\""><</a> %s <a href="\"%s\"">></a> <a href="\"%s\"">Last</a> ", $limit, $total, $first, $prev, $p_str, $next, $last);
	}
	else if ($total > 0)
		$rt = sprintf("Showing %s of %s.", $total, $total);

	//if no record  found
	if ($rt=='') $rt = "No record found.";

	return $rt;
}

Tinggalkan komentar

Alamat email Anda tidak akan dipublikasikan.