mirror of
https://github.com/silverstripe/silverstripe-cms
synced 2024-10-22 08:05:56 +02:00
getViewer will now locate and use the correct templates for pages which don't have their own controller
This commit is contained in:
parent
e17fb17520
commit
47582b3e3c
31
code/controllers/ContentController.php
Normal file → Executable file
31
code/controllers/ContentController.php
Normal file → Executable file
@ -371,6 +371,37 @@ HTML;
|
|||||||
return i18n::convert_rfc1766($locale);
|
return i18n::convert_rfc1766($locale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an SSViewer object to render the template for the current page.
|
||||||
|
*
|
||||||
|
* @param $action string
|
||||||
|
*
|
||||||
|
* @return SSViewer
|
||||||
|
*/
|
||||||
|
public function getViewer($action) {
|
||||||
|
// Manually set templates should be dealt with by Controller::getViewer()
|
||||||
|
if(isset($this->templates[$action]) && $this->templates[$action]
|
||||||
|
|| (isset($this->templates['index']) && $this->templates['index'])
|
||||||
|
|| $this->template
|
||||||
|
) {
|
||||||
|
return parent::getViewer($action);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prepare action for template search
|
||||||
|
if($action == "index") $action = "";
|
||||||
|
else $action = '_' . $action;
|
||||||
|
|
||||||
|
// Find templates by dataRecord
|
||||||
|
$templates = SSViewer::get_templates_by_class(get_class($this->dataRecord), $action, "SiteTree");
|
||||||
|
|
||||||
|
// Next, we need to add templates for all controllers
|
||||||
|
$templates += SSViewer::get_templates_by_class(get_class($this), $action, "Controller");
|
||||||
|
|
||||||
|
return new SSViewer($templates);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This action is called by the installation system
|
* This action is called by the installation system
|
||||||
*/
|
*/
|
||||||
|
48
tests/controller/ContentControllerTest.php
Normal file → Executable file
48
tests/controller/ContentControllerTest.php
Normal file → Executable file
@ -123,6 +123,44 @@ class ContentControllerTest extends FunctionalTest {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests that {@link ContentController::getViewer()} chooses the correct templates.
|
||||||
|
*
|
||||||
|
* @covers ContentController::getViewer()
|
||||||
|
**/
|
||||||
|
public function testGetViewer() {
|
||||||
|
|
||||||
|
// // Test a page without a controller (ContentControllerTest_PageWithoutController.ss)
|
||||||
|
$page = new ContentControllerTestPageWithoutController();
|
||||||
|
$page->URLSegment = "test";
|
||||||
|
$page->write();
|
||||||
|
$page->publish("Stage", "Live");
|
||||||
|
|
||||||
|
$response = $this->get($page->RelativeLink());
|
||||||
|
$this->assertEquals("ContentControllerTestPageWithoutController", $response->getBody());
|
||||||
|
|
||||||
|
|
||||||
|
// // This should fall over to user Page.ss
|
||||||
|
$page = new ContentControllerTestPage();
|
||||||
|
$page->URLSegment = "test";
|
||||||
|
$page->write();
|
||||||
|
$page->publish("Stage", "Live");
|
||||||
|
|
||||||
|
$response = $this->get($page->RelativeLink());
|
||||||
|
$this->assertEquals("Foo", $response->getBody());
|
||||||
|
|
||||||
|
|
||||||
|
// Test that the action template is rendered.
|
||||||
|
$page = new ContentControllerTestPage();
|
||||||
|
$page->URLSegment = "page-without-controller";
|
||||||
|
$page->write();
|
||||||
|
$page->publish("Stage", "Live");
|
||||||
|
|
||||||
|
$response = $this->get($page->RelativeLink("test"));
|
||||||
|
$this->assertEquals("ContentControllerTestPage_test", $response->getBody());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class ContentControllerTest_Page extends Page { }
|
class ContentControllerTest_Page extends Page { }
|
||||||
@ -142,3 +180,13 @@ class ContentControllerTest_Page_Controller extends Page_Controller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For testing templates
|
||||||
|
class ContentControllerTestPageWithoutController extends Page { }
|
||||||
|
|
||||||
|
class ContentControllerTestPage extends Page { }
|
||||||
|
class ContentControllerTestPage_Controller extends Page_Controller {
|
||||||
|
private static $allowed_actions = array(
|
||||||
|
"test",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
1
tests/templates/ContentControllerTestPageWithoutController.ss
Executable file
1
tests/templates/ContentControllerTestPageWithoutController.ss
Executable file
@ -0,0 +1 @@
|
|||||||
|
ContentControllerTestPageWithoutController
|
1
tests/templates/ContentControllerTestPage_test.ss
Executable file
1
tests/templates/ContentControllerTestPage_test.ss
Executable file
@ -0,0 +1 @@
|
|||||||
|
ContentControllerTestPage_test
|
Loading…
Reference in New Issue
Block a user