Silverstripe 更好的形式看模板

Silverstripe better form looking on templates

我有一个客户设计的 photoshop 模板。我的疑问...当我看到模板时是:我可以并排放置2个字段吗?我想把 f_firstname 和 f_lastname 放在一行上......有没有用 类 注入标签或代码片段,比如 ex: div ="column1of2" $field_here 关闭 div 为 2 个字段设置 2 列?

实际上,代码生成的每个字段都在单独的行上。那不是很漂亮。可能吗?

我有这个代码:

private static $allowed_actions = array(
    'FormInfolettre'
);

public function FormInfolettre() {
    $fields = new FieldList(
        EmailField::create('f_email', 'Votre courriel'),
        TextField::create('f_firstname', 'Votre prénom'),
        TextField::create('f_lastname', 'Votre nom'),
        TextField::create('f_message', 'Votremessage'),
);

    $actions = new FieldList(
        FormAction::create("Soumettre")->setTitle("Soumettre")
    );

    $required = new RequiredFields(
        array(
            'f_email',
            'f_firstname',
            'f_lastname',
            'f_message',

        ));

    $form = new Form($this, 'FormInfolettre', $fields, $actions, $required);

    return $form;
}

我相信这可以在新版本中完成,方法是将您的字段添加到组中,然后为那些 class 添加一个 class 和 CSS,一组左对齐另一个右对齐。

或者,我前一段时间 fork 了一个旧版本的 Userforms 来完成这个。 https://github.com/helenclarko/silverstripe-userforms

您可以创建FieldGroups for the container div and add extra css classes to the fields喜欢

$fields = FieldList::create();

$firstName = TextField::create('FirstName','First Name')->addExtraClass('small-8 medium-4 large-5 columns');
$surname = TextField::create('Surname','Surname')->addExtraClass('small-12 medium-5 large-5 columns');

$nameGroup = FieldGroup::create($firstName, $surname);

$fields->push($nameGroup);

我一直喜欢在表单中使用 SilverStripe 模板。为此,我们需要使用 forTemplate 函数来定义模板。使用下面的代码,我们将模板名称设置为 MyForm

<?php

class MyForm extends Form {
    function __construct($controller, $name) {
        ...
    }

    function forTemplate() {
        return $this->renderWith(array(
            $this->class
        ));
    }
}

我们在themename/templates/Includes

中创建了一个MyForm.ss模板

表单布局类似于:

<form $FormAttributes>

<% loop $Fields %>
  <% if $Message %><p style="color:red; padding: 0 0 3px 0; margin:0">$Message</p><% end_if %>
<% end_loop %>

<% if $Message %>
  <p id="{$FormName}_error" class="message $MessageType">$Message</p>
<% else %>
  <p id="{$FormName}_error" class="message $MessageType" style="display: none"></p>
<% end_if %>

$Fields.FieldByName(SecurityID)

<div class="row">
  <div class="large-6 medium-6 small-12 columns">
    $Fields.FieldByName(FirstName)
    <small class="error">Please enter your first name</small>
  </div>

  <div class="large-6 medium-6 small-12 columns">
    $Fields.FieldByName(Surname)
    <small class="error">Please enter your surname</small>
  </div>
</div>

<div class="typographyr">
  <button class="button">Submit</button>
</div>

</form>