【问题标题】:Silverstripe better form looking on templatesSilverstripe 更好地查看模板
【发布时间】:2016-10-26 08:19:12
【问题描述】:

我有一个客户在 Photoshop 上设计的模板。我的审问...当我看到模板时:我可以并排放置 2 个字段吗?我希望 f_firstname 和 f_lastname 在一行中...无论如何可以注入带有诸如 ex 之类的标签或一段代码:div="column1of2" $field_here close 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;
}

【问题讨论】:

    标签: css forms styles customization silverstripe


    【解决方案1】:

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

    另外,我前一阵子分叉了一个旧版本的用户表单来完成这个。 https://github.com/helenclarko/silverstripe-userforms

    【讨论】:

      【解决方案2】:

      你可以为容器div创建FieldGroupsadd extra css classes to the fieldslike

      $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);
      

      【讨论】:

      • @NewbieSSProgrammer 感谢您修复我的答案中的错误;)
      • 没问题!你帮我,我帮你;)
      【解决方案3】:

      我一直喜欢为表单使用 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>
      

      【讨论】:

      • 嗨@Gavin Bruce,对于像我这样的初学者来说,这似乎很复杂。我将 MyForm.ss 理解为模板,但是函数 __construct 下的三个点中的代码是什么?我很好奇你的代码。 ;)
      • 这三个点仅用于缺少代码。您可以在其中创建表单中的字段以及您需要的任何其他位。
      • 是的,我知道。我问你是否有一个表单函数的例子放在 function __construct 下。
      • 如果您只想为表单使用另一个模板,则无需子类化。如果您在表单中有自定义行为,您可以使用api.silverstripe.org/3.1/class-Form.html#_setTemplate 进行设置,子类化完全有意义。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多