Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/12/2010, 11h41   #1
Futur Membre du Club
 
Inscription : juin 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 81
Points : 17
Points : 17
Par défaut Ajout champs formulaire

Bonjour à tous,

J'aimerais savoir si il existe la possibilité de rajouter des champs à un formulaire (plus précisement du backend), qui ne sont donc pas lié à l'objet du formulaire.

Pour le moment j'ai surchargé le fichier _form_fieldset.php en faisant ainsi:
Code :
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
<fieldset id="sf_fieldset_<?php echo preg_replace('/[^a-z0-9_]/', '_', strtolower($fieldset)) ?>">
  <?php if ('NONE' != $fieldset): ?>
    <h2><?php echo __($fieldset, array(), 'messages') ?></h2>
  <?php endif; ?>
    <div class="sf_admin_form_row sf_admin_text sf_admin_form_field_reference_1">
        <div>
            <label for="jointure_references_reference_1">R&eacute;f&eacute;rence 1</label>
                <div class="content">
                    <input name="reference_1" id="jointure_references_reference_1" type="text"  />
                </div>
        </div>
    </div>
    <div class="sf_admin_form_row sf_admin_text sf_admin_form_field_reference_2">
        <div>
            <label for="jointure_references_reference_2">R&eacute;f&eacute;rence 2</label>
                <div class="content">
                    <input name="reference_2" id="jointure_references_reference_2" type="text"  />
                </div>
        </div>
    </div>
 
 
  <?php foreach ($fields as $name => $field): ?>
    <?php if ((isset($form[$name]) && $form[$name]->isHidden()) || (!isset($form[$name]) && $field->isReal())) continue ?>
    <?php include_partial('jointureReferences/form_field', array(
      'name'       => $name,
      'attributes' => $field->getConfig('attributes', array()),
      'label'      => $field->getConfig('label'),
      'help'       => $field->getConfig('help'),
      'form'       => $form,
      'field'      => $field,
      'class'      => 'sf_admin_form_row sf_admin_'.strtolower($field->getType()).' sf_admin_form_field_'.$name,
    )) ?>
  <?php endforeach; ?>
 
</fieldset>
Mais je pense pas que ce soit très "propre".
Merci de votre aide.
babyboy6492 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 18h05   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Pourquoi ais-je l'impression que tu fais un truc inutilement compliqué ?

Si j'ai bien compris, tu as un form (que tu tortures bizarrement) et d'autres champs qui ne sont pas du forms.

Quel est exactement le besoin de ce montage ? D'où viennent les champs supplémentaires ? D'où viennent les données ? Où vont les données une fois traitées ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 23h42   #3
Futur Membre du Club
 
Inscription : juin 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 81
Points : 17
Points : 17
Je vais essayer de t'expliquer.
Pour faire simple j'ai 3 champs dans une table: index_catalogue, index_secondaire et lien_de_parente.

Le formulaire porte sur cette table.
Sauf que les index sont des id de la table catalogue. Ces id sont représentés par un champs référence (par exemple l'insertion dont l'id vaut 1 a dans le champs référence la valeur STD400).

Ce que j'aimerai faire c'est avoir les champs index_catalogue et index_secondaire cachés (ca c'est facile avec sfWidgetFormInputHidden), et avoir deux champs: référence 1 et référence 2.

La personne remplira alors ces champs là et un script ira chercher dans la base de données, dans la table catalogue et proposera toutes les référence que l'utilisateur a tapé. Par exemple si je tape STD, je pourrai avoir le choix entre STD400, STD300, FX2STD400, etc.

Une fois que l'utilisateur a choisit la bonne référence pour la référence 1, le champs index_catalogue s'auto-complètera par l'id de cette référence. De même pour référence 2 et index_secondaire.

Une fois le formulaire soumis, ces deux champs ne me serviront donc à rien. A aucun moment je dois enregistrer dans la base les valeurs de ces champs. Ce sont en quelque sorte des champs de recherche qui permettent de remplir d'autre champs hidden.

Étais-je assez clair et précis?? :S Si tel n'est pas le cas, demande moi plus de précision, j'essayerai d'apporter des compléments d'information.

Merci.
babyboy6492 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 00h42   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Oui, je vois, et je pense avoir une solution plus simple.

Tu as la possibilité de mettre une liste plutôt qu'un champ caché. Et mieux, tu peux facilement faire une liste qui se rempli en fonction de ce que l'utilisateur tape, par ajax (requête en json). Il y a un widget dans les sfExtraWidgetPlugin (non a caution, il est minuit passé ) qui le fait automatiquement.

C'est peut-être une solution plus élégante pour ton problème, et plus rapide pour les utilisateur, surtout si tu tournes en milieu fermé et peut imposer l'utilisation du JS sur les postes.


Pour le principe. Par convention, les noms des champs de liaison terminent par _id.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 12h16   #5
Futur Membre du Club
 
Inscription : juin 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 81
Points : 17
Points : 17
Citation:
Envoyé par Michel Rotta Voir le message
Et mieux, tu peux facilement faire une liste qui se rempli en fonction de ce que l'utilisateur tape, par ajax (requête en json). Il y a un widget dans les sfExtraWidgetPlugin (non a caution, il est minuit passé ) qui le fait automatiquement.

Pour le principe. Par convention, les noms des champs de liaison terminent par _id.
Ca tombe bien, j'ai déjà ce plugin d'installer pour le tinyMCE...
Quelle est ce widget??
Comment faire une liste cachée: sfWidgetInputChoiceHidden??

Pour le nom des champs de liaison, comme je te l'ai expliqué dans un topic sur l'admingenerator avec doctrine, je ne peux changer les tables, leur structure et le nom des champs malheureusement...
babyboy6492 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 16h32   #6
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Le widget est : sfWidgetFormJQueryAutocompleter.

De l'info pour utiliser le plugin : http://www.symfony-project.org/blog/...and-validators

Citation:
Pour le nom des champs de liaison, comme je te l'ai expliqué dans un topic sur l'admingenerator avec doctrine, je ne peux changer les tables, leur structure et le nom des champs malheureusement...
Désolé, je ne peux retenir les particularités de chaque projets de chaque intervenant. Le prix à payer pour l'information.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 01h06   #7
Futur Membre du Club
 
Inscription : juin 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 81
Points : 17
Points : 17
Citation:
Envoyé par Michel Rotta Voir le message
Désolé, je ne peux retenir les particularités de chaque projets de chaque intervenant. Le prix à payer pour l'information.
Pas de problème Michel!! C'était juste un rappel, rien de méchant, rassure toi

Je vais regarder ce widget et je vous tiens informer. Merci de l'aide.
babyboy6492 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 13h10   #8
Futur Membre du Club
 
Inscription : juin 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 81
Points : 17
Points : 17
Alors tout d'abord merci beaucoup Michel ,ce widget est formidable.
J'ai juste 2-3 questions en plus.

Actuellement, voila comment je procède:
Dans mon fichier JintureReferencesForm.php, j'ai mis:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
  public function configure()
  {
	$context = sfContext::getInstance();
 
    $this->setWidgets(array(
      'index_catalogue'  => new sfWidgetFormJQueryAutocompleter(array('url' => $context->getController()->genUrl('@ajax_getRefs'))),
      'index_secondaire' => new sfWidgetFormJQueryAutocompleter(array('url' => $context->getController()->genUrl('@ajax_getRefs'))),
    ));
 
	$this->widgetSchema->setLabels( array(
		'index_catalogue' => 'R&eacute;f&eacute;rence 1',
		'index_secondaire' => 'R&eacute;f&eacute;rence 2',
	));
J'ai donc définit une nouvelle route:
Code :
1
2
3
ajax_getRefs:
  url:   /ajax/getRefs
  param:  { module: jointureReferences, action: getRefs }
Et rajouter une action dans actions.class.php:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
  public function executeGetRefs(sfWebRequest $request)
  {
    $q = $request->getParameter('q');
 
    $refs = Doctrine::getTable('Catalogue')->findByKeyword($q);
    $list = array();
    foreach($refs as $ref)
    {
      $list[$ref->getId()] = sprintf('%s (%s)', $ref->getRef(), $ref->getDesignation());
    }
    return $this->renderText(json_encode($list));
  }
Et enfin une methode findByKeyword dans mon model:
Code :
1
2
3
4
5
6
7
8
9
<?php
  public function findByKeyword($q)
  {
    $q = $this->createQuery('c')
		  ->select('c.ref, c.designation, c.id')
          ->where('c.ref LIKE ?', '%'.$q.'%');
 
    return $q->execute();
  }
Première question, il ne m'affiche que 10 résultats alors que j'aimerais qu'il puisse en afficher un peu plus: comment faire?

Deuxième question: est-il possible de surcharger les filtres pour faire la même choses?

Et enfin, dernière question: est-il possible d'agrandir l'input dans lequel on tappe le text (j'ai essayé de lui donné une class puis de faire du css: wdth: 200px; et ca ne change rien: je m'y prends peut-être mal...)?

Merci pour ton aide Michel
babyboy6492 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 17h46   #9
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Première question. Je crois que c'est géré dans le JS. Je ne sais pas s'il y a un paramètre.

Deuxième question. Tu peux répéter la question... Quel filtre ?

Troisième question. Space. Je ne me rappel pas avoir jamais eu de problème de présentation. Pas l'appli là. Regarde avec un firebug sur FF ce qui se cache dans l'objet et ce qui est pris en compte dans tes CSS.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h47.


 
 
 
 
Partenaires

Hébergement Web