Skip to content

Commit

Permalink
Merge pull request #418 from creative-commoners/pulls/2.3/fluent-doma…
Browse files Browse the repository at this point in the history
…in-docs

Ensure URL segment field type before using its API, and add docs around subsite and fluent domain compatibility
  • Loading branch information
Garion Herman authored Jun 5, 2019
2 parents 33244fb + f650382 commit 5c4a655
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 4 deletions.
11 changes: 11 additions & 0 deletions docs/en/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 configured, 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.
4 changes: 3 additions & 1 deletion src/Extensions/SiteTreeSubsites.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -150,6 +151,7 @@ public function updateCMSFields(FieldList $fields)
// 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();
Expand All @@ -163,7 +165,7 @@ public function updateCMSFields(FieldList $fields)
}

$urlsegment = $fields->dataFieldByName('URLSegment');
if ($urlsegment) {
if ($urlsegment && $urlsegment instanceof SiteTreeURLSegmentField) {
$urlsegment->setURLPrefix($baseLink);
}
}
Expand Down
28 changes: 25 additions & 3 deletions tests/php/SiteTreeSubsitesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
use Page;
use SilverStripe\CMS\Controllers\CMSMain;
use SilverStripe\CMS\Controllers\ModelAsController;
use SilverStripe\CMS\Forms\SiteTreeURLSegmentField;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Control\Director;
use SilverStripe\Core\Config\Config;
use SilverStripe\Core\Convert;
use SilverStripe\ErrorPage\ErrorPage;
use SilverStripe\Forms\FieldList;
use SilverStripe\Security\Member;
Expand All @@ -21,6 +21,7 @@
use SilverStripe\Subsites\Tests\SiteTreeSubsitesTest\TestErrorPage;
use SilverStripe\Versioned\Versioned;
use SilverStripe\View\SSViewer;
use TractorCow\Fluent\Extension\FluentSiteTreeExtension;

class SiteTreeSubsitesTest extends BaseSubsiteTest
{
Expand All @@ -33,7 +34,9 @@ class SiteTreeSubsitesTest extends BaseSubsiteTest
];

protected static $illegal_extensions = [
SiteTree::class => ['Translatable'] // @todo implement Translatable namespace
SiteTree::class => [
FluentSiteTreeExtension::class,
],
];

protected function setUp()
Expand Down Expand Up @@ -449,7 +452,7 @@ public function provideAlternateAbsoluteLink()

/**
* @dataProvider provideAlternateAbsoluteLink
* @param name $pageFixtureName
* @param string $pageFixtureName
* @param string|null $action
* @param string $expectedAbsoluteLink
*/
Expand All @@ -465,4 +468,23 @@ public function testAlternateAbsoluteLink($pageFixtureName, $action, $expectedAb

$this->assertEquals($expectedAbsoluteLink, $result);
}

public function testURLSegmentBaseIsSetToSubsiteBaseURL()
{
// This subsite has a domain with 'one.example.org' as the primary domain
/** @var Subsite $subsite */
$subsite = $this->objFromFixture(Subsite::class, 'domaintest1');
Subsite::changeSubsite($subsite);

$page = new SiteTree();
$page->SubsiteID = $subsite->ID;
$page->write();
$fields = $page->getCMSFields();

/** @var SiteTreeURLSegmentField $urlSegmentField */
$urlSegmentField = $fields->dataFieldByName('URLSegment');
$this->assertInstanceOf(SiteTreeURLSegmentField::class, $urlSegmentField);

$this->assertSame('http://one.example.org/', $urlSegmentField->getURLPrefix());
}
}

0 comments on commit 5c4a655

Please sign in to comment.