2009-03-31 5 views
2

J'ai un formulaire que l'utilisateur peut utiliser pour créer un nouveau magasin et en modifier un existant. Lorsque ce formulaire est utilisé pour éditer un magasin, il y a certains champs que je veux que l'utilisateur voie mais ne modifie pas, par exemple. store_id. J'ai exploré les différents Zend_Form_Elements dans l'espoir de trouver une sorte d'élément statique mais sans chance. Donc, ma question est, comment puis-je afficher des informations en utilisant Zend_Form qu'un utilisateur ne peut pas éditer?Zend Framework - Eléments de formulaire statiques

Merci.

Répondre

3

J'ai juste réussi à travailler celui-ci moi-même. La solution consistait à remplacer l'assistant de vue sur les éléments par l'assistant formNote, par exemple. $ element-> helper = 'formNote'. Le résultat de ceci était que la valeur est affichée en tant que texte droit au lieu d'être à l'intérieur d'un élément de formulaire.

Merci pour vos réponses.

3

readonly seul ne suffit pas, parce que les utilisateurs seront toujours en mesure de le modifier si elles veulent vraiment. Vous devez utiliser $element->setIgnore(true) pour vous assurer que Zend_Form_Element n'essaiera pas de remplir l'élément à partir de POST/GET, et je vérifierai également cela. Vous devez vous assurer que les valeurs que vous entrez dans les bases de données ne peuvent jamais contenir cet élément. Enfin, si vous souhaitez que votre élément soit affiché d'une manière différente de readonly, vous pouvez le faire en changeant les décorateurs d'éléments.

+0

Ce que je pense faire est d'aller encore plus loin et de créer un nouvel élément personnalisé au lieu d'un simple décorateur. Je vous ferai savoir comment je vais. –

2

C'est une très bonne solution lorsque vous n'avez pas besoin de remplir la valeur de l'élément lorsque le formulaire est soumis. Il est solution équivalente est d'utiliser la méthode des éléments de forme setAttrib() et désactiver l'élément de formulaire

$formElement->setAttrib('disable','disable') 

qui ne geler l'élément.

Mais si vous avez besoin de remplir le champ, en utilisant les solutions précédentes, vous aurez probablement besoin d'ajouter un champ caché supplémentaire, qui passera la valeur. Le développement d'un élément de formulaire personnalisé sera de bon style, mais cela n'est pas bien accueilli par chaque développeur. Vous pouvez donc utiliser une méthode complexe pour définir un élément de formulaire en tant que texte, mais remplir sa valeur. Ainsi, lorsque vous créez l'élément en tant que champ masqué, définissez sa valeur et utilisez la méthode setDescription() de l'élément de formulaire pour définir et afficher la valeur du texte de l'élément.

$formElement = new Zend_Form_Element_Hidden('elName', 
     array('label' => 'elLabel', 'value' => 'elValue')); 

$formElement->setDescription('elValue'); 

Ensuite, vous pouvez rendre cet élément caché et afficher la valeur avec le $formElement->getDescription().

+0

Merci pour l'info mais pour autant que je peux voir en utilisant l'assistant de vue formNote est encore plus simple. Utiliser ceci m'a donné du texte directement dans le formulaire sans avoir à utiliser une entrée de texte désactivée ou des éléments personnalisés. –

0

Selon Amr Mostafa, si vous utilisez:

$element->setAttrib('readonly', 'true'); 

OU

$element->setAttribs(array('disabled' => 'disabled')); 

utilisateur envoyer encore des valeurs par POST/GET et ils sont stockés dans DB.

La seule façon pour moi de ne pas prendre en compte les valeurs de POST/GES est:

$element->setIgnore(true) 

Exemple:

$element = new Zend_Form_Element_Text('element'); 
$element->setIgnore(true);