SilverStripe - 使用函数获取页面的表单值

时间:2015-04-10 03:05:01

标签: php mysql silverstripe

在SilverStripe 3.1中,我试图让我的Hello Bar选择器的值可以通过网站页面访问。

我已创建了下拉字段以选择HomePage.php上的内容,因此我在引用主页上的字段值时没有任何问题。下拉列表的值将通知if块运行以及使用。

填充hello栏的内容

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

2 个答案:

答案 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/