我正在尝试向我的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')));
}
答案 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
...