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