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

 PHP Discussion :

attribut dans table de liaison generator.yaml


Sujet :

PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 30
    Par défaut attribut dans table de liaison generator.yaml
    Bonjour

    J'aimerai afficher, lors de l'édition d'une séance depuis l'administration, à côté de chaque case à cocher de chaque activité, une liste déroulante permettant d'indiquer le nombre de vidéos requis pour la séance et l'activité.

    Mon schéma :
    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
    Seance:
      columns:
        name:
          type:           string(255)
          notnull:        true
    Activite:
      columns:
        name:
          type:           string(255)
          notnull:        true
      relations:
        Seances:
          class:          Seance
          refClass:       SeanceActivite
          foreignAlias:   Activites
    SeanceActivite:
      columns:
        seance_id:
          type:           integer
          primary:        true
        activite_id:
          type:           integer
          primary:        true
        nbvidrequis:
          type:           integer
      relations:
        Seance:
          foreignAlias:   SeanceActivites
        Activite:
          foreignAlias:   SeanceActivites
    Dans la page d'édition d'une séance, j'arrive à afficher la liste des activités sous forme de case à cocher :
    Mon generator.yml >
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    generator:
    ...
        config:
    ...
          form:
            class: BackendSeanceForm
    ...
    Ma classe BackendSeanceForm >
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class BackendSeanceForm extends SeanceForm
    {
      public function configure()
      {
        $this->widgetSchema['activites_list'] = new sfWidgetFormDoctrineChoice(array(
    	  'label' => 'Activités associées',
          'multiple' => true, 
    	  'expanded' => true, 
    	  'model' => 'Activite',
    	  'renderer_class' => 'myWidgetFormSelectCheckboxTable' 
        ));
      }
    }
    et le myWidgetFormSelectCheckboxTable.class.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
    class myWidgetFormSelectCheckboxTable extends sfWidgetFormSelectCheckbox {
     
      public function formatter($widget, $inputs) {
        $rows = array();
        $itemsPerRow = sfConfig::get('app_itemsperrow_checkbox');
        $i=0;
        $rows[] = "<table>";
        foreach ($inputs as $input) {
          if ($i % $itemsPerRow == 0) {
            $rows[] = "<tr>";
          }
          $rows[] = $this->renderContentTag('td', $input['input'].$this->getOption('label_separator').$input['label']) ;
          $i++;
          if ($i % $itemsPerRow == 0) {
            $rows[] = "</tr>";
          }
        }
        $rows[] = "</table>";
     
        return !$rows ? '' : $this->renderContentTag('ul', implode($this->getOption('separator'), $rows), array('class' => $this->getOption('class')));
      }
    }
    Seulement, je n'ai aucune idée sur le chemin a suivre pour ajouter les listes déroulantes pour chaque activités...
    Merci de m'aider svp.

  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
    Si je comprend bien tu génères une liste qui sera utilisée pour tes case à cocher.
    A priori ton objet utilise le toString de l'autre table pour générer le texte à afficher.

    Le plus simple serait de modifier ce toString pour lui rajouter le nombre en question.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 30
    Par défaut
    Michel,

    je n'arrive pas à obtenir la liste déroulante des nbvidrequis à travers la méthode __toString d'Activite.
    Pourrais-tu m'éclairer stp ?

  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
    Tu as déjà utilisé myWidgetFormSelectCheckboxTable ailleurs ?

    Si non, avec un sfWidgetFormSeceltCheckbox tu as essayés ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 30
    Par défaut
    oui utilisé ailleurs mais je peux en faire un dédié, je vais essayer.

    En fait je n'arrive pas à avoir l'id de séance dans la méthode __string() de la classe Activite : as-tu une façon de faire à me proposer ?

  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
    Je suppose que séance est lié à activité.

    Je suppose que la relation du côté d'activité est appelée "seances".

    Donc pour récupérer les seances depuis (le code est dans l'objet activité) une activité tu vas faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $seances = $this->getSeances();
    qui retourne la liste des séances pour cette activité (un Doctrine_Collection).

    Pour avoir le nombre de séance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nbSeances = count( $this->getSeances() );
    attention, si la requête d'origine ne retourne pas les activités ET les séances, tu vas avoir une requête supplémentaire par ligne dans le sélect, ce qui peut faire beaucoup.

    En y réfléchissant, tu devrais aussi pouvoir un peu simplifier (compliquer) la chose.

    En effet, le sfWidgetFormSelectCheckbox attend un tableau (options choices).. Il est peut-être plus simple de faire le tableau "à la main".

    Une méthode de ce type
    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
    #actionTable.class.php (non vérifié)
    static function getActionSeanceNb()
    {
      $datas = self::getInstance()->
                createQuery('a')->
                innerJoin('a.Seances s')->
                select('a.id, a.nom, count(s.id) seance')->
                orderBy('a.nom')->
                execute( array(), Doctrine_Core::HYDRATE_ARRAY_SHALLOW );
      $ret = array();
      foreach ($datas as $action)
      {
        $ret[ $action['a_id'] ] = $action['a_nom'] . ' (' . $action['s_seance'] . ')';
      }
      return $ret;
    }
    Je ne suis pas très sur des noms renvoyé par l'hydratation array_shallow, a vérifier. Et je ne suis pas plus sur de la syntaxe pour select() pour donner un nom à count, a vérifier. Mais en gros l'idée y est. Et le tout en une requête. Dommage que l'on ne puisse directement sortir le tableau.

Discussions similaires

  1. [MySQL] requete update et insert dans table de liaison
    Par rollingboy dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/06/2014, 19h34
  2. [C#] insert de FK dans table de liaison
    Par Raph87 dans le forum Linq
    Réponses: 6
    Dernier message: 12/07/2011, 11h32
  3. Réponses: 1
    Dernier message: 02/10/2010, 10h00
  4. Changer la position d'un attribut dans une table?
    Par gui38 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/01/2007, 22h27
  5. Comment connaitre le type d'un attribut dans une table?
    Par Abdou_9002 dans le forum Bases de données
    Réponses: 1
    Dernier message: 02/03/2006, 11h07

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