Ensure URL segment field type before using its API, and add docs around subsite and fluent domain compatibility

This commit is contained in:
Robbie Averill 2019-05-31 10:28:36 +12:00
parent d1fc84d15c
commit 3b8207d70c
2 changed files with 14 additions and 1 deletions

View File

@ -48,3 +48,14 @@ to speak to your website administrator or hosting provider to facilitate this.
You can simulate subsite access without setting up virtual hosts by appending ?SubsiteID=<ID> to the request.
### How do Subsite domains work with Fluent domains?
The Subsites module and Fluent translation module both provide the concept of defining "domains" and let you
configure the host name for it. This functionality is essentially performing the same duty in both modules.
In the "URL segment" field for CMS pages both Subsites and Fluent will add their context to the value. If you
have a Subsite domain configured but no Fluent domain, Fluent will respect the existing domain and add its
locale context to the value. If you have a Subsite domain configured and a Fluent domain configure, Fluent will
use its own domain host name value, and the Subsite domain value will be lost. For this reason, you will need
to ensure that you use the same host name in both Subsite and Fluent domain entries.

View File

@ -3,6 +3,7 @@
namespace SilverStripe\Subsites\Extensions;
use Page;
use SilverStripe\CMS\Forms\SiteTreeURLSegmentField;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Control\Controller;
use SilverStripe\Control\Director;
@ -150,6 +151,7 @@ class SiteTreeSubsites extends DataExtension
// replace readonly link prefix
$subsite = $this->owner->Subsite();
$nested_urls_enabled = Config::inst()->get(SiteTree::class, 'nested_urls');
/** @var Subsite $subsite */
if ($subsite && $subsite->exists()) {
// Use baseurl from domain
$baseLink = $subsite->absoluteBaseURL();
@ -163,7 +165,7 @@ class SiteTreeSubsites extends DataExtension
}
$urlsegment = $fields->dataFieldByName('URLSegment');
if ($urlsegment) {
if ($urlsegment && $urlsegment instanceof SiteTreeURLSegmentField) {
$urlsegment->setURLPrefix($baseLink);
}
}