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 :

Variable php passée en paramètre à une fonction javascript en twig


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Variable php passée en paramètre à une fonction javascript en twig
    Bonjour à tous,
    comme je le dis dans l'intitulé, je rencontre un problème dans le passage d'une variable. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <iframe id="i_{{fichier.id}}" width="100%" frameborder="0" scrolling="no"
     src="http://localhost/pdf.js/web/viewer.html?file=http://localhost/alecsia/upload/{{fichier.rendu.dossier}}/{{fichier.nomFichier}}"
     onload = iframeLoaded(i_{{fichier.id}}) ></iframe>
    Comme vous pouvez le voir dans la source j'appelle un viewer.html avec un parametre file pour ouvrir un pdf (j'utilise pdf.js), là tout fonctionne.
    Le problème vient du onload, je veux par exemple passer i_14 ( qui correspond a i_{{fichier.id}} )
    Malheureusement ca ne passe pas, mon fichier javascript rend null, alors que quand je mets en dur i_14 ca passe. Donc ça vient de mon passage de paramètre, peut etre que ca ne se fait pas comme ca avec twig mais ca me semblerait logique. Est-ce que quelqu'un a une idée?
    Pour info, ma fonction calcul la hauteur du "fichier" pdf à afficher afin de ne pas avoir de scrollbar dans mon iframe.
    Merci!

  2. #2
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Points : 677
    Points
    677
    Par défaut
    Bonjour,

    ça pourrait se faire comme ça. Peux tu poster le controller qui rends ce template.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    merci pour ta réponse, voici la fonction de mon controller appelé :

    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
    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
     
    /* Rend le rendu d'id donné en paramètre */   
        public function indexAction($rendu_id, $lecture_etudiant=false)
        {
     
        	// Recup BDD des infos rendu, ses fichiers, leurs annotations
            $em = $this->getDoctrine()->getEntityManager();
        	$rendu = $this->get('alecsia.workService')->get($rendu_id, $this->getUser());
     
        	if (!$rendu) {throw new NotFoundHttpException(sprintf('Rendu #%s introuvable.', $rendu_id));}
     
        	$fichiers = $em->getRepository("AnnotationBundle:Fichier")->findBy(
                array("rendu" => $rendu->getId()),
                array("dossier" => "asc",
                      "nom_fichier" => "asc")
            );
        	$annotations = $em->getRepository("AnnotationBundle:Annotation")->findByRendu($rendu->getId());
     
            $exercices = $em->getRepository("AnnotationBundle:Exercice")->findBySujet($rendu->getSujet()->getId());
            $langages = $em->getRepository("AnnotationBundle:Langage")->findBy(array(),array("nom" => "asc"));
     
     
     
            // Classement des annotations par fichier
            // TODO Peut peut être être optimisé en faisant faire ce tri à la BDD
            $annotArray = array();
     
            foreach ($fichiers as $f) {
                $annotArray[(string) $f->getId()] = array();
            }
     
            foreach ($annotations as $a) {
                $fichier = $a->getFichier();
                if ($fichier != null) {
                    $id_fichier = (string) $fichier->getId();
                } else {
                    $id_fichier = "entete";
                }
                $annotArray[$id_fichier][] = $a;
            }
     
            // Calcul du barème
            $calculeur = $this->get('annotation.calculnotes');
            $bareme = $calculeur -> getBareme($rendu,true);
     
    	    return $this->render('AnnotationBundle:Correction:correction.html.twig', array(
                                'rendu' => $rendu, 
                                'fichiers' => $fichiers, 
                                'liste_annotations' => $annotArray,
                                'exercices' => $exercices,
                                'langages' => $langages,
                                'bareme' => $bareme,
                                'lectureseule' => $rendu->getSujet()->getNotesGelees()
                                || $lecture_etudiant,
                                'lectureetudiant' => $lecture_etudiant
                            ));
        }

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    En fait je pense avoir trouvé mon erreur voici mon code javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function iframeLoaded(iframeid) {
    var max = document.getElementById('iframeid').contentWindow.scrollMaxY || document.getElementById('iframeid').contentDocument.height;
     
    if (max<1000){ //taille de la page 
     
    setTimeout(iframeLoaded(iframeid),2000);
    }
    document.getElementById('iframeid').height = max;
    }
    En fait, en cause de mon timeout qui rappel iframeloaded il renvoie un parametre qui ne sera plus défini, enfin je pense.

    Je précise que j'utilise setTimeout pour attendre, car en effet quand je charge la page le pdf ne se charge pas instantanément, sinon il me renvoie une mauvaise valeur, celle qd le pdf n'est pas encore chargé. du coup je fais attendre, et hop j'ai la bonne valeur apres 2 secondes.

  5. #5
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Points : 677
    Points
    677
    Par défaut
    Toutefois, j'attire ton attention sur le fait que tu envoie à ton template l'objet fichiers au pluriel. Peut être fait tu une boucle pour récupérer un fichier.id ?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Oui c'est bien ça. Je ne vois pas très bien comment modifier mon javascript pour que ça fonctionne.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/05/2011, 22h46
  2. Réponses: 11
    Dernier message: 01/02/2011, 15h20
  3. Passage de variable php en parametre d'une fonction javascript
    Par alex7532 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 26/01/2010, 19h46
  4. Nom d'une variable passée en paramètre à une fonction
    Par cata2 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 07/09/2007, 09h17
  5. [PHP-JS] comment lancer une fonction javascript a partir de php
    Par amika dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/06/2005, 19h23

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