예제 #1
0
 public function Items()
 {
     $this->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
         // We prefix $_SERVER['HTTP_HOST'] with 'http://' so that parse_url to help parse_url identify the host name component; we could use another protocol (like
         // 'ftp://' as the prefix and the code would work the same.
         if (parse_url($page->AbsoluteLink(), PHP_URL_HOST) == parse_url('http://' . $_SERVER['HTTP_HOST'], PHP_URL_HOST) && !$page instanceof ErrorPage) {
             // If the page has been set to 0 priority, we set a flag so it won't be included
             if ($page->canView() && (!isset($page->Priority) || $page->Priority > 0)) {
                 // 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 SSDatetime();
                 $created->value = $properties['Created'];
                 $now = new SSDatetime();
                 $now->value = date('Y-m-d H:i:s');
                 $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';
                 } elseif ($period > 60 * 60 * 24 * 30) {
                     // > ~1 month
                     $page->ChangeFreq = 'monthly';
                 } elseif ($period > 60 * 60 * 24 * 7) {
                     // > 1 week
                     $page->ChangeFreq = 'weekly';
                 } elseif ($period > 60 * 60 * 24) {
                     // > 1 day
                     $page->ChangeFreq = 'daily';
                 } elseif ($period > 60 * 60) {
                     // > 1 hour
                     $page->ChangeFreq = 'hourly';
                 } else {
                     // < 1 hour
                     $page->ChangeFreq = 'always';
                 }
                 $newPages->push($page);
             }
         }
     }
     return $newPages;
 }