Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 23-12-2008 16:05:03

Nes
Nouveau membre
Date d'inscription: 17-12-2008
Messages: 5

[Résolu][Zend_Form][1.6] Appel de fonction javascript

Bonjour,

J'utilise un formulaire construit avec Zend_Form.
Sur un input type=button, j'ajoute un onclick="Go(param);" où Go est une fonction javascript (pour l'instant c'est juste un alert).

Ma fonction js est rangé dans /public/scripts/fonctions/

Et là je bloque : comment faut-il que je fasse pour récupérer ma fonction js et l'exécuter ?
J'ai cherché de partout, mais je n'ai rien trouvé de clair là dessus.

Ca serait vraiment sympa de me mettre sur une piste.

Merci !

Dernière modification par Nes (24-12-2008 10:57:41)

Hors ligne

 

#2 23-12-2008 17:04:05

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

Re: [Résolu][Zend_Form][1.6] Appel de fonction javascript

ben tu l'écrit dans ton javascript

Hors ligne

 

#3 23-12-2008 17:33:01

Nes
Nouveau membre
Date d'inscription: 17-12-2008
Messages: 5

Re: [Résolu][Zend_Form][1.6] Appel de fonction javascript

Euh... merci..., mais je crois que tu n'as pas compris la question :
Où et comment dois-je mettre le chemin d'accès à mon js pour que,  lorsque je clic sur mon input...bouton, le code qui se trouce dans mon js s'exécute ? : comment ma vue va trouver mon js ? quel appel je dois utiliser ?

Merci.

Hors ligne

 

#4 23-12-2008 18:29:57

vg33
Membre
Date d'inscription: 30-07-2008
Messages: 46

Re: [Résolu][Zend_Form][1.6] Appel de fonction javascript

Dans ton layout, tu insères le fichier javascript...
Exemple :

Code:

<head>
<script src="/js/library/jquery/jquery.js" type="text/javascript"></script>
</head>

Au passage, je te conseille fortement d'utiliser une librairie js comme jquery qui permet d'ajouter du code js avec des sélecteurs CSS. C'est beaucoup plus propre et plus maintenable que de mélanger js et xhtml.

Hors ligne

 

#5 23-12-2008 18:31:10

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: [Résolu][Zend_Form][1.6] Appel de fonction javascript

Salut, nes.

A partir du Zend_Form, tu peux récupérer ta vue donc tu peux récupérer le view helper 'HeadScript' et rajouter ton fichier javascript.

Exemple:

Code:

$this->getView()
     ->getHelper('headScript')
     ->appendFile('/chemin/vers/le/fichier/javascript');

A+. -=blu3+3y3s=-

Hors ligne

 

#6 24-12-2008 10:05:21

Nes
Nouveau membre
Date d'inscription: 17-12-2008
Messages: 5

Re: [Résolu][Zend_Form][1.6] Appel de fonction javascript

Bonjour à tous,

Merci pour vos réponses, elles m'ont bien aidé.

Finalement, dans mon layout principal, j'ai ajouté :

$this->headScript()->appendFile('/chemin/du/fichier.js');

Et la fonction js placé sur le onclick du bouton s'exécute.


Maintenant j'ai une nouvelle question :

Je souhaite exécuter un script directement dans ma vue dans une condition if.
Pour le moment je fait comme ceci (code placé dans ma vue) :

if ( $this->variabletrue ) {
    ?>
    <script type="text/javascript">
        mafonctionJS();
    </script>
    <?php
}

Ca fonctionne bien, ma fonction js est bien exécutée, mais je pense que cette manière n'est pas très "propre", non ?

Est-ce que quelqu'un aurait une piste pour appeler une fonction js proprement à partir de la vue (ou autre).

Merci
Bonne journée
Et Joyeux Noël !!!!

Hors ligne

 

#7 24-12-2008 10:08:39

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Résolu][Zend_Form][1.6] Appel de fonction javascript

2 posts plus haut...

Au passage, je te conseille fortement d'utiliser une librairie js comme jquery qui permet d'ajouter du code js avec des sélecteurs CSS. C'est beaucoup plus propre et plus maintenable que de mélanger js et xhtml.

Hors ligne

 

#8 24-12-2008 11:46:28

-=blu3+3y3s=-
Membre
Lieu: Toulouse
Date d'inscription: 01-04-2008
Messages: 47

Re: [Résolu][Zend_Form][1.6] Appel de fonction javascript

Salut,

S'agissant de ta première question, si tu as besoin de ton fichier javascript dans toutes tes vues, mets ton code dans ton layout sinon tu peux le mettre directement dans la vue que tu as besoin.

S'agissant de ta deuxième question, ton code est "propre".
Si tu veux passer par Zend Framework, mets ceci dans ton layout ou ta vue,

Code:

<?php if($this->variabletrue){ ?>
    <?php $this->inlineScript()->captureStart(); ?>
    ton code javascript
    <?php $this->inlineScript()->captureEnd(); ?>
<?php } ?>

A+. -=blu3+3y3s=-

Joyeux Noêl à tous!!

PS: un petit lien pour ton Noël (et pour les autres aussi smile) à bookmarker.
   ->post de Matthew Weier O'Phinney concernant les View Helper

Hors ligne

 

#9 24-12-2008 14:30:45

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

Re: [Résolu][Zend_Form][1.6] Appel de fonction javascript

Je déconseille fortement de mettre ton code js dans le php

à cela une raison toute simple
le code JS est chargé puis compilé et gardé dans le cache de la machine virtuelle JS tant que ton instance du navigateur n'est pas fermée.

si donc tu place ton code dans un fichier JS statique tu charge et compile ton code Javascript 1 seule fois
ensuite à chaque fois que tu vas utiliser ton code il sera simplement exécuté

si tu place ton code js dans le flux généré par php ton code source est recherché et re compilé à chaque appel

le plus simple est de mettre une référence à ton fichier js dans ta page
je conseille aussi de tenir compte du base Url de ZF
cela permet d'avoir un chemin relatif à la racine (de l'application) et donc d'installer l'appli indifféremment à la racine du site ou dans un dossier

si ton php dois passer des paramètre au js tu le fais par une injection de JSON
exemple

Code:

<script src="<?php echo $this->baseUrl ?>/public/js/monscript.php">
<scrtip type="text/javascript">
 var User = <?php echo $this->user ?>;
</script>
...
<a name="user" href="#user" onClick="app.userShow(User)">show User Info</a>

il suffit de passer le user à la vue sous forme json

Code:

$this->view->user = Zend!Json::encode($loggedUser);

en procédant ainsi le code javascript (app.userShow par exemple) n'est chargé qu'une fois et compilé qu'une fois
le php peux facilement fournir des valeur à des objet JS sans re compilation du code source

et enfin tu n'a jamais de code JS qui traine dans le php.

au passage quelques petit truc pour une bonne cohabitation de javascript
définir un objet propre à ton application (un nom qui n'a que fort peu de chance d'être utilisé par une librairie ou un code quelconque)
par exemple dans le livre de julien il propose de créer une application ZFBook voilà un bon candidat pour l'objet js principal de l'application.

Code:

var zfBook ={};

cet objet va servir à porter toutes les variables et toutes les fonction js de votre application.

Code:

var zfBook ={
   user = null;
   userShow - function (user) 
   {
    ...
   }
};

en faisant ainsi si vous ajoutez une librairie ou une fonction trouvée sur le net... il y a fort à parier que cette librairie ne définira pas la fonction zfBook.userShow
vous éviterez ainsi les conflit de noms que l'on trouve trop souvent.

bref si vous utilisé des fonctions des objets etc. à la place de les définir au niveau global vous avez alors un objet pour les porter et éviter les problèmes.

enfin JavaScript permet de faire porter les membres et des méthodes directement aux objets du DOM

Code:

li = document.getElementById('tab1);
li.onclick = function () {
   this.parentNode.currentTab.className = null;
   this.parentNode.currentTab.contentDiv.style.display = 'none';
   this.className = 'current';
   this.contentDiv.style.display = 'block';
   this.parentNode.currentTab=this;
   return false
} // fin de onclick

dans cet exemple il n'y a pas de fonction définie dans un coin utilisée par le onClick du LI mais la méthode est directement définie dans l'objet Li du DOM du coup this est l'objet LI ce qui simplifie son écriture.

Imaginez par exemple un Input qui porte sa propre méthode de vérification. vérifier le formulaire revient à faire un foreach form.elements as input {input.verify()}

A+JYT

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