2016-08-18 48 views
1

我在银条纹中创建了一个前端表单。它的工作原理是记录数据,如果有任何错误,它会重新导向并不保存数据。然而,我面临的问题是验证信息无法正确显示。当我使用$Form变量在前端显示表单时,验证和一切工作正常。我想要做的是使用<% control Form %>控制表单的布局。这是因为表格的设计原因。银条纹:自定义表单模板 - 验证问题

这里是我的代码:

(Template.ss)

<% control Form %> 
    <form class="wrap" $FormAttributes> 
     <% 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 %> 
      <fieldset> 
       <div class="member-details col lg-mobile-12 tablet-6 sm-desktop-6 md-desktop-6"> 
        <% if ModTest == 'false' %> 
         <div class="field wrap"> 
          <% control $Fields.dataFieldByName(ClientName) %> 
           <label class="title">$Title</label>$Field 
            <% end_control %> 
           </div> 
          <% end_if %> 
          <div class="field wrap"> 
           <% control $Fields.dataFieldByName(FirstName) %> 
            <label class="title">$Title</label>$Field 
           <% end_control %> 
          </div> 
          <div class="field wrap"> 
           <% control $Fields.dataFieldByName(Surname) %> 
            <label class="title">$Title</label>$Field 
           <% end_control %> 
          </div> 
          <% if $Fields.dataFieldByName(Address) %> 
           <div class="field address wrap"> 
            <% control $Fields.dataFieldByName(Address) %> 
             <label class="title">$Title</label> 
            <% end_control %> 
            <div class="address-fields wrap"> 
             $Fields.dataFieldByName(Address) 
             $Fields.dataFieldByName(Suburb) 
             $Fields.dataFieldByName(State) 
             $Fields.dataFieldByName(PostCode) 
            </div> 
           </div> 
          <% end_if %> 

          <% control $Fields.dataFieldByName(Phone) %> 
           <div class="field wrap"> 
             <label class="title">$Title</label>$Field 
           </div> 
          <% end_control %> 

          <% control $Fields.dataFieldByName(Email) %> 
           <div id="$HolderID" class="field wrap <% if $extraClass %> $extraClass<% end_if %>"> 
            <label class="title" for="$ID">$Title</label> 
            $Field 
            <% if $Message %><span class="message $MessageType">$Message</span><% end_if %> 
           </div> 
          <% end_control %> 

         </div> 
         <div class="password col lg-mobile-12 tablet-6 sm-desktop-6 md-desktop-6"> 
          <div class="field confirmedpassword"> 
           $Fields.dataFieldByName(Password)     
          </div> 
         </div> 
         $Fields.dataFieldByName(SecurityID) 
        </fieldset> 
        <div class="col lg-mobile-12 tablet-12 sm-desktop-12 md-desktop-12"> 
         <% if $Actions %> 
         <div class="Actions"> 
          <% loop $Actions %> 
           $Field 
          <% end_loop %> 
         </div> 
         <% end_if %> 
        </div> 
       </form> 
      <% end_control %> 

回答

1

将模板中的所有表单标记写入模板 - 正如您所做的那样 - 几乎违背了表单呈现和模板的用途。它也非常不灵活,因为您必须在模板中添加新添加的字段,而不是将它们添加到表单中。

就个人而言,我会利用CompositeField将您的字段(例如包装多个字段的字段)分组,并在需要自定义模板的字段上使用setTemplate

我认为你应该可以通过自定义模板和复合字段获得与你的模板非常相似的输出。这样你就可以在你的模板中放下$Form并且很开心......

+0

谢谢。我会着眼于此。 – Dallby

1

要在您需要与每个字段对象的工作每场水平得到消息。

<% with $Fields.dataFieldByName(Name) %> 
    <div> 
     <label>Name</label> 
     <input name="Name" type="text" id="name" placeholder="Name" required> 
     <% if $Message %><span>$Message</span><% end_if %> 
    </div> 
<% end_with %> 

添加$Debug里面有会列出哪些领域,这是添加CSS ID和其他CMS控制的文本有用的可用。

+0

感谢您的回复。当我这样做时(请参阅上面的电子邮件字段),当出现错误时输出消息。但是,当我修复错误并保存表单时,数据保存但错误消息仍然存在并且不会消失... – Dallby