diff --git a/code/LeftAndMainSubsites.php b/code/LeftAndMainSubsites.php index d4d6a37..9fe8f5b 100644 --- a/code/LeftAndMainSubsites.php +++ b/code/LeftAndMainSubsites.php @@ -124,6 +124,12 @@ class LeftAndMainSubsites extends Extension { function augmentNewSiteTreeItem(&$item) { $item->SubsiteID = Subsite::currentSubsiteID(); } + + function onAfterSave($record) { + if($record->hasMethod('RelatedPages') && $record->RelatedPages()) { + FormResponse::status_message('Saved, please update related pages.', 'good'); + } + } } diff --git a/code/RelatedPageLink.php b/code/RelatedPageLink.php new file mode 100644 index 0000000..0092ddb --- /dev/null +++ b/code/RelatedPageLink.php @@ -0,0 +1,62 @@ + 'SiteTree', + 'RelatedPage' => 'SiteTree' + ); + + function getCMSFields() { + $subsites = Subsite::getSubsitesForMember(); + if(!$subsites) $subsites = new DataObjectSet(); + if(Subsite::hasMainSitePermission()) { + $subsites->push(new ArrayData(array('Title' => 'Main site', 'ID' => 0))); + } + + if($subsites->Count()) { + $subsiteSelectionField = new DropdownField( + "CopyContentFromID_SubsiteID", + "Subsite", + $subsites->toDropdownMap('ID', 'Title'), + ($this->CopyContentFromID) ? $this->CopyContentFrom()->SubsiteID : Session::get('SubsiteID') + ); + } + + // Setup the linking to the original page. + $pageSelectionField = new SubsitesTreeDropdownField( + "RelatedPageID", + _t('VirtualPage.CHOOSE', "Choose a page to link to"), + "SiteTree", + "ID", + "MenuTitle" + ); + + $pageSelectionField->setFilterFunction(create_function('$item', 'return $item->ClassName != "VirtualPage";')); + + if($subsites->Count()) { + $fields = new FieldSet( + $subsiteSelectionField, + $pageSelectionField + ); + } else { + $fields = new FieldSet( + $pageSelectionField + ); + } + + return $fields; + } + + function RelatedPageAdminLink() { + return '' . Convert::raw2xml($this->RelatedPage()->Title) . ''; + } +} + +?> diff --git a/code/SiteTreeSubsites.php b/code/SiteTreeSubsites.php index 92615ee..55f9d31 100644 --- a/code/SiteTreeSubsites.php +++ b/code/SiteTreeSubsites.php @@ -34,7 +34,10 @@ class SiteTreeSubsites extends SiteTreeDecorator { return array( 'has_one' => array( 'Subsite' => 'Subsite', // The subsite that this page belongs to - 'MasterPage' => 'SiteTree', // Optional; the page that is the content master + 'MasterPage' => 'SiteTree',// Optional; the page that is the content master + ), + 'has_many' => array( + 'RelatedPages' => 'SiteTree' ) ); } @@ -150,6 +153,23 @@ class SiteTreeSubsites extends SiteTreeDecorator { 'URLSegment' ); } + + // Related pages + $fields->addFieldToTab( + 'Root.Related', + new LiteralField('RelatedNote', '
You can list pages here that are related to this page.
When this page is updated, you will get a reminder to check whether these related pages need to be updated as well.