Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 11-09-2008 13:05:37

DarKA
Membre
Date d'inscription: 18-07-2007
Messages: 84

[ZF_Form_Decorator] - Solution pour customiser les Decorators

Bonjour,

Je sollicite vos lumières au sujet d'un soucis.

J'ai créé mon formulaire via Zend form. Ainsi toutes les entités sont encapsulés dans des DD et DT.

Ce que je voudrais faire, c'est mettre des classes à certains DT (qui contient les labels). Pourquoi, parce que lorsqu'ils sont vides, je veux pouvoir leurs attribuer des propriétés CSS particulières (les faire disparaitre !), je ne veux pas les supprimer car je veux garder un code correcte.

En essayant de faire setClass à un décorator label, tout ce que j'ai pu faire, c'est mettre la classe au label, et non pas au DT qui l'englobe.

Que faire ?

Dois je me créer un décorator personalisé ? Auriez vous des codes sources montrant précisément la création d'un décorator, parce que dans la doc de ZF. je n'ai pas compris.

D'une facon générale je trouve interressant de pouvoir mettre des attributs aux DD et DT, pour garder un controle optimal du rendu.

Merci d'avance !

Hors ligne

 

#2 11-09-2008 14:40:07

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [ZF_Form_Decorator] - Solution pour customiser les Decorators

C'est le décorateur HtmlTag qu'il faut 'diriger', pas le decorateur des labels.
Par exemple

Code:

array('HtmlTag', array('tag' => 'div', 'class' => 'ctrlHolder'))

Ca va encapsuler avec des div et mettre un class='ctrlHolder' à ton div.

Attention biensur à l'ordre de tes decorateurs
Exemple de décoration d'un élément :

Code:

'ViewHelper',
    array('Description', array('class' => 'formHint')),
    array('Label', array('requiredPrefix' => '<em>*</em>', 'escape' => false)),
    array('Errors', array('placement' => 'prepend')),
    array('HtmlTag', array('tag' => 'div', 'class' => 'ctrlHolder'))

Mon HtmlTag est en dernier, ca donne ca :

Code:

<div class="ctrlHolder">
  <label for="src" class="required"><em>*</em>Type d'entrée:</label>
  <select name="src" id="src">
    <option value="xlsx" label="Fichier Excel 2007 (.xlsx)">Fichier Excel 2007 (.xlsx)</option>
    <option value="csv" label="Fichier Csv">Fichier Csv</option>
    <option value="form" label="Par formulaire web">Par formulaire web</option>
  </select>
</div>

----
Gruiiik !

Hors ligne

 

#3 11-09-2008 16:42:36

DarKA
Membre
Date d'inscription: 18-07-2007
Messages: 84

Re: [ZF_Form_Decorator] - Solution pour customiser les Decorators

Ah, je ne connaissais pas. Mais dans l'idée sur ta solution on englobe toutes les entités, en l'ocurrence ton input et son label, dans un seul decorator.

Moi je voudrais :

Code:

<dt class="invisible"></dt>
<dd>  
  <select name="src" id="src">
    <option value="xlsx" label="Fichier Excel 2007 (.xlsx)">Fichier Excel 2007 (.xlsx)</option>
    <option value="csv" label="Fichier Csv">Fichier Csv</option>
    <option value="form" label="Par formulaire web">Par formulaire web</option>
  </select>
</dd>

dans mon cas présent c'est ce que je veux  faire. Après si il m'est possible de completement fixer des attribus pour chaque HTMLTAG c'est encore mieux.

Hors ligne

 

#4 12-09-2008 10:50:32

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [ZF_Form_Decorator] - Solution pour customiser les Decorators

Alors, il faut pt etre créé ton décorateur (quand on cherche trop longtemps, c'est pt etre le plus simple)

Perso, j'ai du refaire un décorateur Errors, car je voulais
1/ rajouté des attribut a mon HtmlTag qui englobe mes labels dans le cas ou il y avait une erreur.
2/ Changer les balises qu'il utilise (je ne voulais pas de ul li) (pt etre qu'avec le 1.6, on a plus besoin de ca et que des attibuts son dispo maintenant)

mon 1/ semble similaire avec ce que tu veux.

Code:

class My_Form_Decorator_Errors extends Zend_Form_Decorator_Errors
{
  public function render($content)
  {
    $element = $this->getElement();
    $view = $element->getView();
    if (null === $view) {
      return $content;
    }

    $errors = $element->getMessages();
    if (empty($errors)) {
      return $content;
    }
    $element->getDecorator('Htmltag')->setOption('class', 'ctrlHolder error');
    $formErrors_Helper = $view->getHelper('formErrors');
    $formErrors_Helper->setElementStart('<p class="errorField"><strong>');
    $formErrors_Helper->setElementSeparator('</strong></p><p class="errorField"><strong>');
    $formErrors_Helper->setElementEnd('</strong></p>');
    return (parent::render($content));
  }
}

Tu peux utiliser le même principe :
- Tu refais ton décorateur label
- Celui-ci hérite de celui d'origne. (comme j'ai fait pour errors)
- En plus, tu rajoutes le code qui teste si ton label est vide ou pas (getElement->getValue())
- Si il est vide, tu récupéres le décorateur HtmlTag et tu lui rajoutes l'attrib class invisible (un peu comme j'ai fait)

Même si ce que je dis n'est pas correct, ca doit tourné autour de ca.

Bon courage

Dernière modification par nORKy (12-09-2008 10:51:35)


----
Gruiiik !

Hors ligne

 

#5 20-01-2009 16:14:48

Cityhunter
Nouveau membre
Date d'inscription: 11-07-2008
Messages: 9

Re: [ZF_Form_Decorator] - Solution pour customiser les Decorators

Salut, je fais remonter ce post car j'ai trouvé une solution simple qui pourrait servir !!

Donc, pour contrôler la balise HTML entourant le label, j'ai fais ceci :

Au lieu d'avoir

Code:

array('Label', array('tag' => 'td')),

j'ai mis

Code:

array('Label'),
array(array('' => 'HtmlTag'), array('tag' => 'td', 'style' => 'width:120px;')),

ce qui a pour résultat le controle de la balise comme dit plus haut.

Mais j'ai fais ça au hasard, donc je serais partant pour une explication ^^

Hors ligne

 

#6 21-01-2009 10:26:23

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [ZF_Form_Decorator] - Solution pour customiser les Decorators

D'après le code de la fonction addDecorator

Code:

array(array('' => 'HtmlTag'), array('tag' => 'td', 'style' => 'width:120px;')),

est pareil que

Code:

array( 'HtmlTag', array('tag' => 'td', 'style' => 'width:120px;')),

----
Gruiiik !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages