J'ai besoin d'une méthode d'insertion de javascript qui soit spécifique au contrôleur/à l'action dans une mise en page. Ce javascript doit aller à l'intérieur du <head>
du document, loin de l'endroit où le contenu normal est placé. Je l'ai déjà en place une infrastructure qui permet d'utiliser plusieurs vues par page, et Zend_Layout je l'ai déjà tire pleinement parti de ceci:Zend_Framework - Comment mettre du Javascript dans la mise en page?
<?php
$script = $this->layout()->script;
if (!is_null($script)) : ?>
<script type="text/javascript"> // <![CDATA[
<?php echo $script; ?>
// ]]>
</script>
<?php endif; ?>
Cependant, je voudrais la sortie de script pour sélectionner automatiquement, juste comme la vue normale est automatiquement placée dans $this->layout()->content
de la mise en page par défaut. Je comprends que cette fonctionnalité est fournie par la classe ViewRenderer. Fondamentalement, ce que je voudrais faire est de vérifier une instance de /VIEWPATH/scripts/CONTROLLER/ACTION.js.php
, et le rendre comme le segment de sortie nommé script
s'il existe.
Je pourrais créer relativement simplement un Zend_Controller_Plugin qui le ferait automatiquement après la distribution, mais alors les contrôleurs n'auraient aucun moyen de définir des valeurs dans la vue du script. J'aurais également besoin d'un moyen de répliquer comment le plugin du contrôleur ViewRenderer infléchit les noms des contrôleurs et des actions.
Idéalement, je voudrais juste ajouter quelque chose à l'aide de ViewRenderer, mais cela ne semble pas supporter ce genre de chose.
Est-ce que je vais tout à fait faux? Existe-t-il un mécanisme d'intégration de Javascript spécifique à la page dans le framework? (Je ne peux pas être la seule personne avec ce problème ....)
Billy3
Avez-vous déjà vu "$ this-> headScript() -> captureStart()"? Je me demandais ce que vous faisiez pour avoir besoin de construire des choses de cette façon ... pouvez-vous me montrer un usage spécifique avec action.js.php? –
@Keyne: Non, je n'avais pas vu ça. Peut-être devriez-vous mettre cela dans une réponse pour que cela puisse être surclassé. (Parce que c'est exactement ce que je cherchais et n'est pas évident dans les docs Zend_Layout ou Zend_Controller) –