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 10/01/2011, 08h40   #1
Invité régulier
 
Inscription : octobre 2010
Messages : 28
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 28
Points : 7
Points : 7
Par défaut [route] Charger un component dans lightbox

Bonjour,

J'ai un module se présentant sous forme de questionnaire en cascade. Quand on coche une case du formulaire, la question d'après s'affiche. J'utilise donc un formulaire avec une bonne dose de jQuery par dessus.

Actuellement, ce formulaire s'affiche dans une page à part entière. J'aimerais cependant aussi poul'afficher dans une lightbox depuis n'importe quelle page du site.
Ma lightbox (Colorbox pour être plus précis) me demande juste d'avoir la page à charger dans l'attribut href du lien.

Mon formulaire s'affiche donc avec le layout. Si je désactive le layout pour cette action, il ne s'affichera pas bien dans la page à part entière.
Je ne trouve donc pas comment faire pour rendre ce formulaire accessible des 2 manières.

J'espère avoir été un minimum explicite :-)
Merci d'avance pour votre aide !
oOZarkOo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 11h20   #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
A priori, dans ta box, tu dois afficher une page html. Donc avec les entêtes et tous le barda. Ce qui proviens du layout.

Donc, si tu actives le layout, tu as une page viable, mais pleins d'entête que tu ne veux pas utiliser. Si tu ne l'active pas, tu as ce que tu veux, mais la page n'est pas viable...

La solution est de créer un deuxième layout, avec le minimum pour décorer ta page. Et ensuite, plutôt que de désactiver le layout, il faut lui dire d'utiliser le light à la place du courant.
__________________
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/01/2011, 12h38   #3
Invité régulier
 
Inscription : octobre 2010
Messages : 28
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 28
Points : 7
Points : 7
Oui mais je dois pouvoir utiliser mon module à la fois dans la colorbox et dans une page normal.

A la limite, je dois pouvoir créer un component avec mon formulaire dedans puis créer 2 actions appelant le component :
  • executeQuestionnaire avec le layout normal.
  • executeQuestionnaireLight avec un second layout plus light.

Mais le problème est que du coup, la même url n'est pas utilisée pour appeller ces 2 actions.

Mon lien permettant d'ouvrir le questionnaire dans la box, est de la forme : <a href="http://www.monsite.com/monmodule/questionnaire"> afin de de ne pas être intrusif (permet d'accéder au questionnaire avec le layout normal si le js n'est pas activé).
Du coup je n'ouvre pas le questionnaire light dans la box mais le normal. Une solution serait de faire un traitement javascript ajoutant Light à a fin de l'url afin de charger le questionnaire light dans la box seulement si le js est activé et ainsi obtenir : <a href="http://www.monsite.com/monmudle/questionnaireLight">
Mais je trouve cette méthode un peu sale.

Tu verrais une autre solution ?
oOZarkOo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 12h45   #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
Crée deux route avec un paramètre non obligatoire, remplis par défaut.

Le paramètre devra avoir le même nom dans les deux route.

Tu envois l'une ou l'autre suivant le cas. Dans ton action (unique) tu vérifies le paramètre (qui est rempli par défaut par la route) et suivant le cas, tu mets l'un ou l'autre layout.

La seule duplication est alors dans la route.
__________________
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/01/2011, 13h07   #5
Invité régulier
 
Inscription : octobre 2010
Messages : 28
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 28
Points : 7
Points : 7
Oula, j'ai pas bien compris ce que tu me conseille la.

En gros, je créé une route questionnaire et une route questionnaireLight, les 2 amenant a mon action questionnaire. La première route a le paramètre "light" vide tandis que la seconde à ce paramètre à true.

Dans mon action executeQuestionnaire, je fais un test genre :
Code :
1
2
3
 
if($request->getParameter('light'))
  $this->setLayout('light');
Et du coup dans la page appelant la box. Je fais un traitement js sur le lien pour ajouter ?light=true à la fin.

C'est bien ça ou j'ai mal compris quelque chose ?

Du coup je suis obligé de faire le traitement js (en soit ce n'est pas dramatique non plus). Mais pourquoi ne pas créer une seule route ?
oOZarkOo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 14h45   #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
Met donc le paramètre à false sur l'autre route.

Tu n'as pas besoin de donner le paramètre à la route, vu que symfony va le positionner par défaut. Il suffit d'utiliser la bonne route pour que le paramètre soit utiliser. Donc pas de besoin en JS.
__________________
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 11/01/2011, 08h50   #7
Invité régulier
 
Inscription : octobre 2010
Messages : 28
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 28
Points : 7
Points : 7
J'ai du mal à voir comment le choix va être fait pour savoir si c'est le light ou non.

Voilà ce que j'ai actuellement :

apps/frontend/config/routing.yml
Code :
1
2
3
4
5
6
7
8
 
questionnaire:
  url: /questionnaire/:light
  param: { module: monmodule, action: questionnaire, light: false }
 
questionnaireLight:
  url: /questionnaire/:light
  param: { module: monmodule, action: questionnaire, light: true }
apps/frontend/config/modules/monmodule/actions/actions.class.php
Code :
1
2
3
4
5
6
7
8
 
public function executeQuestionnaire(sfWebRequest $request) {
  if($request->getParameter('light'))
    $this->setLayout('light');
 
  ...
 
}
La page appelant le questionnaire pour l'afficher dans la box
Code :
1
2
 
<a href="<?php echo url_for('@questionnaire'); ?>">questionnaire</a>
Je ne vois pas vraiment comment continuer là.

En tout cas, merci pour ton aide
oOZarkOo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 09h14   #8
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
Il faut que l'url des deux route soit différente, si non symfony ne pourra faire la différence et adressera toutes les entrées à la première règle.
__________________
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 11/01/2011, 09h42   #9
Invité régulier
 
Inscription : octobre 2010
Messages : 28
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 28
Points : 7
Points : 7
Je crois commencer à comprendre.
Code :
1
2
3
4
5
6
7
8
 
questionnaire:
  url: /questionnaire
  param: { module: monmodule, action: questionnaire, light: false }
 
questionnaireLight:
  url: /questionnaire/light
  param: { module: monmodule, action: questionnaire, light: true }
Mais un point reste flou, comment est-ce qu'en appelant ma route, j'appelle une route ou l'autre suivant si le javascript est activé ?

Le mieux serait (dans l'absolu) que mes 2 questionnaires aient la même url, et de détecter si l'affichage se fait dans la box ou non ; mais je doute que ce soit possible.
oOZarkOo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 10h11   #10
Membre habitué
 
Homme Ludovic Henry
Étudiant
Inscription : octobre 2009
Messages : 97
Détails du profil
Informations personnelles :
Nom : Homme Ludovic Henry
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2009
Messages : 97
Points : 105
Points : 105
Sinon, pourquoi ne pas avoir une seul route et mettre le paramètre light par défaut à false ?

Code :
1
2
3
4
 
questionnaire:
  url: /questionnaire/:light
  param: { module: monmodule, action: questionnaire, light: false }
ainsi dans ton action, tu pourra utiliser ce que tu as déjà écrit:

Code :
1
2
3
4
5
6
 
if ( $request->getParameter('light') )
       $this->setLayout('light');
else {
       // Rien du tout comme tu laisse ton layout par défaut
}
Et ainsi, dans ton javascript, tu appellera l'URL "/questionnaire/true" pour avoir le layout light, et sinon "/questionnaire" pour avoir le layout normal
Inarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 11h18   #11
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
C'est la même solution... côté code.

Après, côté route, les deux se valent. Tant que la route avec le paramètre par défaut reste la route normale d'accès. Que l'autre s'appelle :
- www.monsite.com//questionnaire/light
- www.monsite.com//questionnaire/true
- www.monsite.com//questionnaire_light
- http://www.monsite.com//toto_est_par...vous_patientez

Cela n'a pas réellement d'importance.
__________________
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 12/01/2011, 12h35   #12
Invité régulier
 
Inscription : octobre 2010
Messages : 28
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 28
Points : 7
Points : 7
Merci à vous 2 pour votre aide.

J'ai réussi à faire ce que je voulais du coup.

2 routes, un test dans l'action, et j'initialise la box en js en ajoutant /light à la fin du href actuel. De cette manière, si on clic sur le lien, on charge le questionnaire dans la box, mais si on fait "ouvrir dans une nouvelle fenêtre", on charge le questionnaire avec le layout normal.

Merci encore !
oOZarkOo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 14h58   #13
Invité régulier
 
Inscription : octobre 2010
Messages : 28
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 28
Points : 7
Points : 7
J'aurais tout de même une autre question.

Dans le fichier view.yml de mon application j'ai :
Code :
1
2
3
4
5
6
 
default:
  stylesheets:    [global.css, colorbox.css]
  javascripts:     [jquery.min.js, jquery.colorbox.min.js, global.js]
  has_layout:     true
  layout:           layout
Du coup, même quand je fais un $this->setLayout('light'), le fichier global.js est chargé. Hors j'aimerais qu'il le soit que pour le layout "layout".
Est il possible de configurer ca dans le yml ou est ce que je suis obligé d'enlever du yml et de le mettre directement dans le fichier du layout ?
oOZarkOo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h39.


 
 
 
 
Partenaires

Hébergement Web