2010-01-18 7 views
1

Mon widget échantillon:scripts personnalisés et des styles pour les widgets dans Symfony: Position

class myWidget extends sfWidgetFormTextarea{ 
    public function getJavascripts(){ 
     return array('my_widget.js'); 
    } 

    public function getStylesheets(){ 
     return array('my_widget.css'); 
    } 
} 

modèle de formulaire:

<?php include_javascripts_for_form($form) ?> 
<?php include_stylesheets_for_form($form) ?> 
<?php echo $form;?> 

Le problème est que ces 2 fonctions produisent link et script tags avant de rendre la forme . Comment puis-je les déplacer vers la section head?

Répondre

1

Essayez d'ajouter .css et .js au view.yml de votre module au lieu de dans le modèle:

formSuccess: 
    stylesheets: [my_widget] 
    javascripts: [my_widget] 

qui va s'analysable et jetés dans votre étiquette de tête.

Si vous avez accès à la réponse du contexte actuel, vous pouvez appeler addJavascript ou addStylesheet sur la réponse pour les injecter dans la tête. D'une action:

$this->getContext()->getResponse()->addStylesheet('style'); 

à partir d'un modèle:

$sf_response->addJavascript('script'); 
+0

Merci, Cryo, mais je veux rendre les widgets plus réutilisables sans toucher les fichiers view.yml des modules qu'ils ont utilisés dans – Darmen

+1

Gotcha. Vous pouvez inclure les fonctions include_javascripts _... et include_stylesheets _... dans un emplacement, puis utiliser cet emplacement dans votre présentation. Si vous avez accès à la réponse du contexte actuel, vous pouvez appeler addJavascript ou addStylesheet sur la réponse pour les injecter dans la tête. – nortron

+0

Yay, c'est ce dont j'ai besoin, merci encore! – Darmen

3

Dans un modèle que vous devez utiliser

<?php use_javascripts_for_form($form) ?> 
<?php use_stylesheets_for_form($form) ?> 

Notez qu'il est use au lieu de include.

Voir aussi this question et documentation.

Il est préférable d'accéder directement à l'objet de réponse dans ce cas.

+0

C'est en fait la bonne réponse, la question était: "Comment puis-je les déplacer vers la section head?" Et la solution standard (même si j'interviens dans cet appel '$ context-> getResponse() -> addStylesheet ('style') ". – Damien

Questions connexes