Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
ben tu l'écrit dans ton javascript
Hors ligne
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
Dans ton layout, tu insères le fichier javascript...
Exemple :
<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
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:
$this->getView() ->getHelper('headScript') ->appendFile('/chemin/vers/le/fichier/javascript');
A+. -=blu3+3y3s=-
Hors ligne
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
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
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,
<?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 ) à bookmarker.
->post de Matthew Weier O'Phinney concernant les View Helper
Hors ligne
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
<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
$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.
var zfBook ={};
cet objet va servir à porter toutes les variables et toutes les fonction js de votre application.
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
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
Pages: 1