1 <?php
2
3 4 5 6 7 8
9 class GoogleSitemapDecorator extends SiteTreeDecorator {
10
11 function () {
12 return array(
13 'db' => array(
14 "Priority" => "Varchar(5)",
15 )
16 );
17 }
18
19 function updateCMSFields(&$fields) {
20 $pagePriorities = array(
21 '' => _t('SiteTree.PRIORITYAUTOSET','Auto-set based on page depth'),
22 '-1' => _t('SiteTree.PRIORITYNOTINDEXED', "Not indexed"),
23 '1.0' => '1 - ' . _t('SiteTree.PRIORITYMOSTIMPORTANT', "Most important"),
24 '0.9' => '2',
25 '0.8' => '3',
26 '0.7' => '4',
27 '0.6' => '5',
28 '0.5' => '6',
29 '0.4' => '7',
30 '0.3' => '8',
31 '0.2' => '9',
32 '0.1' => '10 - ' . _t('SiteTree.PRIORITYLEASTIMPORTANT', "Least important")
33 );
34
35 $fields->addFieldsToTab('Root.Content.Metadata', array(
36 new LiteralField(
37 "GoogleSitemapIntro",
38 "<p>" .
39 sprintf(
40 _t(
41 'SiteTree.METANOTEPRIORITY',
42 "Manually specify a Google Sitemaps priority for this page (%s)"
43 ),
44 '<a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=71936#prioritize" target="_blank">?</a>'
45 ) .
46 "</p>"
47 ),
48 new DropdownField("Priority", $this->owner->fieldLabel('Priority'), $pagePriorities)
49 ));
50 }
51
52 function updateFieldLabels(&$labels) {
53 parent::updateFieldLabels($labels);
54
55 $labels['Priority'] = _t('SiteTree.METAPAGEPRIO', "Page Priority");
56 }
57
58 function onAfterPublish() {
59 GoogleSitemap::ping();
60 }
61
62 function onAfterUnpublish() {
63 GoogleSitemap::ping();
64 }
65
66 67 68 69
70 function getPriority() {
71 if ($this->owner->getField('Priority'))
72 return $this->owner->getField('Priority');
73
74 if ($this->owner->Parent()->Priority < 0)
75 return -1;
76 $parentStack = $this->owner->parentStack();
77 $numParents = is_array($parentStack) ? count($parentStack) - 1: 0;
78 return max(0.1, 1.0 - ($numParents / 10));
79 }
80 }
81
82
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the
Silverstripe Forums to ask development related questions.
-