Select your language

In order to add custom pagination in Joomla.

Here is pagination code snippet:

<?php
/*
CUSTOM pagination by abdulwaheed.pk
*****************************************/
$input = Factory::getApplication()->input;

// Retrieve values from the request
$itemid = $input->getInt('Itemid', 0);
$start = $input->getInt('start', 0);
$limit = $input->getInt('limit', 0);
$view = $input->getString('view', 'properties');
$task = 'filter';
$searchword = $input->getString('searchword', '');
$prstatus = $input->getString('prstatus', '');
$category_select = $input->getString('category_select', '');
$location_lv1 = $input->getString('jform[location_lv1]', '');
$location_lv2 = $input->getString('location_lv2', '');
$location_lv3 = $input->getString('location_lv3', '');
$location_lv4 = $input->getString('location_lv4', '');

// These are array-type inputs
$extraid = $input->get('extraid', array(), 'array');
$extraselect = $input->get('extraselect', array(), 'array');

$extraid[47]=isset($extraid[47]) ? $extraid[47]:"";
$extraid[20]=isset($extraid[20]) ? $extraid[20]:"";
$extraid[31]=isset($extraid[31]) ? $extraid[31]:"";
$extraid[24]=isset($extraid[24]) ? $extraid[24]:"";
$extraid[42]=isset($extraid[42]) ? $extraid[42]:"";
$extraid[43]=isset($extraid[43]) ? $extraid[43]:"";

$extraselect[47]=isset($extraselect[47]) ? $extraselect[47]:"";
$extraselect[20]=isset($extraselect[20]) ? $extraselect[20]:"";
$extraselect[31]=isset($extraselect[31]) ? $extraselect[31]:"";
$extraselect[24]=isset($extraselect[24]) ? $extraselect[24]:"";
$extraselect[42]=isset($extraselect[42]) ? $extraselect[42]:"";
$extraselect[43]=isset($extraselect[43]) ? $extraselect[43]:"";

//echo "<h1>".print_r($extraid)."</h1>";

$total=$this->pagination->total-1;
$pagesTotal=$this->pagination->pagesTotal;
$pagesCurrent=$this->pagination->pagesCurrent;

$startpage=0;
$prevpage=$this->pagination->limitstart-$this->pagination->limit;

$nextpage=$this->pagination->limit+$this->pagination->limitstart;

$endpage_=
round($total / $this->pagination->limit);
$endpage=$endpage_*$this->pagination->limit;

//	echo "(End Page: $endpage ) limitstart: ". $this->pagination->limitstart . " limit:".$this->pagination->limit. " total:".$total. " pagesTotal: $pagesTotal" . " pageCurrent: $pagesCurrent" ;
//exit;
$disabled_1=($this->pagination->limitstart==0)? ' class="disabled" ': "";
$disabled_4=($pagesCurrent==$pagesTotal)? ' class="disabled" ': "";

$link_=
"index.php?".urlencode("task=filter&option=com_bt_property&view=properties&searchword=$searchword&prstatus=$prstatus&category_select=$category_select&jform[location_lv1]=$location_lv1&jform[location_lv2]=$location_lv2&jform[location_lv3]=$location_lv3&location_lv4=$location_lv4&extraid[47]=$extraid[47]&extraselect[47]=$extraselect[47]&extraid[20]=$extraid[20]&extraselect[20]=$extraselect[20]&extraid[31]=$extraid[31]&extraselect[31]=$extraselect[31]&extraid[24]=$extraid[24]&extraselect[24]=$extraselect[24]&extraid[42]=$extraid[42]&extraselect[42]=$extraselect[42]&extraid[43]=$extraid[43]&extraselect[43]=$extraselect[43]&method=AND");

$link_=$_SERVER['REQUEST_URI'];
//	echo "<h4>".$_SERVER['REQUEST_URI']."<br>".$link_."</h4>";
//echo "<h1>LINK: $link_</h1>";exit;

function replaceStart($link_, $startpage_){
	// Parse the URL into components
	$parsedUrl = parse_url($link_);
	// Parse the query string into an associative array
	if(isset($parsedUrl['query'])) parse_str($parsedUrl['query'], $queryParams);
//	echo '<pre>';print_r($queryParams);echo"</pre>";
	// Update the 'start' parameter
	$queryParams['start'] = (isset($queryParams['start'])) ? $startpage_ : "?start=".$startpage_; // Replace with the new value
	// Rebuild the query string
	$newQuery = http_build_query($queryParams);
	// Rebuild the URL with the updated query string
	$newUrl = 
		(isset($parsedUrl['scheme']) ? $parsedUrl['scheme'] : 'https://') .
		(isset($parsedUrl['host']) ? $parsedUrl['host'] : $_SERVER['HTTP_HOST']) .
		(isset($parsedUrl['path']) ? $parsedUrl['path'] : '') .
		"?" . $newQuery;
//	echo "<h3>$newUrl</h3>";
	return $newUrl;
}
// FOR Non-SEF use this
$link1=replaceStart($link_, $startpage);
$link2=replaceStart($link_, $prevpage);
// FOR SEF use this
//$link1="?start=".$startpage;
//$link2="?start=".$prevpage;

echo '
<div class="pagination pagination-toolbar clearfix">
<nav class="custom_nav_abdul" role="navigation" aria-label="Pagination">

<ul class="pagination-list">
<li '.$disabled_1.'>
	<a aria-label="Go to start page" class="hasTooltip" title="" href="'.$link1.'&Itemid='.$itemid.'" data-original-title="Start (Page 1 of '.$startpage.')"><i class="fa fa-backward"></i> </a>
</li>

<li '.$disabled_1.'>
<a aria-label="Go to previous page" class="hasTooltip" title="" href="'.$link2.'&Itemid='.$itemid.'" data-original-title="Previous">
<span style="font-weight:bold;"> < </span> </a>
</li>';
// for($i=1;$i<=count($this->pagination->getPaginationPages()['pages']);$i++)

if(isset($this->pagination->getPaginationPages()['pages'])&&count($this->pagination->getPaginationPages()['pages'])>0) {
foreach($this->pagination->getPaginationPages()['pages'] as $arr)
{
	// echo '<pre>';print_r($arr);echo '</pre>';//exit;
	$disabled_2=($arr['data']->active==1&&$arr['data']->text==1)? ' class="disabled" ': "";
	
	//$arr=$this->pagination->getPaginationPages()['pages'][$i];
	if($arr['data']->active) {
		$link3="javascript:void(0);";
		$disabled_3=' class="disabled" ';
	}
	else
	{
	//	$link3="?start=".$arr['data']->base.'&Itemid='.$itemid;
//	echo "<h1>Else : ".$link_, $arr['data']->base."</h1>";
		$link3=replaceStart($link_, $arr['data']->base);

		//$link=$link_.$link3;
		$disabled_3="";
	}
	echo
	'<li '.$disabled_2.'>
	<a href="'.$link3.'" '.$disabled_3.'>'.
	$arr['data']->text
	.'</a></li>';
}
}

$link4=$link_.'?start='.$nextpage.'&Itemid='.$itemid;
$link5=$link_.'?start='.$endpage.'&Itemid='.$itemid;
// FOR Non-SEF use this
$link4=replaceStart($link_, $nextpage);
$link5=replaceStart($link_, $endpage);
// FOR SEF use this
//$link4='?start='.$nextpage.'&Itemid='.$itemid;
//$link5='?start='.$endpage.'&Itemid='.$itemid;
echo
'<li '.$disabled_4.'>
<a aria-label="Go to next page" class="hasTooltip" title="" href="'.$link4.'" data-original-title="Next">
<span style="font-weight:bold;"> > </span> </a>
</li>

<li '.$disabled_4.'>
<a aria-label="Go to end page" class="hasTooltip" title="" href="'.$link5.'" data-original-title="End (Page '.$endpage.' of '.$endpage.')">
<i class="fa fa-forward"></i> </a>
</li>
</ul>
</nav>
</div>';
?>
<style>
.pagination a {
	text-decoration:none !important;
}
.pagination li {
	display: inline;
	padding: 7px 5px;
}
.pagination li a, .pagination li span {
    border: 1px solid #eee;
    margin: 0 !important;
    background: rgb(236, 240, 158);
}

/*
DISABLED
***********/
li.disabled,
li.disabled a, 
a.disabled {
	opacity:1 !important;
}
li.disabled a,
li.disabled span, 
a.disabled {
	background: #eee !important;
	color: grey !important;
	border: 1px solid #eee !important;
}
/* TABLET */
@media(max-width: 768px){
}
	
/* MOBILE */
@media (max-width:569px) {
.custom_nav_abdul {
    overflow: scroll;
    width: 350px;
	height: 44px;
}
}
</style>

Note: beware of 'start' variable , it can be named limitstart or start. So don't forget to check into module/controller code of your component where pagination is applied.

Hope this helped.


Still need help! no problem, feel free to contact us Today


 Abdul Waheed : (Hire Joomla & PHP Pakistani Freelancer)