IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Form PHP Discussion :

Ajouter un span à la suite d'un TextArea [ZF 1.11]


Sujet :

Zend_Form PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études en développements techniques
    Inscrit en
    Novembre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en développements techniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 244
    Par défaut Ajouter un span à la suite d'un TextArea
    Bonjour,

    J'aimerai connaître la syntaxe exacte pour ajouter par exemple le tag HTML suivant :
    <span class="maclass">Votre message ne doit pas comporter plus de 250 caractères</span>
    à la suite de ma balise TextArea dans mon objet Zend_Form, voici mon élément actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $message = new App_Form_Element_Textarea('message');
            $message->setLabel(App_Translate::translate('message'))
                ->setAttrib('id', 'message')
                ->setRequired(true)
                ->addFilter('StripTags')
                ->addFilter('StringTrim')
                ->addValidator('NotEmpty')->addErrorMessage(App_Translate::translate('Please mention your request above!'));

  2. #2
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Tu as essayé setDescription() ?
    Il me semble que cela permet d'ajouter une description à l'élément que tu souhaites et il ne te reste donc plus qu'à jouer au niveau du css

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études en développements techniques
    Inscrit en
    Novembre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en développements techniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 244
    Par défaut
    Merci pour ta réponse, tu veux dire une syntaxe du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $message = new App_Form_Element_Textarea('message');
            $message->setLabel(App_Translate::translate('message'))
                ->setAttrib('id', 'message')
                ->setDescription('titi', 'totototototo')
                ->setRequired(true)
                ->addFilter('StripTags')
                ->addFilter('StringTrim')
                ->addValidator('NotEmpty')->addErrorMessage(App_Translate::translate('Please mention your request above!'));
    Je l'ai fait, mais ça n'apparait pas dans le markup, il me semble que c'est addDecorateur('htmlTag','jljflkdsjflkdsjflk') mais je ne suis pas sûr...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 152
    Par défaut
    Bonjour,

    en effet, il te suffit d'utiliser "setDescription" mais de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $message->setDescription ("Votre message ne doit pas comporter plus de 250 caractères"); // on affecte à l'élément la description souhaitée
    $message->setDecorators($decoratorMessage); // décorateur de l'élément "$message" à définir de manière à personnaliser la façon dont tu veux que ce message s'affiche dans ton formulaire.
    Regarde ce lien pour ce qui concerne les décorateurs, il y a un exemple pour le cas "setDescription"

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études en développements techniques
    Inscrit en
    Novembre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en développements techniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 244
    Par défaut
    Bonjour merci pour ta réponse,
    par contre je n'ai pas de décorateur, du coup je le mets en place de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $message = new App_Form_Element_Textarea('message');
            $message->setLabel(App_Translate::translate('message'))
                ->setAttrib('id', 'message')
                ->setRequired(true)
                ->setDescription('Ceci est test')
                ->addFilter('StripTags')
                ->addFilter('StringTrim')
                ->addValidator('NotEmpty')->addErrorMessage(App_Translate::translate('Please mention your request above!'));
    Mais bon je ne vois rien s'afficher.
    En fait j'ai des décorateur pour les labels et les messages d'erreurs, dans des objets distincts, moi je voulais juste rajouter un bout de code HTML pour ajouter un SPAN, il me semble que HtmlTag sert à ça mais je ne connais pas la syntaxe correspondante à ce que j'ai déjà implémenté

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 152
    Par défaut
    Peux tu afficher le code ou tu défini tes décorateurs?

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études en développements techniques
    Inscrit en
    Novembre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en développements techniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 244
    Par défaut
    Dans library/App/Form/Decorator/FormsErrors.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    <?php
     
    class App_Form_Decorator_FormErrors extends Zend_Form_Decorator_Abstract
    {
        public function __construct($options = null)
        {
            parent::__construct($options);
            //setMarkupListStart('<ul class="form_errors">');
        }
     
        public function render($content)
        {
            $form = $this->getElement();
            if (!$form instanceof Zend_Form) {
                return $content;
            }
     
            $message = $this->getOption('message');
            if (empty($message)){
                $message = '';
            }
            // use the forms translator for the summary message
            $translator = $form->getTranslator();
            if ($translator !== null){
                $message = $translator->translate($message);
            }
     
            $view = $form->getView();
            if (null === $view) {
                return $content;
            }
     
            $errors  = $form->getMessages();
            if (empty($errors)) {
                return $content;
            }
     
            $markup = '<div class="form_errors_block">';
            if (!empty($message)){
                $markup .= '<p class="message">' . $message . '</p>';
            }
            $markup .= '<ul class="form_errors">';
     
            foreach ($errors as $name => $list) {
                $element = $form->$name;
     
                if ($element instanceof Zend_Form_Element) {
     
                    $label = $element->getLabel();
                    if (empty($label)) {
                        $label = $element->getName();
                    }
                    $label = trim($label);
                    if (empty($label)) {
                        $label = '';
                    }
                    if (null !== ($translator = $element->getTranslator())) {
                        $label = $translator->translate($label);
                    }
     
                    $error_msg = '';
                    foreach ($list as $key => $error) {
                        $error_msg = $view->escape($error);
                        break; // just do the first error message for a field
                    }
     
                    $markup .= '<li><span class="label">' . $label . '</span>'
                            . $error_msg . '</li>';
                }
                else{
                    if (is_string($list)){
                        $markup .= '<li>' . $list . '</li>';
                    }
                }
            }
     
            $markup .= '</ul></div>';
     
            switch ($this->getPlacement()) {
                case self::APPEND:
                    return $content . $this->getSeparator() . $markup;
                case self::PREPEND:
                    return $markup . $this->getSeparator() . $content;
            }        
     
            return $content;  
        }
     
    }
    Dans library/App/Form/Decorator/Label.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    <?php
    class App_Form_Decorator_Label extends Zend_Form_Decorator_Label
    {
        /**
         * Get class with which to define label
         *
         * Appends 'error' to class, if there is an error in the form for the
         * associated element
         *
         * @return string
         */
        public function getClass()
        {
            $class = parent::getClass();
     
            $element = $this->getElement();
     
            if ($element->hasErrors()){
                if (!empty($class)){
                    $class .= ' invalid';
                }else{
                    $class = 'invalid';
                }
            }
     
            return $class;
        }
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 152
    Par défaut
    Tu peux soit redéfinir un décorateur personnalisé pour les descriptions comme tu l'as fait pour l'affichage des labels et des erreurs, soit tu appliques à ton élément un décorateur du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $decoratorMessage = array ('ViewHelper', array ('Description', array ('tag' => 'span', 'escape' => false, 'style' => 'display:none' ) ), array (array ('td' => 'HtmlTag' ), array ('tag' => 'td' ) ) );
    $message->setDecorators ( $decoratorMessage ) ;

  9. #9
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études en développements techniques
    Inscrit en
    Novembre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en développements techniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 244
    Par défaut
    Merci pour ta réponse, donc je dois créer un fichier "Description.php" dans mon répertoire des décorateurs ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 152
    Par défaut
    C'est une proposition, étant donné que tu as fais de même pour l'affichage des labels et des erreurs.
    Néanmoins, moi je n'ai pas encore eu à développer de décorateurs personnalisés, j'utilise la deuxième proposition que je t'ai faite auparavant.

  11. #11
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Il n'y a pas besoin de décorateur setDecorator('Entrer la description') suffit, je viens de tester sur plusieurs projets sans décorateurs, après c'est à toi de voir avec le css pour voir où le mettre.

  12. #12
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études en développements techniques
    Inscrit en
    Novembre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en développements techniques
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 244
    Par défaut Désolé pour le retard
    Bonjour,
    Désolé pour cette réponse tardive. Merci à tous pour vos réponses, je n'ai pas vraiment de solution pour l'instant, tant pis je vais laisser tomber pour l'instant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/08/2009, 14h19
  2. Ajout dans une table suite à un clic sur un bouton
    Par karinette21 dans le forum IHM
    Réponses: 6
    Dernier message: 28/11/2008, 08h02
  3. Réponses: 10
    Dernier message: 01/01/2006, 17h20
  4. [jTextPane] Ajouter du texte à la suite...
    Par doudine dans le forum Composants
    Réponses: 2
    Dernier message: 03/01/2005, 13h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo