Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 24-03-2010 21:49:35

goldenboy68
Nouveau membre
Date d'inscription: 12-04-2009
Messages: 6

[Résolu] Insertion de code javascript, où ?

Bonjour TLM,

Je débute et pour prendre les bonnes habitudes je me demandais s'il y avait une recommandation pour intégrer du code javascript dans un layout.

Pour l'instant je mets directement le code suivant dans mon layout.phtml :
    <script type="text/javascript">
      window.addEvent('domready', function(){
        SexyLightbox = new SexyLightBox({color:'white', dir: 'images/sexyimages'});
      });
    </script>

Est-ce qu'il faut utiliser le headScript comme pour les fichiers JS inclus ?
Faut-il mettre tout ça ailleurs ? (j'ai vu que certains parlaient de mettre ça dans des views...mais je débute débute, donc je vois pas trop comment ça s'articule tout ça).

@+ Samy.

Dernière modification par goldenboy68 (10-04-2010 01:10:23)

Hors ligne

 

#2 24-03-2010 22:44:42

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: [Résolu] Insertion de code javascript, où ?

les scripts js vont soit dans les balises head, soit dans le pied de page de ton site.
Tu peux le faire avec headscript() mais pense à le faire afficher à l'un de ces 2 endroits.

Headscript() te permet d'appeler les scripts seulement là où t'en as besoin. Si tu le met directement dans ton layout (comme actuellement) sa te le mettra pour chaque page. A toi de voir smile

Hors ligne

 

#3 24-03-2010 23:26:28

goldenboy68
Nouveau membre
Date d'inscription: 12-04-2009
Messages: 6

Re: [Résolu] Insertion de code javascript, où ?

Ok, c'est un peu mon problème : il est conseillé de mettre les scripts dans le head (d'où l'insertion dans le layout), par contre si je mets le même code dans une view, ça marchera aussi mais ça ne sera pas inclus dans le head.

@+

Hors ligne

 

#4 25-03-2010 03:14:51

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Résolu] Insertion de code javascript, où ?

Salut golgenboy, voici ce que je fais:

Layout:

Code:

<head>  
  <?php echo $this->headScript(); echo $this->headLink(); ?>  
</head>

Controlleur ou autre:

Code:

$script="
            jQuery(function() {
                    jQuery('#cropbox').Jcrop({
                        onSelect: showCoords,
                        onChange: showCoords,
                        boxWidth: 450,
                        bgColor:     'black',
                        bgOpacity:   .4,
                        setSelect:   [ 100, 0, 50, 50 ],
                        aspectRatio: ".$ratioW." / ".$ratioH ."
                    });

                });
        ";

        $this->view->headScript()->appendScript($script);

Bon, copié ici l'indentation est bizarre.

Dernière modification par probitaille (25-03-2010 03:15:03)

Hors ligne

 

#5 25-03-2010 08:29:29

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: [Résolu] Insertion de code javascript, où ?

c'est aussi une solution que je préconise, elle deviens juste redondante quand elle doit être présente dans plusieurs actions/controllers.

Hors ligne

 

#6 25-03-2010 13:31:05

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Résolu] Insertion de code javascript, où ?

à cela s'ajoute quelle grève les perfs
pour ma part je ne mets aucun JS dans le php
car le code javascript ainsi généré est rechargé et recompilé par l'interprète javascript à chaque appel.

la solution est très simple
mettre le code dans un fichier js et le lier AUX pages qui l'utilise.
pour les partie variables comme ici le ratio utiliser des variables JS positionnée dans un objet JS global.

Code:

            jQuery(function() {
                    jQuery('#cropbox').Jcrop({
                        onSelect: showCoords,
                        onChange: showCoords,
                        boxWidth: 450,
                        bgColor:     'black',
                        bgOpacity:   .4,
                        setSelect:   [ 100, 0, 50, 50 ],
                        aspectRatio: App.params.ratioW / App.params.ratioH
                    });

                });

le sous ensemble params de l'objet App contient le paramètre de l'application.
si ces paramètre son propre à un sous objet on peu définir le niveau hiérarchique de son choix pour éviter de mélanger les choses.

quant à passer les param de php à JS j'utilise JS soit en Ajax si mon application est basé sur ce mode soit dans la page comme le propose probitaille

Code:

$script="App=" . Zend_Json_Encode($Params);
$this->view->headScript()->appendScript($script);

du coup mon script est chargé et compilé une fois au premier usage et seuls les paramètres sont transmis à chaque fois.

A+JYT

Hors ligne

 

#7 25-03-2010 21:14:09

goldenboy68
Nouveau membre
Date d'inscription: 12-04-2009
Messages: 6

Re: [Résolu] Insertion de code javascript, où ?

Merci pour toutes ces réponses !

La dernière réponse était peut-être de trop wink Jusqu'avant je suivais plus ou moins...quand ça part dans des sous-ensembles j'ai cru repartir en cours de Maths !

Vais essayer de mettre tout ça en pratique maintenant !

@+

Hors ligne

 

#8 26-03-2010 09:37:21

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Résolu] Insertion de code javascript, où ?

pour faire simple si tu place ton javascript dans du php comme ça

Code:

<script type="text/javascript">
      window.addEvent('domready', function(){
        SexyLightbox = new SexyLightBox({color:'white', dir: 'images/<?php echo $aImage; ?>'});
      });
    </script>

tu vas avoir une difficulté c'est de mettre ce code dans plusieurs pages
mais tu vas surtout avoir une contre performance car à chaque fois qu'un utilisateur chargera une page contenant ce code tu vas généré de nouveau ce javascript.
du coté de ton navigateur qui dit nouveau script dit nouveau chargement, nouvelle compilation (les navigateurs utilisent aujourd'hui un compilateur JIT pour le javascript) puis l'exécution du code.

la solution mettre ton code dans un fichier js statique et faire

Code:

<script type="text/javascript" src="SexyLightBox.js"></script>

tu as alors un seul chargement et une seule compilation du script par le navigateur.
mais si tu fais ça tu te retrouve avec un pb la partie qui variait en fonction du php dans mon exemple

Code:

'images/<?php echo $aImage; ?>'

ne peu plus exister puis le script est statique

pour résoudre ce PB tu définis un objet global en javascript qui va porter les valeurs des paramètre que tu veux modifier en php
ton script dans ton fichier js devient

Code:

<script type="text/javascript">
      window.addEvent('domready', function(){
        SexyLightbox = new SexyLightBox({color:'white', dir: 'images/' + App.ligthBoxImage});
      });
    </script>

dans tes pages tu mets

Code:

<?php
 $params = Zend_Json_Encode(array('ligthBoxImage' => $aImage));
?>
<script type="text/javascript">App=<?php echo $params; ?></script>
<script type="text/javascript" src="SexyLightBox.js"></script>

de cette façon tu as des paramètres qui varient avec le php tu peux donc faire passer les valeurs de ton choix à javascript et tu as aussi les avantage de la compilation unique de tes scripts.

J'utilise cette approche à grande échelle 26 000 lignes de javascript 30 000 lignes de php dans une application.
le tout est particulièrement réactif.

A+JYT

Hors ligne

 

#9 26-03-2010 23:16:42

goldenboy68
Nouveau membre
Date d'inscription: 12-04-2009
Messages: 6

Re: [Résolu] Insertion de code javascript, où ?

C'est déjà beaucoup plus clair quand ça reprend un exemple dont j'ai besoin wink

Pour la partie Zend et optimisation c'est compris, reste la variable globale JS avec cette histoire de "sous-ensemble) :
Dans ton dernier exemple tu mets :

Code:

"App.ligthBoxImage" avec  $params = Zend_Json_Encode(array('ligthBoxImage' => $aImage));

Dans ton premier exemple tu utilises :

Code:

"App.params.ratioW", je suppose que c'est un tableau à 2 dimensions alors ?

...et si j'ai bien tout compris et pour être bien "Zend Attitude", au lieu de mettre les balises <script></script> dans mes fichiers je devrais utiliser le headScript()->appendFile('SexyLightBox.js') ?

@+!

Hors ligne

 

#10 27-03-2010 20:46:10

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Résolu] Insertion de code javascript, où ?

exactement

Hors ligne

 

#11 09-04-2010 23:54:07

goldenboy68
Nouveau membre
Date d'inscription: 12-04-2009
Messages: 6

Re: [Résolu] Insertion de code javascript, où ?

Bon, alors j'ai mis le temps avant de faire les tests encore une fois et presque tout fonctionne dans cette mise en pratique !

Reste un souci que je n'ai pas su solutionner : en utilisant Zend_Json_Encode() j'ai une "Erreur Fatale" :
Fatal error: Call to undefined function Zend_Json_Encode()

...et en remplaçant avec "json_encode()" ça marche nickel.

Une idée pour résoudre ce problème pour que je puisse utiliser Zend_Json_Encode ?

Hors ligne

 

#12 10-04-2010 01:09:46

goldenboy68
Nouveau membre
Date d'inscription: 12-04-2009
Messages: 6

Re: [Résolu] Insertion de code javascript, où ?

Voilà comme d'hab on trouve pas d'où ça vient pendant 2 jours et juste après avoir poster la question on trouve la réponse !!

Donc le problème c'était la fonction qui a priori s'utilise de cette façon : Zend_Json::encode()

Tout fonctionne dans mon head, j'suis super content...vais pouvoir passer au body de ma page !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages