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 05/07/2011, 11h41   #1
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 311
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 311
Points : 33
Points : 33
Par défaut appliquer les filters en Frontend

Bonjour à tous,
ça fait un moment que je galère avec un prb, je souhaite appliquer un Filtre (utilisé d'habitude en Backend) sur un module Frontend, j'ai trouvé qq discussions dans ce forum, mais j'arrive pas pour l'instant à trouver la bonne solution et le bon code qui marche

j'ai essayé d'adapter notamment le code publié sur:
http://www.developpez.net/forums/d99...ltre-frontend/

mais ça marche pas

vous avez des idées, des pistes soit sur ce code et sur un autre qui marcherait mieux

merci!!!
flora806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 14h00   #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
Comment sont généré les query entre le back et le front ?

Que veux-tu exactement copier ?

Comment imagines-tu pouvoir passer le filtre de l'un à l'autre au niveau de l'interface au moins (à moins que tu aies déjà la solution au niveau code).
__________________
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 05/07/2011, 14h26   #3
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 311
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 311
Points : 33
Points : 33
Voici ce que j'ai essayé d'adapter comme code dans mon module Frontend (Article):

le code du controller:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
 public function executeIndex(sfWebRequest $request)
  {
 
    $this->filters = new ArticleFormFilter($this->getFilters());
    $this->articles = $this->buildQuery(Doctrine::getTable('article')
        ->getSortedArticles());
 
		}
 
 
public function executeFilter(sfWebRequest $request)
  {
    // RESET
    if ($request->hasParameter('_reset'))
    {
      $this->setFilters(array()); //reset, filtre vide
      $this->forward('article','index');
    }
 
    $this->filters = new ArticleFormFilter($this->getFilters());
 
    $this->filters->bind($request->getParameter($this->filters->getName()));
    if ($this->filters->isValid())
    {
      $this->setFilters($this->filters->getValues());
      $this->forward('article','index');
    }
 
    $this->setTemplate('index');
  }		
 
 
protected function getFilters()
  {
    return $this->getUser()->getAttribute('article.filters', array());
 
  }
 
  protected function setFilters(array $filters)
  {
 
    return $this->getUser()->setAttribute('article.filters', $filters, 'front_module');
 
  }
 
 
  protected function buildQuery($q)
  {
    if(!isset($this->filters))
      $this->filters = $this->getFilters();
 
    $this->filters->setQuery($q);
 
    $query = $this->filters->buildQuery($this->getFilters());
    return $query->execute();
  }
le partial:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 <?php use_stylesheets_for_form($filters) ?>
<?php use_javascripts_for_form($filters) ?>
 
  <?php if ($filters->hasGlobalErrors()): ?>
    <?php echo $filters->renderGlobalErrors() ?>
  <?php endif; ?>
 
<form class="lien_ajax" action="<?php echo url_for('article/filter') ?>" method="post">
  <?php echo $filters ?>
 
  <?php echo $filters->renderHiddenFields() ?>
  <input type="submit" value="Filter" /> &nbsp; <a class="lien_ajax" href="<?php echo url_for('article/filter?_reset=1') ?>">Reset</a>
</form>
le template:
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
 
 
<?php  include_partial('filters', array('filters' => $filters)) ?>
 
 
<h2>résultats filtrés</h2>
 
<table>
  <thead>
     <tr>
    <th>Id</th>
       <th>Nom</th>
       <th>Référence </th>
       <th>Fournisseur</th>
     ....
              </tr>
  </thead>
  <tbody>
 
 
 <?php foreach ($articles as $article): ?>
 
    <tr>
      <td><a href="<?php echo url_for('article/show?id='.$article->getId()) ?>"><?php echo $article->getId() ?></a></td>
       <td >  <?php echo $article->getNom()?> 
      </td>
        <td >
       <?php echo $article->getReference()?>
      </td>
        <td >
       <?php echo $article->getFournisseur()?>
      </td>
     .....
 
  </tbody>
</table>
le problème avec ce code, c'est que j'ai aucun résultat qui s'affiche quand j'applique le filtre
flora806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 16h13   #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
Tu es sur qu'il y a quelque chose dans ton objet user pour "article.filters" ?
__________________
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 05/07/2011, 16h21   #5
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 311
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 311
Points : 33
Points : 33
je viens de faire un var_dump de :
$this->getUser()->getAttribute('article.filters', array()));
ça m'affiche: array: empty

En regardant du côté de mon module "Article" en backend, dans le cache, j'ai trouvé dans le controller le code suivant:
Code :
1
2
3
4
5
6
7
8
9
10
 
  protected function getFilters()
  {
    return $this->getUser()->getAttribute('article.filters', $this->configuration->getFilterDefaults(), 'admin_module');
  }
 
  protected function setFilters(array $filters)
  {
    return $this->getUser()->setAttribute('article.filters', $filters, 'admin_module');
  }
comment je pourrais traduire ça du côté du frontend?
parce que en essayant de remettre ce même code, j'ai une erreur:

Fatal error: Call to a member function getFilterDefaults() on a non-object..
flora806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 11h10   #6
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 311
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 311
Points : 33
Points : 33
Bon, j'ai pu résoudre le problème d'application des filtres en Frontend en regardant ce lien:
http://www.developpez.net/forums/d98...-on-aime-ca-y/

il y avait un petit souci notamment dans le "buildQuery($q)"

il me reste maintenant à faire fonctionner la pagination...

des idées?
flora806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 13h55   #7
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
En fait, je ne suis pas sur (je serais plutôt sur du contraire) que tu aies le même objet $user (même pour la même personne) entre les deux.

Ouvre ton back, sélectionne des données. Regardes, après la sélection, dans le debug, le contenu de l'objet user, tu y verras les données de ton filtre. Passes en front, regardes au même endroit, dans la partie debug, si tu y retrouves les donné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 06/07/2011, 17h39   #8
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 311
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 311
Points : 33
Points : 33
SOS, j'arrive plus à faire quoi que ce soit sur mon projet symfony, j'ai ça comme erreur:
Citation:
Warning: unserialize() [function.unserialize]: Function spl_autoload_call() hasn't defined the class it was called for in ....\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Connection.php on line 1578

Fatal error: Allowed memory size of 134217728 bytes exhausted..
c quoi ce truc, j'arrive pas à comprendre ce qui se passe.
je sais pas si ça vient du navigateur..mais juste pour info, en testant sur IE, j'ai bien accès à tout
flora806 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 22h15   #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
Bizarre, je ne vois pas en quoi du code standard pourrait faire qu'il fonctionne, ou pas, suivant l'explorateur. Sauf si, dans ton code, tu effectues un traitement en fonction de l'opérateur.

De plus le message laisserait penser à une boucle sans fin qui saturerait la mémoire. Ou une fuite de mémoire dans un traitement d'objet, là aussi possiblement dans une boucle. Mais je ne vois aucune raison que cela soit influencé par l'explorateur.

Quels sont les dernières modifications effectuées ? Que donne l'application des tests unitaires ?
__________________
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/07/2011, 15h44   #10
Membre éclairé
 
Inscription : août 2007
Messages : 360
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 360
Points : 334
Points : 334
Bonjour,

Désolé de me meler à la conversation, mais à tu pensé à vider le cache de ton navigateur, ainsi que le cache de symfony (php symfony cc), peut être que la solution est la, sauf si tu as mal développé (créé une boucle infinie au niveau de ton accès à ta base de données via Doctrine, comme le dit Michel...)

Cordialement,

Mathieu
mathieu44800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2011, 15h58   #11
Invité régulier
 
Inscription : janvier 2007
Messages : 47
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 47
Points : 7
Points : 7
Par défaut Mélanger des modules

Bonjour,

Moi aussi je mêle un peu et en retard à une conversation qui ne me regarde peut être pas.

Mais c'est quoi l’intérêt ou le pb de choisir de générer un module admin ou front

En clair mis à part que les modules sont construits différemment, est ce qu'on peut mélanger selon l'humeur des modules admin crées comme ça
- generate-admin backend JobeetJob --module=job

et des modules CRUD Front crées comme ça
- generate-module frontend article Article

dans la même apps
Ils sont générés complètement différenmment
mais on peu intervenir comme on veut après coup comme on veut sur les deux,
Ou alors?

Pi
pierreHaut 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 23h29.


 
 
 
 
Partenaires

Hébergement Web