| 
									
										
										
										
											2025-01-18 15:24:30 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Reusable pagination view/template component | 
					
						
							|  |  |  |  * Required variables: | 
					
						
							|  |  |  |  * $currentPage - Current page number | 
					
						
							|  |  |  |  * $totalPages - Total number of pages | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Ensure required variables are set
 | 
					
						
							|  |  |  | if (!isset($currentPage) || !isset($totalPages)) { | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Number of page links to show before and after current page
 | 
					
						
							|  |  |  | $range = 2; | 
					
						
							|  |  |  | ?>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <?php if ($totalPages > 1): ?>
 | 
					
						
							|  |  |  | <nav aria-label="Page navigation" class="mt-4"> | 
					
						
							|  |  |  |     <ul class="pagination justify-content-center d-flex flex-row gap-1"> | 
					
						
							|  |  |  |         <!-- First page --> | 
					
						
							| 
									
										
										
										
											2025-02-28 11:50:54 +00:00
										 |  |  | <?php if ($currentPage > 1): ?>
 | 
					
						
							|  |  |  |         <li class="page-item"> | 
					
						
							|  |  |  |             <a class="page-link" href="<?= htmlspecialchars($app_root . '?page=' . $page . $params) ?>">First</a> | 
					
						
							|  |  |  |         </li> | 
					
						
							|  |  |  |         <li class="page-item"> | 
					
						
							|  |  |  |             <a class="page-link" href="<?= htmlspecialchars($app_root . '?page=' . $page . ($currentPage > 1 ? '&page_num=' . ($currentPage - 1) : '') . $params) ?>">«</a> | 
					
						
							|  |  |  |         </li> | 
					
						
							|  |  |  | <?php else: ?>
 | 
					
						
							|  |  |  |         <li class="page-item disabled"> | 
					
						
							|  |  |  |             <span class="page-link">First</span> | 
					
						
							|  |  |  |         </li> | 
					
						
							|  |  |  |         <li class="page-item disabled"> | 
					
						
							|  |  |  |             <span class="page-link">«</span> | 
					
						
							|  |  |  |         </li> | 
					
						
							|  |  |  | <?php endif; ?>
 | 
					
						
							| 
									
										
										
										
											2025-01-18 15:24:30 +00:00
										 |  |  |         <!-- Page numbers --> | 
					
						
							| 
									
										
										
										
											2025-02-28 11:50:54 +00:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2025-01-18 15:24:30 +00:00
										 |  |  |         for ($i = 1; $i <= $totalPages; $i++) { | 
					
						
							|  |  |  |             // Show first, last, current page, 2 pages before and after current, and step pages (10, 20, etc.)
 | 
					
						
							|  |  |  |             if ($i === 1 || | 
					
						
							|  |  |  |                 $i === $totalPages || | 
					
						
							|  |  |  |                 $i === $currentPage || | 
					
						
							|  |  |  |                 $i === $currentPage - 1 || | 
					
						
							|  |  |  |                 $i === $currentPage + 1 || | 
					
						
							|  |  |  |                 $i === $currentPage - 2 || | 
					
						
							|  |  |  |                 $i === $currentPage + 2 || | 
					
						
							|  |  |  |                 ($i % 10 === 0 && $i > 10) | 
					
						
							|  |  |  |                 ) { ?>
 | 
					
						
							| 
									
										
										
										
											2025-02-28 11:50:54 +00:00
										 |  |  |         <li class="page-item <?= $i === (int)$currentPage ? 'active' : '' ?>"> | 
					
						
							|  |  |  |             <a class="page-link" href="<?= htmlspecialchars($app_root . '?page=' . $page . ($i > 1 ? '&page_num=' . $i : '') . $params) ?>"><?= $i ?></a>
 | 
					
						
							|  |  |  |         </li> | 
					
						
							|  |  |  | <?php  } elseif ($i === $currentPage - 3 || $i === $currentPage + 3) { ?>
 | 
					
						
							|  |  |  |         <li class="page-item disabled"> | 
					
						
							|  |  |  |             <span class="page-link">...</span> | 
					
						
							|  |  |  |         </li> | 
					
						
							|  |  |  | <?php  } ?>
 | 
					
						
							|  |  |  | <?php } ?>
 | 
					
						
							| 
									
										
										
										
											2025-01-18 15:24:30 +00:00
										 |  |  |         <!-- Last page --> | 
					
						
							| 
									
										
										
										
											2025-02-28 11:50:54 +00:00
										 |  |  | <?php if ($currentPage < $totalPages): ?>
 | 
					
						
							|  |  |  |         <li class="page-item"> | 
					
						
							|  |  |  |             <a class="page-link" href="<?= htmlspecialchars($app_root . '?page=' . $page . '&page_num=' . ($currentPage + 1) . $params) ?>">»</a> | 
					
						
							|  |  |  |         </li> | 
					
						
							|  |  |  |         <li class="page-item"> | 
					
						
							|  |  |  |             <a class="page-link" href="<?= htmlspecialchars($app_root . '?page=' . $page . '&page_num=' . $totalPages . $params) ?>">Last</a> | 
					
						
							|  |  |  |         </li> | 
					
						
							|  |  |  | <?php else: ?>
 | 
					
						
							|  |  |  |         <li class="page-item disabled"> | 
					
						
							|  |  |  |             <span class="page-link">»</span> | 
					
						
							|  |  |  |         </li> | 
					
						
							|  |  |  |         <li class="page-item disabled"> | 
					
						
							|  |  |  |             <span class="page-link">Last</span> | 
					
						
							|  |  |  |         </li> | 
					
						
							|  |  |  | <?php endif; ?>
 | 
					
						
							| 
									
										
										
										
											2025-01-18 15:24:30 +00:00
										 |  |  |     </ul> | 
					
						
							|  |  |  | </nav> | 
					
						
							| 
									
										
										
										
											2025-02-28 11:50:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-18 15:24:30 +00:00
										 |  |  | <?php endif; ?>
 |