renderWith 不覆盖模板
renderWith not overriding the Template
我已经创建了一个控制器来覆盖模板,如果它找到具有值的参数但由于某种原因它没有覆盖默认模板。
<?php
namespace {
use SilverStripe\CMS\Controllers\ContentController;
use SilverStripe\Control\Controller;
class ForSalePageController extends ContentController
{
/**
* An array of actions that can be accessed via a request. Each array element should be an action name, and the
* permissions or conditions required to allow the user to access it.
*
* <code>
* [
* 'action', // anyone can access this action
* 'action' => true, // same as above
* 'action' => 'ADMIN', // you must have ADMIN permissions to access this action
* 'action' => '->checkAction' // you can only access this action if $this->checkAction() returns true
* ];
* </code>
*
* @var array
*/
protected function init()
{
parent::init();
$printVar = Controller::curr()->getRequest()->getVar('print');
if ($printVar && $printVar === 'portrait') {
$this->renderWith('PrintPortrait');
}
}
}
}
即使有一个参数与值匹配,它仍然使用默认模板呈现页面 ForSalePage.ss
init()
方法不适用于return输入数据或设置模板。这就是 index()
方法(或动作)的用武之地。索引操作是默认操作,它必须 return 一些东西。呈现的字符串或包含要在默认模板中呈现的数据的数组。
您想覆盖默认模板和 return 呈现的字符串,所以这应该可行:
public function index()
{
if ($printVar && $printVar === 'portrait') {
return $this->renderWith('PrintPortrait');
}
return []; //default
}
我已经创建了一个控制器来覆盖模板,如果它找到具有值的参数但由于某种原因它没有覆盖默认模板。
<?php
namespace {
use SilverStripe\CMS\Controllers\ContentController;
use SilverStripe\Control\Controller;
class ForSalePageController extends ContentController
{
/**
* An array of actions that can be accessed via a request. Each array element should be an action name, and the
* permissions or conditions required to allow the user to access it.
*
* <code>
* [
* 'action', // anyone can access this action
* 'action' => true, // same as above
* 'action' => 'ADMIN', // you must have ADMIN permissions to access this action
* 'action' => '->checkAction' // you can only access this action if $this->checkAction() returns true
* ];
* </code>
*
* @var array
*/
protected function init()
{
parent::init();
$printVar = Controller::curr()->getRequest()->getVar('print');
if ($printVar && $printVar === 'portrait') {
$this->renderWith('PrintPortrait');
}
}
}
}
即使有一个参数与值匹配,它仍然使用默认模板呈现页面 ForSalePage.ss
init()
方法不适用于return输入数据或设置模板。这就是 index()
方法(或动作)的用武之地。索引操作是默认操作,它必须 return 一些东西。呈现的字符串或包含要在默认模板中呈现的数据的数组。
您想覆盖默认模板和 return 呈现的字符串,所以这应该可行:
public function index()
{
if ($printVar && $printVar === 'portrait') {
return $this->renderWith('PrintPortrait');
}
return []; //default
}