2010-02-13 1 views
4

Mes appels layout.php include_javascripts() avant que mon composant puisse appeler sfResponse :: addJavascript(). Existe-t-il un «assistant» ou une «meilleure pratique» pour gérer cela?Comment les composants doivent-ils ajouter JavaScript et CSS dans Symfony?

Dois-je séparer l'appel sfResponse :: addJavascript()? J'étais heureux de l'éviter.

Voici ist ma solution réelle:

<head> 
    <?php $nav = get_component('nav', 'nav') /* Please show me a better way. */ ?> 
    <?php include_javascripts() ?> 
    ... 
</head> 
<body> 
    <?php /* include_component('nav', 'nav') */ ?> 
    <?php echo $nav ?> 
    ... 
</body> 

Merci

Répondre

3

Si votre appareil est toujours utilisé il suffit de déplacer votre inclusion javascript dans le rendu de la mise en page dans votre application de view.yml:

default: 
    javascripts: [my_js] 

Il n'est pas nécessaire de séparer l'appel JS lorsqu'il est toujours utilisé.

MISE À JOUR:

Si vous doit maintenir l'inclusion JS avec le composant que vous pouvez placer votre appel composant dans une fente avant include_javascripts() appel pour l'ajouter à la pile à rendre et puis d'inclure le fente à l'endroit approprié:

<?php slot('nav') ?> 
<?php include_component('nav', 'nav'); ?> 
<?php end_slot(); ?> 
<html> 
    <head> 
    <?php include_javascripts() ?> 
    ... 
    </head> 
    <body> 
    <?php include_slot('nav'); ?> 
    <?php echo $nav ?> 
    ... 
    </body> 
</html> 
+0

Et quand je retire le composant, je dois stresser mon cerveau pour nettoyer le view.yml? Si je me souviens et si je n'ai pas de dépendances? – koalabruder

+0

@koalabruder: Oui, vous devriez vous rappeler d'enlever le JS aussi. Si vous devez * vraiment * avoir le JS dans le fichier du composant, vous devez déplacer l'inclusion du composant dans un slot. J'ai mis à jour ma réponse avec les détails. – nortron

0

Vous devrez peut-être désactiver le sfCommonFiter qui est maintenant deprecated. Le filtre commun ajoute automatiquement css/js dans la mise en page.

Une fois que vous avez fait cela, vous pouvez déplacer les include_javascripts appeler partout dans le fichier layout.php, en dessous du include_component('nav', 'nav') appel

+1

Ce ne fonctionnera pas pour les CSS comme 'include_css 'renvoie des balises' link' qui ne sont pas autorisées dans 'body'. Et je suppose que le 'sfCommonFilter' a peu à voir avec le problème. En fait, je suppose que cela fonctionnait avec ce filtre, car les balises de lien et de script étaient ajoutées via ce filtre ** après ** le rendu du template. Cela peut fonctionner avec 'include_javascripts'. –

11

de: http://www.symfony-project.org/book/1_2/07-Inside-the-View-Layer

inclusion fichier confi guration

// Dans le view.yml

indexSuccess: 
    stylesheets: [mystyle1, mystyle2] 
    javascripts: [myscript] 

// Dans l'action

$this->getResponse()->addStylesheet('mystyle1'); 
$this->getResponse()->addStylesheet('mystyle2'); 
$this->getResponse()->addJavascript('myscript'); 

// Dans le modèle

<?php use_stylesheet('mystyle1') ?> 
<?php use_stylesheet('mystyle2') ?> 
<?php use_javascript('myscript') ?> 
Questions connexes