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

Php SilverStripe-使用函数获取页面的表单值,php,mysql,silverstripe,Php,Mysql,Silverstripe,在SilverStripe 3.1中,我试图使我的Hello条选择器的值能够被站点范围内的页面访问 我已经创建了一个下拉字段来选择HomePage.php上的内容,因此在引用主页上的字段值时没有问题。下拉列表的值将通知要运行的if块以及填充hello栏的内容 Page.php 包括/HelloBar.ss 我在主页上使用$HelloBarSelect访问值时没有任何问题,所有工作都如预期的那样进行。问题似乎是使用my函数访问$HelloBarSelect。ShowHelloBar函数的作用是什么

在SilverStripe 3.1中,我试图使我的Hello条选择器的值能够被站点范围内的页面访问

我已经创建了一个下拉字段来选择HomePage.php上的内容,因此在引用主页上的字段值时没有问题。下拉列表的值将通知要运行的if块以及填充hello栏的内容

Page.php

包括/HelloBar.ss

我在主页上使用$HelloBarSelect访问值时没有任何问题,所有工作都如预期的那样进行。问题似乎是使用my函数访问$HelloBarSelect。

ShowHelloBar函数的作用是什么

尝试只使用$HelloBarSelector而不是$ShowHelloBar$HelloBarSelector

编辑:

我明白了。模板函数不接受参数,因此在本例中,$itemID始终为null

你从哪里得到$itemID?如果它在请求/查询中的某个地方,那么您必须从中获取它

e、 g

get将返回主页数据对象的数据列表,因此您无法访问HelloBarSelect

主页::get->First和主页::get_one假设只有一个主页将返回一个数据项目。因此,如果字段正确,您可以使用HomePage::get->First->HelloBarText

提示:

使用Debug::dumpHomePage::查看您正在操作的内容。把数据倒出来看看你在做什么总是好的


另请阅读:或观看这些无法解决我问题的视频。请看我更新的代码,它可能更能解释为什么我需要获取下拉列表的值。当HelloBar.ss加载到HomePage.ss布局时,函数接受一个值,所以不,它不会总是空的$itemID是该函数的局部变量,允许我将下拉列表$HelloBarSelector的值传递到函数中。谢谢,这正是我所需要的,并将真正帮助我前进:
..//

public function HelloBarSelector() {
    $Selector = HomePage::get()->HelloBarSelect;
    return $Selector;
}

public function ShowHelloBar($itemID = 1) {
    $HelloBars = HelloBar::get()->byID($itemID);
    $HelloBars = $HelloBars->HelloBarText;
    return $HelloBars;
}

..//
<% if $HelloBarSelector %>
<section class="hello">
    <p class="hello__text">$ShowHelloBar($HelloBarSelector)</p>
</section>
<% end_if %>
..//

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;
}

..//
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;
}