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 :

modifier un champ filter date dans l'admin generator [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut modifier un champ filter date dans l'admin generator
    donc mon appli j'ai un champ date qui en faite correspond à un mois - par défaut le jour est toujours à 05-

    dans l'admin generator, je me retrouve avec un filtre sur une période alors qu'il serait plus facile aux utilisateurs, de sélectionner juste un mois.

    donc dans mon fichier ..FormFilter, j'ai surchargé la fonction configure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function configure()
      {
      	$this->widgetSchema['date'] = new sfWidgetFormDateTime();
     
      	$this->validatorSchema['date'] = new sfValidatorDateTime();
      }
    en affichage, c'est bien pris en compte mais par contre en filtrant il ne me remonte rien.
    en furetant sur le net, j'ai vu que qu'on rajoute un champ il faut aussi creer l'action donc j'ai tenté de le rajouter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function AddDateColumnQuery(Doctrine_query $query, $field, $value)
      {
      	$fieldName = $this->getFieldName($field);
     
      	if($value)
      	{
      		$a = $query->getRootAlias();
      		$query->addWhere($a,', ChqDej.date = ?', $value);
    	}
    	return $query;
      }
    mais j'ai l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLSTATE[42S22]: Column not found: 1054 Unknown column 'r' in 'where clause'
    avec une requete SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) AS num_results FROM ChqDej c WHERE r - (, ChqDej.date = ?)
    j'ai tenté juste avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public function DateColumnQuery(
    mais la il me retourne rien avec une requete SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) AS num_results FROM ChqDej c WHERE c.date IS NULL
    peut on m'aiguiller ?

  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
    Quant tu trouves un truc bien compliqué à faire, tu n'hésites jamais

    J'aurais plutôt vu une liste déroulante peuplée d'un tableau de 1 a 12.

    Ensuite, dans ta requête, le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      		$a = $query->getRootAlias();
      		$query->addWhere($a,', ChqDej.date = ?', $value);
    est faux.

    le $a va récupérer le nom d'alias de la racine de la requête, donc le addWhere doit le considérer comme un élément du nom du champs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query->addWhere( $a . '.date = ?', $value );
    Je n'ai pas creusé plus que cela la création de filtre spécifique, juste analysé le code donné dans ton exemple. Il n'est pas testé par moi non plus.

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Quant tu trouves un truc bien compliqué à faire, tu n'hésites jamais .....
    Je prends cela comme un compliment

    En faites, je travaille avec une application qui a déjà 10 ans sur lequel j'ai rajouté au fur et à mesure des fonctionnalités.
    Malheureusement ça été du rajout avec à chaque fois mes connaissances du moment.
    Début codage au km à la asp 1ere generation, suivit d'un début d'encapsulation en fonction avec pour finir de la POO.
    Et je commençait a rajouté des trucs avec mes débuts dans la notion d'héritage quand je me suis dit qu'il était temps de stopper et de repartir sur une base saine.
    Sauf que toute l'interface client existe et qu'il est hors de question de changer les habitudes du client

    pour revenir au sujet, il a moyen de faire mois/année ?... Et oui je garde l'historique

  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
    Essaye de partir de l'objet jour mois année de base.

    Tu vas être obligé de lui donné un nom particulier et un validateur qu'il faudra modifier aussi. Donc la création d'une partie de filtre particulière ne devrait pas être lourd. Faut juste créer une date avec le jour 5 et les deux autres éléments récupérés.


    Et oui, c'était un compliment !

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    bon j'ai réussi à transformer mon filtre range en un simple champ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function configure()
      {
     
      	$this->widgetSchema['date'] = new sfWidgetFormDate();
        }
    et modif de l'action liée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public function AddDateColumnQuery(Doctrine_query $query, $field, $value)
      {
      	$fieldName = $this->getFieldName($field);
      	print_r($value);
      	die;
      	if($value)
      	{
      		$a = $query->getRootAlias();
      		$query->addWhere($a.'.date = ?', $value);
    	}
    	return $query;
      }
    tout marche.....
    sauf que ça me plait pas et que j'aimerai afficher que le mois/année, donc je transforme mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function configure()
      {
     
      	$this->widgetSchema['date'] = new sfWidgetFormDate();
      	$this->widgetSchema['date']->setOption('format','%month%/%year%');
     
      }
    sauf que bien entendu la valeur n'est plus valide
    en farfouillant sur internet (http://www.symfony-project.org/api/1...thod_configure) j'ai trouvé ça à rajouté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$this->validatorSchema['date'] = new sfValidatorDate(array('date_format'=>'~(?P<month>\d{2})/(?P<year>\d{4})~'));
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$this->validatorSchema['date'] = new sfValidatorDate(array('date_format'=>'~(?P\d{2})/(?P\d{4})~'));

    malheureusement ça ne marche pas >> date invalid <<, des idées ?

  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 pense que le plus rapide et le plus simple (une fois passé une première appréhension compréhensible) sera de créer ton propre widget et le validator qu va avec.

    Base toi sur celui de base (qui te retourne une date en trois liste), vire une liste et retourne directement le 5 en champ caché. J'aime pas trop l'idée, un hacker pourrait modifier le champ date en autre chose que le 5, mais dans un filtre, je ne vois pas trop le bénéfice. Si non, créer le validateur qui va avec le widget et qui, lui, retournera une date avec un 5 du mois et de l'année. Le filtre devrait être simple.

    Faut un peu tripatouiller le code des widget et validator, mais ce n'est pas très sorcier.

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

Discussions similaires

  1. [AC-2002] modifier le format de date dans une requête
    Par tom@tom dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/06/2009, 09h36
  2. Réponses: 6
    Dernier message: 23/06/2009, 14h44
  3. [1.x] Champ de téléchargement dans l'admin generator
    Par qlimamax dans le forum Symfony
    Réponses: 5
    Dernier message: 17/04/2009, 11h34
  4. [1.x] Champs i18n disabled par l'admin generator
    Par wadzat dans le forum Symfony
    Réponses: 1
    Dernier message: 22/05/2008, 14h51
  5. Comment afficher un champ par date dans un intervalle
    Par KING_OF_GRACELAND dans le forum SQL
    Réponses: 13
    Dernier message: 12/03/2008, 10h38

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