Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai beaucoup de mal à comprendre les décorators. J'essai donc de m'aider avec la documentation ainsi que de leur classe composite. Malheureusement je ne trouve pas le moyen de lier cette classe à mes formulaires.
J'ai donc mis la classe composite dans ma librairie personnelle.
<?php
class Apr_Decorator_Composite extends Zend_Form_Decorator_Abstract
{
public function buildLabel()
{
$element = $this->getElement();
$label = $element->getLabel();
if ($translator = $element->getTranslator()) {
$label = $translator->translate($label);
}
if ($element->isRequired()) {
$label .= '*';
}
$label .= ':';
return $element->getView()
->formLabel($element->getName(), $label);
}
[...]
?>
Dans mes classes formulaire, j'ajoute :
class Apr_Form_Rubrique extends Zend_Form
{
/**
* Initialisation du formulaire (méthode obligatoire)
*/
public function init()
{
$familleModel = new TFamilles();
$familles = $familleModel->fetchAll();
$famillesTab = array();
$famillesTab[""] = "Choisir une famille";
foreach ($familles as $famille)
{
$famillesTab[$famille->idFamille] = $famille->libelle;
}
$this->setDecorators(array("Apr_Decorator_Composite"));
[...]
Par avance, MERCI pour l'aide.
Hors ligne
Je suis vraiment perdu en ce qui concerne les decorators.
Je cherche à générer le code html suivant :
<div class="ligne">
<div class="label"><label for ="nom">Nom :</label></div>
<div class="champ"><input type="text" id="nom" name="nom" value="" /></div>
</div>
Si quelqu'un peu m'aider.
Merci.
Hors ligne
Bonjour,
j'ai la classe suivante "Apr_Decorator_Composite" qui est un décorator (Classe reprise dans la documentation du zend_Framework).
J'essai de la lien à un élément de mon formulaire : $libelle->setDecorators(array('Composite'));
Mais j'ai l'erreur suivant :
Warning: Exception caught by form: Plugin by name 'Composite' was not found in the registry; used paths: Zend_Form_Decorator_: Zend/Form/Decorator/:Zend/Form/Decorator/ Stack Trace: #0 /home/library/Zend/Form/Element.php(1702): Zend_Loader_PluginLoader->load('Composite') #1 /home/library/Zend/Form/Element.php(2061):
Si quelqu'un peut m'aider.
Par avance merci.
Hors ligne
Pas besoin d'un composite pour ca.
Déja, nettoire ton code HTML, les div "label" et "champ" ne servent à rien. Avec css et envutellement des class ton élement label et input devrait faire l'affaire :
<div class="ligne"> <label for ="nom" class="label">Nom :</label> <input type="text" id="nom" name="nom" value="" class="label"/> </div>
Ensuite, on part de l'élément pour aller vers "l'extérieur"
D'abord, le décorateur viewhelper, c'est lui qui générer la balise input. On lui adjoint un attribut class => label
Ensuite, vient le décorateur label, la aussi, on lui adjoint l'attribut class => "label"
Ensuite, pour entourer le tout, un décorateur htmlTag avec l'attribut class => "ligne"
Hors ligne