renderXML($items); } } elseif(!empty($_GET['index'])) // Sitemap index. { $this->renderSitemapIndex(); } else // From Gsitemap Database Table. { $this->renderXML(); } } /** * @param $items * @return void */ function renderXML($items=array()) { header('Content-type: application/xml', TRUE); $xml = " "; if(empty($items)) { $smArray = e107::getDb()->retrieve("gsitemap", "*", "gsitemap_active IN (".USERCLASS_LIST.") ORDER BY gsitemap_order ",true); $xml .= $this->renderXMLItems($smArray, 'gsitemap_'); } else { $xml .= $this->renderXMLItems($items); } $xml .= " "; echo $xml; } function renderXMLItems($data, $prefix = '') { $tp = e107::getParser(); $xml = ''; foreach($data as $sm) { $url = $sm[$prefix.'url']; if($url[0] === '/') { $url = ltrim($url, '/'); } $loc = (strpos($url, 'http') === 0) ? $url : SITEURL.$tp->replaceConstants($url,true); $xml .= " ".$loc.""; if(!empty($sm[$prefix.'image'])) { $imgUrl = $sm[$prefix.'image']; if($imgUrl[0] === '/') { $imgUrl = ltrim($imgUrl, '/'); } $imgUrl = (strpos($imgUrl, 'http') === 0) ? $imgUrl : SITEURL.$tp->replaceConstants($imgUrl,true); $xml .= " ".$imgUrl." "; } $xml .= " ".date('c', (int) $sm[$prefix.'lastmod'])." ".$sm[$prefix.'freq']." ".$sm[$prefix.'priority']." "; } return $xml; } /** * Generates a Sitemap Index containing references to multiple sitemaps. * * @param array $sitemaps An array of sitemaps, where each item is an associative array with keys: * - 'loc' (string): The full URL of the sitemap. * - 'lastmod' (int|null): A timestamp representing the last modification date of the sitemap (optional). * @return void */ function renderSitemapIndex() { header('Content-type: application/xml', true); // Begin the sitemap index $xml = "\n"; $xml .= "\n"; $obj = e107::getAddon('gsitemap', 'e_url'); $sitemaps = []; if($items = e107::callMethod($obj, 'config')) { foreach($items as $key => $val) { if($key == 'sitemaps' || $key == 'index') { continue; } $sitemaps[] = ['loc' => e107::url('gsitemap',$key, null, ['mode'=>'full']), 'lastmod' => (time() - 86400)]; } } foreach($sitemaps as $sitemap) { $xml .= "\n"; $xml .= "\t{$sitemap['loc']}\n"; if(!empty($sitemap['lastmod'])) // Optional: Include the last modified date, if available { $xml .= "\t" . date('c', (int) $sitemap['lastmod']) . "\n"; } $xml .= "\n"; } $xml .= ""; // Output the XML echo $xml; } } // HTML below. if(e_QUERY == "show" || !empty($_GET['show'])) { e107::canonical('gsitemap'); e107::route('gsitemap/index'); require_once(HEADERF); $nfArray = e107::getDb()->retrieve("gsitemap", "*", "gsitemap_active IN (".USERCLASS_LIST.") ORDER BY gsitemap_order ",true); $tp = e107::getParser(); if(deftrue('BOOTSTRAP')) { $bread = array( 0 => array('text' => $tp->toHTML(GSLAN_Name), 'url'=> null ) // e107::url('gsitemap','index') ); $text = e107::getForm()->breadcrumb($bread); e107::breadcrumb($bread); } else { $text = ''; } $text .= "
"; e107::getRender() -> tablerender(GSLAN_Name, $text); require_once(FOOTERF); exit; } new gsitemap_xml;