2012-01-19 19 views
9

Estoy usando el framework YII para mi aplicación web. Tengo una pregunta sobre el registro de un archivo de script Java externo.Yii - Archivos JS externos Incluya, registerScriptFile y publique

¿Podría alguien ayudarme?

  1. ¿Cuál es la mejor ubicación para copiar archivo de script de Java (que carpeta)
  2. Veo que hay dos maneras de registrar esa secuencia de comandos de Java externa archivo

    Primera aproximación

    $baseUrl = Yii::app()->baseUrl; 
    $cs = Yii::app()->getClientScript(); 
    $cs->registerScriptFile($baseUrl.'/js/yourscript.js'); 
    

    Segunda aproximación

    $cs=Yii::app()->getClientScript(); 
    $cs->registerScriptFile(Yii::app()->getAssetManager()->publish('path/to/js')); 
    $cs->registerScript('id', 'your js here'); 
    

En el primer enfoque que directamente el registro con registerScriptFile y pasando el archivo java script

En el segundo enfoque me registro y publicación de la secuencia de comandos. Eso significa que copia en carpetas de activos. (Corrígeme si estoy equivocado) y luego, ¿qué hace el último paso? ¿Qué es id y nuevamente java script file? ($cs->registerScript('id', 'your js here');)

En mi caso, estoy accediendo desde una de las vistas, por lo que en el segundo enfoque desde que se publica en la carpeta de activos, si 10 clientes llaman al archivo, lo publica 10 veces (ya que estoy accediendo desde el archivo de vista)

Estoy un poco confundido.

Gracias por su respuesta

Saludos

Kiran

+0

posible duplicado de [Incluir CSS, archivo javascript en Yii Framework] (http://stackoverflow.com/questions/1998449/in clude-css-javascript-file-in-yii-framework) – bummi

Respuesta

15

La carpeta Yii Assets generalmente es utilizada por Widgets y los componentes internos de Yii como Gridview. No necesita almacenar o publicar sus archivos JS o CSS externos en la carpeta de activos.

En segundo lugar si los archivos ya existen en la carpeta de activos getAssetManager()->publish('path/to/js') no lo copiarán.

y última que no es necesario crear una instancia de la clase CClientScript, se le puede llamar directamente como

Yii::app()->clientScript->registerScriptFile(
    Yii::app()->baseUrl.'/js/file.js' 
); 

o si está utilizando temas

Yii::app()->clientScript->registerScriptFile(
    Yii::app()->theme->baseUrl.'/js/file.js' 
); 
+0

Gracias Uday por este – Bujji

+0

No está -instantando- la clase CClientScript. – marcovtwout

2

En caso común es la mejor manera de poner sus archivos JS en WEB_ROOT/js y utilizar $cs->registerScriptFile. AssetManager conveniente de usar en widgets. Puede colocar sus archivos JS en una carpeta protegida y publicarlos en la carpeta de activos cuando sea necesario. Si llama al método publish() 10 veces, debe publicar sus archivos solo unos. Si configura el parámetro $forceCopy en true (el valor predeterminado es false), entonces se copiará 10 veces, pero en el mismo directorio.

+0

Gracias Oleg por su respuesta rápida – Bujji

Cuestiones relacionadas