среда, 9 декабря 2009 г.

Как отметить звездочкой обязательные поля в формах?

Сделаем универсальное решение - во всех доктрина-формах проекта все обязательные поля будут отмечены звездочками.



1. Открываем файл lib/form/doctrine/BaseFormDoctrine.class.php и добавляем туда обработчик события form.post_configure. Этот обработчик пробегается по всем Labels формы, и добавляет к ним css-класс requred.

<?php

/**
 * Project form base class.
 *
 * @package    
 * @subpackage form
 * @author     Evgeny Babin 
 * @version    SVN: $Id$
 */
abstract class BaseFormDoctrine extends sfFormDoctrine
{
  public function setup()
  {
    $this->getEventDispatcher()->connect('form.post_configure', array($this,'listenToPostConfigure'));
  }
  
  public function listenToPostConfigure($event)
  {
    //Отмечаем все обязательные поля звездочкой (*)
    foreach ($this->getFormFieldSchema()->getWidget()->getFields() as $key => $object)
    {
      $label = $this->getFormFieldSchema()->offsetGet($key)->renderLabelName();
      if ($this->validatorSchema[$key]->getOption('required') == true and empty($this->widgetSchema[$key]->required_markered)) 
      {
        $this->widgetSchema[$key]->required_markered=true;
        $this->widgetSchema->setLabel($key, '<span class="required">'.$label.'</span>');
      }
    }
  }  
}

2. Осталось прописать сам класс requred в вашем css-файле. Обратите внимание, что звездочка в конце добавляется средствами CSS, а не прописывается в контенте:
.required {
  font-weight: bold;
}

.required:after {
  content: "*";
  color: red;
}



Можно сделать то же самое вообще для всех форм проекта. Для этого правим файл /lib/form/BaseForm.class.php и то, что мы делали в методе setup(), запишем в конструктор. Но мне кажется, что это не очень хорошая идея.

P.S. Спасибо Vit за любезно предоставленный кусок кода по обработке обязательных полей.

Комментариев нет:

Отправить комментарий