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

Symfony PHP Discussion :

readonly sur un select [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 131
    Par défaut readonly sur un select
    Bonjour

    j'ai un select d'un champ du formulaire, qui reference une liste d'une autre table, je veux le bloqué en read only, lecture seule, qu'un utilisateur ne peut pas choisir .

    dans le genre ... "Même si je sais que ce n'est pas faisable de cette façon".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      $this->widgetSchema['row_id'] = new sfWidgetFormSelectMany(array(), array('readonly'=>'readonly'));
    Je vous remercie par avance

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    L'option readonly sur un widget présente l'inconvénient de ne pas permettre le retour des données (limitation xhtml et explorateur). Donc, en cas de retour d'information fausse après validation et de ré affichage du formulaire, la zone apparait vide. Je n'ai aucune idée du résultat en cas de retour sur une liste qui pourrait, suivant la manière dont la liste est affichée, donner des résultats aberrants.

    La meilleur solution reste de faire entièrement le formulaire "à la main", en créant le tableau et en y insérant les nom render des widgets un a un. Pour les données qui ne doivent qu'être affichée, on introduit alors, non pas le render du widget, mais la valeur de la colonne en simple affichage.

    Un article qui décrit la procédure ici
    .

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 131
    Par défaut
    Mais mon problème maintenant est que j'ai généré tout en admin generator, je suis entrain de le customiser ... c'est vrais ce n'est pas la meilleure solution, mais je voulai proffiter des fonctionnalités que l'admin offre.

    Donc, vous pensez qu'il n'y a pas un moyen de rendre un select en lecture seule... vous savez qu'est ce que j'ai fait ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->widgetSchema['row_id'] = new sfWidgetFormInput(array(), array('readonly'=>'readonly') );
    j'ai changé le select en simple input avec la valeur initialisée en lecture seule, ça évitera que l'utilisateur change cette valeur


    Merci

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    A la longue ce n'est ni sécurisé, ni utilisable en cas d'erreur, le texte n'est pas réaffiché.

    Essaye de créer un widget qui ne fait qu'afficher.

    Dans le dossier lib de l'application, crée un dossier widget et le code pourrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class sfWidgetFormShow extends sfWidgetFormInput 
    {
      public function render($name, $value = null, $attributes = array(), $errors = array())
      {
        return $this->renderContentTag('p', $this->escapeOnce($value), array_merge(array('name' => $name), $attributes));
      }
    }
    Tu utilises dans ton objet form ce widget à la place du sfWidgetFormInput, et tu vires le validator.

    Pas testé, c'est du bricolage, c'est un des projets que j'ai pour un plugins (showonly) mais il est très embryonnaire. Tu es cobaye testeur !

    Normalement, cela devrait marcher.

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 131
    Par défaut
    Merci,

    j'ai fait comme tu m'as dit, mais au moment d'execution, il me dit qu'il reconnait pas sfWidgetFormShow ...


    y a t-il une configuration ou autre chose, outre l'ajout du fichier à faire?

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Il faut que le fichier s'appelle : sfWidgetFormShow.class.php

    Il faut qu'il soit dans le dossier lib/widget du projet.

    Il faut, sauf si tu est en debug avec frontend_dev.php faire un cc.


    Si cela ne marche pas, jette un œil dans le cache :
    cache/<application>/<environnement>/config/ et cherche le fichier config_autoload.yml.php vérifie que ton fichier s'y trouve. Il ne sert à rien de modifier ce fichier, il est régulièrement régénéré.

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 131
    Par défaut
    Je vous remercie, ça marche très bien.


    Merci

  8. #8
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Bon, je le remonte d'un niveau dans les plugin a réaliser.

    Je suis sur que cela peut intéresser beaucoup de monde.

    C'était la quel des options qui ne marchait pas ?

  9. #9
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 131
    Par défaut
    En fait, j'ai juste ajouté le widget crée dans le lib de vendor .. pas dans le lib de l'application, c'est pour cela il le trouvai pas .. je pensai que tout les widget on les met dans le même repertoire, ceux par défaut symfony, et les personnalisés.

    Donc j'ai mis mon fichier dans app/frontend/lib/widget/

    ça marche nickel.

    Merci

  10. #10
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    En le mettant là, tu ne peux l'utiliser que dans frontend.

    tu peux aussi le mettre dans /lib/widget, et il sera utilisable par toutes les applications.

    Dans mes souvenirs de la routine qui prépare l'autoload, il a, en mémoire, tous les fichiers dans le vendor et ne l'analyse pas, sauf le dossier plugins, en fonction des plugins déclarés dans l'application.

    Bonne chance,
    Michel Rotta

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

Discussions similaires

  1. [W3C] readonly sur select, checkbox et radio
    Par Swoög dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 18/05/2006, 12h33
  2. [HTML] ReadOnly sur les <SELECT> ?
    Par Invité dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 16/06/2005, 15h55
  3. Faire apparaître un champ texte en cliquant sur un select
    Par yoyot dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/03/2005, 16h16
  4. Readonly sur une checkbox
    Par Oluha dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 14/02/2005, 11h09
  5. ajout de colonnes sur une selection
    Par DaxTaz dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 05/08/2004, 17h44

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