Add extension to correctly support element preview

This commit is contained in:
Michal Kleiner 2023-06-22 01:13:08 +10:00
parent b855a555c8
commit a052bfd590
2 changed files with 42 additions and 0 deletions

View File

@ -64,3 +64,12 @@ SilverStripe\Subsites\Admin\SubsiteAdmin:
SilverStripe\SiteConfig\SiteConfigLeftAndMain: SilverStripe\SiteConfig\SiteConfigLeftAndMain:
extensions: extensions:
- SilverStripe\Subsites\Extensions\SubsiteMenuExtension - SilverStripe\Subsites\Extensions\SubsiteMenuExtension
---
Name: subsite-preview-elemental
Only:
classexists: DNADesign\Elemental\Models\BaseElement
---
DNADesign\Elemental\Models\BaseElement:
extensions:
- SilverStripe\Subsites\Extensions\BaseElementSubsites

View File

@ -0,0 +1,33 @@
<?php
namespace SilverStripe\Subsites\Extensions;
use SilverStripe\Control\HTTP;
use SilverStripe\ORM\DataExtension;
/**
* Extension for the BaseElement object to add subsites support for CMS previews
*/
class BaseElementSubsites extends DataExtension
{
/**
* Set SubsiteID to avoid errors when a page doesn't exist on the CMS domain.
*
* @param string &$link
* @param string|null $action
* @return string
*/
public function updatePreviewLink(&$link)
{
// Get subsite ID from the element or from its page. Defaults to 0 automatically.
$subsiteID = $this->owner->SubsiteID;
if (is_null($subsiteID)) {
$page = $this->owner->getPage();
if ($page) {
$subsiteID = $page->SubsiteID;
}
}
$link = HTTP::setGetVar('SubsiteID', intval($subsiteID), $link);
}
}