Pages = Versioned::get_by_stage('SiteTree', 'Live'); $newPages = new DataObjectSet(); foreach($this->Pages as $page) { // Only include pages from this host and pages which are not an instance of ErrorPage if(parse_url($page->AbsoluteLink(), PHP_URL_HOST) == $_SERVER['HTTP_HOST'] && !($page instanceof ErrorPage)) { // If the page has been set to 0 priority, we set a flag so it won't be included if(isset($page->Priority) && $page->Priority <= 0) { $page->Include = false; } else { $page->Include = true; } // The one field that isn't easy to deal with in the template is // Change frequency, so we set that here. $properties = $page->toMap(); $created = new Datetime($properties['Created']); $now = new Datetime(); $versions = $properties['Version']; $timediff = $now->format('U') - $created->format('U'); // Check how many revisions have been made over the lifetime of the // Page for a rough estimate of it's changing frequency. $period = $timediff / ($versions + 1); if($period > 60*60*24*365) { // > 1 year $page->ChangeFreq='yearly'; } else if($period > 60*60*24*30) { // > ~1 month $page->ChangeFreq='monthly'; } else if($period > 60*60*24*7) { // > 1 week $page->ChangeFreq='weekly'; } else if($period > 60*60*24) { // > 1 day $page->ChangeFreq='daily'; } else if($period > 60*60) { // > 1 hour $page->ChangeFreq='hourly'; } else { // < 1 hour $page->ChangeFreq='always'; } $newPages->push($page); } } return $newPages; } static function ping() { //Don't ping if the site has disabled it, or if the site is in dev mode if(!GoogleSitemap::$pings || Director::isDev()) return; $location = urlencode(Director::absoluteBaseURL() . '/sitemap.xml'); $response = HTTP::sendRequest("www.google.com", "/webmasters/sitemaps/ping", "sitemap=" . $location); return $response; } protected static $pings = true; /** * Disables pings to google when the sitemap changes * To use this, in your _config.php file simply include the line * GoogleSitemap::DisableGoogleNotification(); */ static function DisableGoogleNotification() { self::$pings = false; } function index($url) { // We need to override the default content-type ContentNegotiator::disable(); header('Content-type: application/xml; charset="utf-8"'); // But we want to still render. return array(); } } ?>