Разделить поля формы в XSL-шаблоне

#
Разделить поля формы в XSL-шаблоне
Столкнулся с острой необходимостью обернуть в отдельные блоки поле "e-mail" и "загрузка файла".
Ниже приведен код шаблона, в нем все текстовые поля обернуты в один <div class="col-sm-6"> и имеют единый для всех <input id="{name}" type="text" name="{name}" value="{value}" size="{size}"> . У меня задача обернуть поле "e-mail" в свой <div> со своим <input>. То же самое нужно сделать для поля загрузки файла.
Знаний не хватает это сделать, поэтому прошу помощи.



<xsl:template match="form_field">
         <!-- Не скрытое поле и не надпись -->
         <xsl:if test="type != 7 and type != 8">
            <div class="row">22
               <label for="{name}" class="col-sm-5 control-label"><xsl:value-of select="caption" />
                  <xsl:if test="obligatory = 1">
                     <sup>
                        <font color="red">*</font>
                     </sup>
                  </xsl:if>
               </label><span id="validEmail"></span>
               
               
               <div class="col-sm-6">
                  <!-- Текстовые поля -->
                  <xsl:if test="type = 0 or type = 1 or type = 2 or type = 10 or type = 11 or type = 12 or type = 13 or type = 14 or type = 15 or type = 16 or type = 17 or type = 18 or type = 19">                                    
                     <input id="{name}" type="text" name="{name}" value="{value}" size="{size}">
                        <xsl:choose>
                           <!-- Поле для ввода пароля -->
                           <xsl:when test="type = 1">
                              <xsl:attribute name="type">password</xsl:attribute>
                              <xsl:attribute name="class">form-control</xsl:attribute>
                           </xsl:when>
                           <!-- Поле загрузки файла -->
                           <xsl:when test="type = 2">
                              <xsl:attribute name="type">file</xsl:attribute>
                           </xsl:when>
                           <!-- HTML5: Дата -->
                           <xsl:when test="type = 10">
                              <xsl:attribute name="type">date</xsl:attribute>
                           </xsl:when>
                           <!-- HTML5: Цвет -->
                           <xsl:when test="type = 11">
                              <xsl:attribute name="type">color</xsl:attribute>
                           </xsl:when>
                           <!-- HTML5: Месяц -->
                           <xsl:when test="type = 12">
                              <xsl:attribute name="type">month</xsl:attribute>
                           </xsl:when>
                           <!-- HTML5: Неделя -->
                           <xsl:when test="type = 13">
                              <xsl:attribute name="type">week</xsl:attribute>
                           </xsl:when>
                           <!-- HTML5: Время -->
                           <xsl:when test="type = 14">
                              <xsl:attribute name="type">time</xsl:attribute>
                           </xsl:when>
                           <!-- HTML5: Дата-Время -->
                           <xsl:when test="type = 15">
                              <xsl:attribute name="type">datetime</xsl:attribute>
                           </xsl:when>
                           <!-- HTML5: E-mail -->
                           <xsl:when test="type = 16">
                              <xsl:attribute name="type">email</xsl:attribute>
                           </xsl:when>
                           <!-- HTML5: Поиск -->
                           <xsl:when test="type = 17">
                              <xsl:attribute name="type">search</xsl:attribute>
                           </xsl:when>
                           <!-- HTML5: Телефон -->
                           <xsl:when test="type = 18">
                              <xsl:attribute name="type">tel</xsl:attribute>
                           </xsl:when>
                           <!-- HTML5: URL -->
                           <xsl:when test="type = 19">
                              <xsl:attribute name="type">url</xsl:attribute>
                           </xsl:when>
                           <!-- Текстовое поле -->
                           <xsl:otherwise>
                              <xsl:attribute name="type">text</xsl:attribute>
                              <xsl:attribute name="class">form-control</xsl:attribute>
                           </xsl:otherwise>
                        </xsl:choose>
                        <xsl:if test="obligatory = 1">
                           <xsl:attribute name="class">form-control required</xsl:attribute>
                           <xsl:attribute name="minlength">1</xsl:attribute>
                           <xsl:attribute name="title">Заполните поле <xsl:value-of select="caption" /></xsl:attribute>
                        </xsl:if>
                     </input>
                  </xsl:if>
                  
                  <!-- Радиокнопки -->
                  <xsl:if test="type = 3 or type = 9">
                     <xsl:apply-templates select="list/list_item" />
                     <label class="input_error" for="{name}" style="display: none">Выберите, пожалуйста, значение.</label>
                  </xsl:if>
                  
                  <!-- Checkbox -->
                  <xsl:if test="type = 4">
                     <input type="checkbox" name="{name}">
                        <xsl:if test="checked = 1 or value = 1">
                           <xsl:attribute name="checked">checked</xsl:attribute>
                        </xsl:if>
                     </input>
                  </xsl:if>
                  
                  <!-- Textarea -->
                  <xsl:if test="type = 5">
                     <textarea name="{name}" cols="{cols}" rows="{rows}" wrap="soft" class="form-control nhj">
                        <xsl:if test="obligatory = 1">
                           <xsl:attribute name="class">form-control required</xsl:attribute>
                           <xsl:attribute name="minlength">1</xsl:attribute>
                           <xsl:attribute name="title">Заполните поле <xsl:value-of select="caption" /></xsl:attribute>
                        </xsl:if>
                        <xsl:value-of select="value" />
                     </textarea>
                  </xsl:if>
                  
                  <!-- Список -->
                  <xsl:if test="type = 6">
                     <select name="{name}" class="form-control">
                        <xsl:if test="obligatory = 1">
                           <xsl:attribute name="class">required</xsl:attribute>
                           <xsl:attribute name="title">Заполните поле <xsl:value-of select="caption" /></xsl:attribute>
                        </xsl:if>
                        <option value="">...</option>
                        <xsl:apply-templates select="list/list_item" />
                     </select>
                  </xsl:if>
               </div>
            </div>
            
         
            
         </xsl:if>         
         <!-- скрытое поле -->
         <xsl:if test="type = 7">
            <input type="hidden" name="{name}" value="{value}" />
         </xsl:if>
         
         <!-- Надпись -->
         <xsl:if test="type = 8">
            <div class="row">
               <div class="caption"></div>
               <div class="field">
                  <strong><xsl:value-of select="caption" /></strong>
               </div>
            </div>
         </xsl:if>
      </xsl:template>
lbrstudio@mail.ru
Модератор
#
Re: Разделить поля формы в XSL-шаблоне
У вас внутри  <div class="col-sm-6"> идут проверки на типы полей.
вы хотите добавить свой <div> уже внутри  <div class="col-sm-6"> для двух типов полей?
#
Re: Разделить поля формы в XSL-шаблоне
Нет, не внутри. Попробую объяснить схематично.
Сейчас это выглядит так

<div class="row">
  <label>
     <div class="col-sm-6">
       <input>Поле для Имени </input>
    </div>
</label>
</div>

<div class="row">
  <label>
     <div class="col-sm-6">
       <input>Поле для Адреса</input>
    </div>
</label>
</div>

<div class="row">
  <label>
     <div class="col-sm-6">
       <input>Поле для Телефона</input>
    </div>
</label>
</div>

<div class="row">
  <label>
     <div class="col-sm-6">
       <input>Поле для Изображения</input>
    </div>
</label>
</div>



Для всех полей применяется один набор
<div class="row">
  <label>
     <div class="col-sm-6">
       <input>


Нужно телефон и файл обернуть в уникальные классы. И внутри задать ещё одни. Пример:

<div class="row">
  <label>
     <div class="col-sm-6">
       <input>Поле для Имени </input>
    </div>
</label>
</div>

<div class="row">
  <label>
     <div class="col-sm-6">
       <input>Поле для Адреса</input>
    </div>
</label>
</div>

<div class="свой-класс-1">
<div class="row еще-какой-то-класс">
  <label>
     <div class="col-sm-6 добавить еще один класс">
       <input>Поле для Телефона</input>
    </div>
</label>
</div>
</div>

<div class="свой-класс-2">
<div class="row еще-какой-то-класс">
  <label>
     <div class="col-sm-6 добавить еще один класс">
       <input>Поле для Изображения</input>
    </div>
</label>
</div>
</div>
lbrstudio@mail.ru
Модератор
#
Re: Разделить поля формы в XSL-шаблоне
элементарно, то, что вынесено "за скобки" вносите внутрь каждого условия, а там, где нужно, оборачиваете еще своими дивами.
#
Re: Разделить поля формы в XSL-шаблоне
Как понять "вынесено за скобки"?
lbrstudio@mail.ru
Модератор
#
Re: Разделить поля формы в XSL-шаблоне
Разве вы не видите, что у вас этот div снаружи, а внутри условия? Можно снаружи условий див убрать (вместе с закрывающим дивом) и вставить такой же див с закрывающим в каждое условие.
#
Re: Разделить поля формы в XSL-шаблоне
Не хватает мне матчасти в XSL... Я вижу два div - это <div class="row"> и <div class="col-sm-6">...
lbrstudio@mail.ru
#
Re: Разделить поля формы в XSL-шаблоне
Либо через <xsl:choose> и  <xsl:attribute> изменяйте класс для div при определенном type, так же как в xsl-шаблоне изменяются атрибуты для input.
<input id="{name}" type="text" name="{name}" value="{value}" size="{size}">
                        <xsl:choose>
                           <!-- Поле для ввода пароля -->
                           <xsl:when test="type = 1">
                              <xsl:attribute name="type">password</xsl:attribute>
                              <xsl:attribute name="class">form-control</xsl:attribute>
                           </xsl:when>
                           <!-- Поле загрузки файла -->
                           <xsl:when test="type = 2">
                              <xsl:attribute name="type">file</xsl:attribute>
                           </xsl:when>
                           <!-- HTML5: Дата -->
                           <xsl:when test="type = 10">
                              <xsl:attribute name="type">date</xsl:attribute>
                           </xsl:when>


Либо же переносите input и div'ы в каждый   <xsl:when test="type =№">
«Не выходи из комнаты, не совершай ошибку…»
Авторизация