<style> .ra-sitemap{ width:100%; max-width:900px; margin:0 auto; font-family:Arial,sans-serif; } .ra-sitemap-title{ margin:0 0 20px; font-size:28px; line-height:1.3; font-weight:700; } .ra-sitemap-list{ margin:0; padding:0 0 0 30px; list-style:decimal; } .ra-sitemap-list li{ margin:0; padding:11px 0; border-bottom:1px solid #eee; } .ra-sitemap-list a{ color:inherit; text-decoration:none; line-height:1.5; } .ra-sitemap-list a:hover{ text-decoration:none; } .ra-pagination{ display:flex; flex-wrap:wrap; gap:6px; margin-top:25px; justify-content:center; } .ra-pagination a, .ra-pagination span{ display:inline-block; padding:8px 12px; border:1px solid #ddd; border-radius:5px; text-decoration:none; font-size:14px; } .ra-pagination .active{ font-weight:700; } .ra-pagination a:hover{ text-decoration:none; } .ra-loading{ padding:20px 0; text-align:center; opacity:.7; } </style> <div class="ra-sitemap"> <div id="raSitemap"> <div class="ra-loading">Memuat artikel...</div> </div> <div id="raPagination" class="ra-pagination"></div> </div> <script> (function(){ var feedUrl = '/feeds/posts/default'; var perPage = 100; var params = new URLSearchParams(window.location.search); var currentPage = parseInt(params.get('page'), 10) || 1; if(currentPage < 1){ currentPage = 1; } var startIndex = ((currentPage - 1) * perPage) + 1; function loadSitemap(){ var script = document.createElement('script'); script.src = feedUrl + '?alt=json-in-script' + '&start-index=' + startIndex + '&max-results=' + perPage + '&callback=RA_SITEMAP'; document.body.appendChild(script); } window.RA_SITEMAP = function(data){ var container = document.getElementById('raSitemap'); var entries = data.feed.entry || []; if(!entries.length){ container.innerHTML = '<div class="ra-loading">Tidak ada artikel.</div>'; return; } var html = '<ol class="ra-sitemap-list" start="' + startIndex + '">'; for(var i = 0; i < entries.length; i++){ var entry = entries[i]; var title = entry.title && entry.title.$t ? entry.title.$t : 'Tanpa judul'; var link = ''; if(entry.link){ for(var j = 0; j < entry.link.length; j++){ if(entry.link[j].rel === 'alternate'){ link = entry.link[j].href; break; } } } if(link){ html += '<li>' + '<a href="' + link + '">' + escapeHTML(title) + '</a>' + '</li>'; } } html += '</ol>'; container.innerHTML = html; loadTotalArticles(); }; function loadTotalArticles(){ var script = document.createElement('script'); script.src = feedUrl + '?alt=json-in-script' + '&max-results=1' + '&callback=RA_TOTAL'; document.body.appendChild(script); } window.RA_TOTAL = function(data){ var totalArticles = data.feed.openSearch$totalResults ? parseInt( data.feed.openSearch$totalResults.$t, 10 ) : 0; var totalPages = Math.ceil(totalArticles / perPage); createPagination(totalPages); }; function createPagination(totalPages){ var pagination = document.getElementById('raPagination'); var html = ''; if(totalPages <= 1){ pagination.innerHTML = ''; return; } if(currentPage > 1){ html += '<a href="?page=' + (currentPage - 1) + '">‹ Sebelumnya</a>'; } var startPage = Math.max(1, currentPage - 2); var endPage = Math.min(totalPages, currentPage + 2); if(currentPage <= 3){ endPage = Math.min(totalPages, 5); } if(currentPage >= totalPages - 2){ startPage = Math.max(1, totalPages - 4); } for( var page = startPage; page <= endPage; page++ ){ if(page === currentPage){ html += '<span class="active">' + page + '</span>'; }else{ html += '<a href="?page=' + page + '">' + page + '</a>'; } } if(currentPage < totalPages){ html += '<a href="?page=' + (currentPage + 1) + '">Berikutnya ›</a>'; } pagination.innerHTML = html; } function escapeHTML(text){ return text .replace(/&/g,'&') .replace(/</g,'<') .replace(/>/g,'>') .replace(/"/g,'"') .replace(/'/g,'''); } loadSitemap(); })(); </script>