【问题标题】:SilverStripe - Get a page's form value with a functionSilverStripe - 使用函数获取页面的表单值
【发布时间】:2015-04-10 03:05:00
【问题描述】:

在 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。

【问题讨论】:

    标签: php mysql silverstripe


    【解决方案1】:

    HomePage::get() 将返回 HomePage DataObjects 的 DataList,因此您无法访问 HelloBarSelect。

    HomePage::get()-&gt;First() 和HomePage::get_one()(假设您只有一个主页)将返回一个 DataOject。因此,如果该字段正确,您可以使用HomePage::get()-&gt;First()-&gt;HelloBarText

    提示:

    使用Debug::dump(HomePage::get()) 来查看您在操作什么。转储数据以查看您在做什么总是好的。

    另请阅读:http://doc.silverstripe.org/en/developer_guides/model/ 或观看这些视频http://www.silverstripe.org/learn/lessons/

    【讨论】:

    • 谢谢,这正是我所需要的,这将真正帮助我前进:)
    【解决方案2】:

    ShowHelloBar() 函数有什么作用?

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

    编辑:

    我明白了。模板函数不接受参数,因此在这种情况下,$itemID 将始终为空。

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

    例如

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

    【讨论】:

    • 那不能解决我的问题。请查看我更新的代码,这可能更能说明为什么我需要获取下拉列表的值。
    • 该函数在HelloBar.ss 加载到HomePage.ss 布局时接受一个值,所以不,它不会总是为空。 $itemID 是该函数的本地变量,允许我将值(在本例中为下拉列表 $HelloBarSelector 的值)传递给函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 2020-05-04
    • 1970-01-01
    • 2014-01-11
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多