Centi dnes dostal nápad na vylepšenie nášho FormHelper na vykreslovanie Intoru formulárov v Nette. A myslím, že to bol dobrý nápad. Povážte: doteraz sme boli nútení opakovane vymenovávať pre ktoré políčko ideme vykreslovať popisok, chybky a samotný widget:

{form $form}
  {form:label $form['document']['title']}Titulok{/form:label}
  {form:error $form['document']['title']}
  {form:text $form['document']['title'], 'width' => '100%'}
{/form}

Po novom sa veci značne zjednodušujú, vďaka párovému Latte helperu {form:with ...} a pár ďalším novinkám:

{form $form}

  {form:label 'document/title' }
  {form:error 'document/title' }
  {form:text  'document/title', 'width' => '100%'}

  {* --- alebo --- *}

  {form:with 'document/title'}
    {form:label}
    {form:error}
    {form:text 'width' => '100%'}
  {/form:with}

  {* --- alebo --- *}

  {form:with 'document'}
    {form:label 'title'}
    {form:error 'title'}
    {form:text  'title', 'width' => '100%'}
  {/form:with}

  {* --- alebo --- *}

  {form:with 'document'}
    {form:with 'title'}
      {form:label}
      {form:error}
      {form:text 'width' => '100%'}
    {/form:with}
  {/form:with}

{/form}

Všetky varianty sa dajú miešať jedna cez druhú a použiť to čo príde lepšie. Tu je ukážka kúsku z editora užívateľa:

{form:with 'email'}
  <tr>
    <th class="w-min">{form:label}E-mail:{/form:label}</th>
    <td>
      {form:error 'class' => 'mb-s w-text'}
      {form:text 'width' => '30em'}
    </td>
  </tr>
{/form:with}

<tr>
  <th class="w-min va-t">{form:label 'password'}Password{/form:label}</th>
  <td>
    <div class="mb-s">
      {form:error 'password'}
      {form:password 'password', 'width' => '15em', 'autocomplete' => 'off'}
    </div>
    <div>
      {form:error 'password_confirmation'}
      {form:password 'password_confirmation', 'width' => '15em', 'autocomplete' => 'off'}
    </div>
  </td>
</tr>