Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai un petit problème dans mon formulaire. Le "render" de l'élément Radio ne me plait pas.
Mon css agit sur les "labels" et donc ça fou le bordel dans l'affichage ...
Voici ce que j'obtient :
<dt><label for="active" class="required">Active</label></dt> <dd> <label style="white-space: nowrap;"><input type="radio" name="active" value="0">no</label> <br /> <label style="white-space: nowrap;"><input type="radio" name="active" value="1" checked="checked">yes</label> </dd>
je voudrait avoir ça :
<dt><label for="active" class="required">Active</label></dt> <dd> <input type="radio" name="active" value="0">no <input type="radio" name="active" value="1" checked="checked">yes </dd>
J'ai d'abord pensé à redefinir l'élément Radio et l'utiliser à la creation du formulaire, mais j'ai vite vu qu'il fallait redefinir une vue et je ne sais pas comment faire ...
J'ai essayé de rajouter un dossier pour les Helper dans la fonction init :
require_once 'Zend/Form/Element/Xhtml.php'; class Element_Radio extends Zend_Form_Element_Radio { /** * Use formRadio view helper by default * @var string */ public $helper = 'formRadio'; // public $helper = 'formRadioPerso'; public function init () { $baseUrl = Zend_Registry::get('baseurl'); // Ajoute [baseurl du site]/library/Element/Helper avec le préfixe de classe 'Element_Helper' $view = new Zend_View(); $view->addHelperPath($baseUrl.'/library/Element/Helper', 'Element_Helper'); } }
Si je decommente "public $helper = 'formRadioPerso';" et que je commente "public $helper = 'formRadio';" j'ai droit à ce message d'erreur :
Warning: helper 'FormRadioPerso' not found in path in D:\wamp\www\site\web\library\Zend\Form.php on line 2223 // J'ai le fichier FormRadio.php dans le dossier [baseurl du site]/library/Element/Helper // "class Element_Helper_FormRadioPerso extends Zend_View_Helper_FormElement { ... }" // il y a la seule methode de la classe : "formRadioPerso" // la méthode réalise le code que j'ai mit au dessus que je veux obtenir ...
Quelqu'un peut m'aider ? je comprend pas très bien comment tout ça marche ... :s
Au cas où, une partie de mon css ( celle qui est en rapport avec les radios et les labels ) :
/* Label */ label { background-color: #FFCC66; /*background-color: #dab082;*/ /*background-color: #87CEFA;*/ display: block; width: 39%; float: left; padding-right: 1%; text-align: right; letter-spacing: 1px; } label:hover { font-weight: bold; } /* Input */ input { margin-left: 1%; width: 58%; border: #CCC 1px solid; } /* button radio */ input[type="radio"] { border: #DDEEFF 1px solid; width: 10px; background-color: #87CEFA; }
screenshot :
Hors ligne
Une piste possible : le DisplayGroup
exemple :
// on regroupe les boutons $this->addDisplayGroup( //Elements à grouper array('inverseurGauche', 'inverseurDroite'), 'boutons' ); //Nom du groupe // et on entoure d'un tag $this->boutons->addDecorator( 'HtmlTag', array('tag' => 'div', 'class' => 'boutons') ); }
ca crache :
<div class="boutons"> <dt></dt><dd> <button name="invGauche" id="invGauche" type="button" value="Inv. séléct. gauche" class="invert">bouton 1</button></dd> <dt></dt><dd> <button name="invDroite" id="invDroite" type="button" value="Inv. séléct. droite" class="invert">bouton 2</button></dd> </div>
Autre piste : pour regrouper deux éléments dans un seul <dd> il reste les éléments composés :
http://codecaine.co.za/posts/compound-e … -zend-form
Hors ligne
Sinon tu modifies ta CSS...
dt label { ...
Je conseille d'utiliser ça temporairement quand même et de trouver une autre solution pour retirer les balises label qui ne te servent à rien
Hors ligne
J'ai d'abord pensé à redefinir l'élément Radio et l'utiliser à la creation du formulaire, mais j'ai vite vu qu'il fallait redefinir une vue et je ne sais pas comment faire ..
Pourquoi faut il redefinir une vue? Il m'est arrivé de surcharger un element, je n'ai pas eu besoin de faire ça.
Sinon pour tes histoires de input, il faut d'un point de vue de la grammaire HTML laisser un label pour chaque input (ex: accessibilité & co...), et non un label pour plusieurs label.
Utilises les CSS, ça sera de loin le plus rapide et le plus propre
Hors ligne
fte :
Si j'ai bien compris ce que tu m'as dit de faire ... ça ne marche que pour regrouper 2 éléments entre eux.
Or, moi j'ai 1 seul élément ( de type radio ) avec des "label" qui entourent les 2 inputs ( "yes" et "no" ) ...
Du coup, il récupèrent le css "label" pour eux alors qu'il devraient pas, c'est la merde.
Le lien que tu m'as donné ne dit rien à propos du rendus des éléments ... ou alors j'ai mal regardé
Akis :
si je met ce que tu me dis, tout les autres "label" perdent leur style :-s
Mr.MoOx :
Je voulais dire "redefinir une aide de vue ( un helper )" mais apparement, je fais complètement fause route :-/
J'ai pensé à carement redéfinir le "render" de mon formulaire, mais je trouve pas de tutoriel là dessus.
J'en aurais grandement besoin car je patauge dans la gadoue depuis pas mal de temps à cause de ça :-s
Hors ligne
Comme l'a dit Akis et Mr. Moox modifie le css pour mettre le joli background que sur un label d'un <dt> et pas d'un <dd>.
Hors ligne
Ah ok, j'avais compris l'inverse.
Je testerai demain au boulot ;-)
Hors ligne
J'ai fait comme vous m'avez dit : j'ai "exclu" le label des radio des autre label.
J'ai aussi rajouté un :
input[type="radio"] { width: 27%; position: relative; }
Donc le style me convient parfaitement à part leur positions :
J'aimerai bien qu'ils soit positionné l'un au dessus de l'autre ...
il doit bien y avoir une propriété CSS fourbe pour que ce soit possible :-p
Dernière modification par Jocio (01-07-2008 09:20:29)
Hors ligne
Salut Jocio!!!
Est-ce que tu as reussi à gérer tes radios?
j'ai comme toi de soucis avec formRadio car Zend me place un <br /> entre les deux radio et ça me fout le b... dans mon HTML, il genère un décalage entre les deux comme toi.
Comment tu as fait?
merci de ton aide!!
Hors ligne
Faites une bête recherche de "<br />" dans les fichiers du dossier des helpers de vue (Zend/View/Helper) et vous comprendrez que vous pouvez enlever ce "BR".
Hors ligne
Ben j'ai défini un décorateur exprès pour formRadio ou j'ai recopié presque mot pour mot le décorateur par défaut et j'ai viré le <br />
Après, j'ai galéré avec mon css ( mais ça c'est mon problème ) et du coup, je vais surement craquer pour mettre un sélect ou un truc du genre :-s
Puisque la discussion repars, quelqu'un sait pourquoi Zend a choisi de mettre en "<br />" ?
Les boutons radio sont souvent 2 l'un à côté de l'autre. C'est rare d'avoir de nombreux radio.
Hors ligne
Bien que le topic ne soit plus actif depuis un bout de temps, j'ai trouvé une solution toute simple !
$mon_zend_form_radio_button->setSeparator(' ');
...et tes <br /> sautent comme par magie ! car ici, on applique le séparateur directement aux éléments du groupe
Hors ligne
jrmarmelade a écrit:
Bien que le topic ne soit plus actif depuis un bout de temps, j'ai trouvé une solution toute simple !
Code:
$mon_zend_form_radio_button->setSeparator(' ');...et tes <br /> sautent comme par magie ! car ici, on applique le séparateur directement aux éléments du groupe
Merci pour cette solution très pratique !
Hors ligne