在SilverStripe 3.1中,我试图让我的Hello Bar选择器的值可以通过网站页面访问。
我已创建了下拉字段以选择HomePage.php
上的内容,因此我在引用主页上的字段值时没有任何问题。下拉列表的值将通知if块运行以及使用。
page.php文件
..//
public function HelloBarSelector() {
$Selector = HomePage::get()->HelloBarSelect;
return $Selector;
}
public function ShowHelloBar($itemID = 1) {
$HelloBars = HelloBar::get()->byID($itemID);
$HelloBars = $HelloBars->HelloBarText;
return $HelloBars;
}
..//
含/ HelloBar.ss
<% if $HelloBarSelector %>
<section class="hello">
<p class="hello__text">$ShowHelloBar($HelloBarSelector)</p>
</section>
<% end_if %>
HomePage.php
..//
public function getCMSFields(){
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.HelloBar', GridField::create(
'HelloBars',
'Hello Bar Text',
$this->HelloBars(),
GridFieldConfig_RecordEditor::create()
));
$fields->addFieldToTab('Root.HelloBar', DropdownField::create(
'HelloBarSelect',
'Choose Your Hello Bar (this will be sitewide)',
HelloBar::get()->map('ID', 'HelloBarText')
)
->setEmptyString('(none)'));
return $fields;
}
..//
我在主页上使用$HelloBarSelect
访问该值并没有问题,并且所有工作都按预期工作。似乎问题是使用我的函数访问$HelloBarSelect
。
答案 0 :(得分:0)
ShowHelloBar()
函数有什么作用?
尝试使用$HelloBarSelector
代替$ShowHelloBar($HelloBarSelector)
编辑:
我明白了。模板函数不带参数,因此在这种情况下,$ itemID将始终为null。
你在哪里获得$itemID
?如果它位于请求/查询中的某个位置,那么您必须从中获取它。
e.g。
public function ShowHelloBar() {
//If you use the standard $Action/$ID/$OtherID handler
$itemID = $this->getRequest()->param('ID');
//If it's somewhere in $_GET like ?ID=3
$itemID = $this->getRequest()->getVar('ID');
$HelloBars = HelloBar::get()->byID($itemID);
$HelloBars = $HelloBars->HelloBarText;
return $HelloBars;
}
答案 1 :(得分:0)
HomePage::get()
将返回HomePage DataObjects的DataList,因此您无法访问HelloBarSelect。
HomePage::get()->First()
和HomePage::get_one()
(假设您只有一个主页)将返回一个DataOject。因此,如果字段正确,您可以使用HomePage::get()->First()->HelloBarText
提示:
使用Debug::dump(HomePage::get())
查看您正在操作的内容。它始终是好的,可以转储数据以查看您正在处理的内容。
另请阅读:http://doc.silverstripe.org/en/developer_guides/model/或观看这些视频http://www.silverstripe.org/learn/lessons/