添加是或否复选框到我的网站(Silverstripe)

时间:2013-12-30 14:03:49

标签: php content-management-system silverstripe

我正在尝试向我的Silverstripe网站上的某个成员表单添加是或否复选框。我已将这些框添加到网站以及CMS中的成员部分。这个想法是他们应该链接,例如当你在网站上打勾时,会员部分也应该勾选为是。我一直在尝试,但无法将复选框链接起来。

自从我触摸Silverstripe以来已经有一段时间了,所以任何方向都会受到赞赏。另外,我如何使复选框只能勾选是或否,此时您可以勾选两者。

到目前为止,这是我的代码,我将继续努力,但如果有人能指出我正确的方向,那将是很棒的。非常感谢。

$fields = new FieldSet( ...
    new CheckboxSetField('Questions','Do you want to show this?', array('true' => 'yes', 'false' => 'no'))
...);

function doSignup($data, $form) {
$member = Member::currentUser();
...
$member->Questions = $data['Questions'];
...
}

function extraStatics() {
    return array(
        'db' => array(
           ...
          'Questions' =>"Enum('Yes,No')", 
            ...
        ), 
    );}

 public function updateCMSFields(FieldSet &$fields) {
  ...
   $fields->addFieldToTab('Root.Membership', new CheckboxSetField('Questions','Do you want to show this?', array('true' => 'yes', 'false' => 'no'))); 
}

1 个答案:

答案 0 :(得分:2)

以下答案适用于Silverstripe 2.4。

假设我们想要为我们的silverstripe成员对象添加一个布尔复选框,以便由任何已登录的管理员通过CMS进行控制,并通过该登录成员通过前端进行控制。

首先我们需要扩展Member对象。在这个类中,我们将Boolean添加到数据库中。我们还将CheckboxField添加到成员的CMS字段中。

<强> MemberExtension.php

class MemberExtension extends DataObjectDecorator {

    public function extraStatics() {
        return array (
            'db' => array (
                'Questions' => 'Boolean'
            )
        );
    }

    public function updateCMSFields($fields) {
        $fields->addFieldToTab('Root.Membership', new CheckboxField('Questions', 'Do you want to show this?')); 
    }

}

我们在网站配置中添加了MemberExtension。

<强> _config.php

...
Object::add_extension('Member', 'MemberExtension');
...

然后在我们的页面控制器中,我们添加一个函数来向登录用户显示一个控制该字段的表单。我们还有更新功能,可在提交表单时保存这些更改。

<强> OurCustomPage.php

...
class OurCustomPage_Controller extends Page_Controller {
    ...
    public function MemberForm() {
        if ($member = Member::currentUser()) {
            $form = new Form (
                $this,
                'MemberForm',
                new FieldSet (
                    new CheckboxField('Questions', 'Do you want to show this?', $member->Questions)
                ),
                new FieldSet (
                        new FormAction('update', 'Update')
                )
            );

            return $form;
        }
        return false;
    }

    function update($data, $form) {
        $member = Member::currentUser();
        $member->Questions = isset($data['Questions']);
        $member->write();
        return $this->redirectBack();
    }
    ...
}

注意,isset($data['Questions'])用于获取“问题”复选框的真/假值。这是因为如果未选中“问题”复选框,则不会提交“问题”表单输入。这就是<input type="checkbox" />的工作原理。

最后,在我们的课程布局模板中,我们需要添加$MemberForm

<强> OurCustomPage.ss

...
$MemberForm
...