在 SilverStripe 3.1 中,我试图让我的 Hello Bar 选择器的值可以被站点范围内的页面访问。
我已经创建了下拉字段来选择 HomePage.php
上的内容,因此我可以毫无问题地引用主页上的字段值。下拉列表的值将通知要运行的 if block 以及用什么填充问候栏。
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
。
最佳答案
HomePage::get()
将返回 HomePage DataObject 的 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/
关于php - SilverStripe - 使用函数获取页面的表单值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29552650/