Incluir CSS, archivo javascript en Yii Framework
-
22-09-2019 - |
Pregunta
¿Cómo incluir un archivo Javascript o CSS en Yii Framework?
Quiero crear una página en mi sitio que tenga una pequeña aplicación Javascript ejecutándose, así que quiero incluir .js
y .css
archivos en una vista específica.
Solución
Algo como esto:
<?php
$baseUrl = Yii::app()->baseUrl;
$cs = Yii::app()->getClientScript();
$cs->registerScriptFile($baseUrl.'/js/yourscript.js');
$cs->registerCssFile($baseUrl.'/css/yourcss.css');
?>
Otros consejos
Puede hacerlo añadiendo
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/path/to/your/script');
Me gusta responder a esta pregunta.
Su son muchos los lugares en los que tenemos los archivos CSS y JavaScript, como en la carpeta css que se encuentra fuera de la carpeta, css y js archivos protegidos de extensión y los widgets que necesitamos para incluir externamente en algún momento cuando el uso de AJAX mucho, JS y CSS archivos de marco básico que también tenemos que incluir el exterior en algún momento. Así que su son algunas maneras de hacer esto.
Incluir js archivos centrales de marco como jquery.js, jquery.ui.js
<?php
Yii::app()->clientScript->registerCoreScript('jquery');
Yii::app()->clientScript->registerCoreScript('jquery.ui');
?>
Incluir archivos de fuera de la carpeta css de la carpeta protegida.
<?php
Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl.'/css/example.css');
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/css/example.js');
?>
Incluir css y js archivos de extensión o widgets.
Aquí FancyBox es una extensión que se coloca en la carpeta protegida. Los archivos que tienen entre ellos ruta: / protected / extensions / FancyBox / activos /
<?php
// Fancybox stuff.
$assetUrl = Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('ext.fancybox.assets'));
Yii::app()->clientScript->registerScriptFile($assetUrl.'/jquery.fancybox-1.3.4.pack.js');
Yii::app()->clientScript->registerScriptFile($assetUrl.'/jquery.mousewheel-3.0.4.pack.js');
?>
También podemos incluir archivos del núcleo del framework: Ejemplo:. Estoy incluyendo CListView archivo js
<?php
$baseScriptUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('zii.widgets.assets'));
Yii::app()->clientScript->registerScriptFile($baseScriptUrl.'/listview/jquery.yiilistview.js',CClientScript::POS_END);
?>
- Necesitamos incluir js archivos de widgets Zii o extensión externa a veces cuando las usamos en vista renderizada que se recibió de ajax llamada, debido a la carga cada vez nuevo archivo ajax crear conflicto en llamar a las funciones js.
Para más detalle Mira mi artículo de blog
Fácil en su conf / main.php. Este es mi ejemplo, con arranque. Se puede ver que aquí
'components'=>array(
'clientScript' => array(
'scriptMap' => array(
'jquery.js'=>false, //disable default implementation of jquery
'jquery.min.js'=>false, //desable any others default implementation
'core.css'=>false, //disable
'styles.css'=>false, //disable
'pager.css'=>false, //disable
'default.css'=>false, //disable
),
'packages'=>array(
'jquery'=>array( // set the new jquery
'baseUrl'=>'bootstrap/',
'js'=>array('js/jquery-1.7.2.min.js'),
),
'bootstrap'=>array( //set others js libraries
'baseUrl'=>'bootstrap/',
'js'=>array('js/bootstrap.min.js'),
'css'=>array( // and css
'css/bootstrap.min.css',
'css/custom.css',
'css/bootstrap-responsive.min.css',
),
'depends'=>array('jquery'), // cause load jquery before load this.
),
),
),
),
En la vista, agregue lo siguiente:
<?php
$cs = Yii::app()->getClientScript();
$cs->registerScriptFile('/js/yourscript.js', CClientScript::POS_END);
$cs->registerCssFile('/css/yourcss.css');
?>
Tenga en cuenta el segundo parámetro cuando registra el archivo js, es la posición de su script, cuando lo configura CClientScript::POS_END, deja que el HTML se represente antes de que se cargue el javascript.
Hay muchos métodos que se pueden incluir Javascript , css en su aplicación Yii . Hoy voy a demostrar de tres simple y métodos very helpul.
Una forma sencilla de añadir js, css por la edición de config / main.php
// application components
'components'=>array(
// ...
'clientScript'=>array(
'packages'=>array(
'jquery'=>array(
'baseUrl'=>'//ajax.googleapis.com/ajax/libs/jquery/1/',
'js'=>array('jquery.min.js'),
)
),
),
// ...
),
Uso getClientScript
Por lo general, se añade en el bloque de código en el controlador o el diseño de su tema
$baseUrl = Yii::app()->baseUrl;
$cs = Yii::app()->getClientScript();
$cs->registerScriptFile($baseUrl.'/js/yourscript.js');
$cs->registerCssFile($baseUrl.'/css/yourcss.css');
o más corto:
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/path/to/your/javascript/file',CClientScript::POS_END);
Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl.'/path/to/css/file');
Incluir archivos js núcleo
Yii::app()->clientScript->registerCoreScript('jquery');
Yii::app()->clientScript->registerCoreScript('jquery.ui');
Yu documento API más rápido: http://yii.codexamples.com/
Para incluir archivos CSS JS y en una vista específica puede hacerlo a través del controlador haciendo pasar el false, true
parámetros, que incluirá el CSS y JS para, por ejemplo:.
$this->renderPartial(
'yourviewname',
array(
'model' => $model,
false,
true
)
);
aquí es una buena solución para utilizar CDN y las secuencias de comandos fuera de línea
Yo uso este código en cada aplicación que construir, por lo que puede utilizar esto en cualquier aplicación.
Scripts incluidos:
- main.css
- main.js
- jQuery
- jQuery / CD
- Bootstrap 3.1
- Bootstrap 3.1 / CDN
- FancyBox 2
- FancyBox 2 / CDN
- FontAwesome 4
- FontAwesome 4 / CDN
- Google Analytics script
Paso 1:
poner este código en config / main.php
'params'=>array(
'cdn'=>true, // or false
...
Paso 2:
Crear carpeta resoreses en la carpeta de aplicación de la raíz y poner el script no
res/
--js
--css
--img
--lib
--style
..
Paso 3:
poner este código en componentes / controller.php
public function registerDefaults()
{
$cs = Yii::app()->clientScript;
if (Yii::app()->params['cdn']){
$cs->scriptMap = array(
'jquery.js' => '//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js',
'jquery.min.js' => '//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js',
);
$cs->packages = array(
'bootstrap' => array(
'basePath' => 'application.res',
'baseUrl' => '//netdna.bootstrapcdn.com/bootstrap/3.1.1/',
'js' => array('js/bootstrap.min.js'),
'css' => array('css/bootstrap.min.css'),
'depends' => array('jquery')
),
);
} else {
$cs->packages = array(
'bootstrap' => array(
'basePath' => 'application.res',
'baseUrl' => Yii::app()->baseUrl . '/res/lib/bootstrap/',
'js' => array('js/bootstrap.js'),
'css' => array('css/bootstrap.css'),
'depends' => array('jquery')
),
);
}
$cs->registerPackage('bootstrap');
$cs->registerCSSFile(Yii::app()->baseUrl . '/res/style/main.css');
$cs->registerScriptFile(Yii::app()->baseUrl . '/res/js/main.js');
}
public function registerFancybox($buttons = false, $thumbs = false)
{
$cs = Yii::app()->clientScript;
$cs->packages = array(
'fancybox' => array(
'basePath' => 'application.res',
'baseUrl' => Yii::app()->baseUrl . '/res/lib/fancybox/',
'js' => array('lib/jquery.mousewheel-3.0.6.pack.js', 'source/jquery.fancybox.pack.js'),
'css' => array('source/jquery.fancybox.css'),
'depends' => array('jquery')
),
'fancybox-buttons' => array(
'basePath' => 'application.res',
'baseUrl' => Yii::app()->baseUrl . '/res/lib/fancybox/source/helpers/',
'js' => array('jquery.fancybox-buttons.js'),
'css' => array('jquery.fancybox-buttons.css'),
),
'fancybox-thumbs' => array(
'basePath' => 'application.res',
'baseUrl' => Yii::app()->baseUrl . '/res/lib/fancybox/source/helpers/',
'js' => array('jquery.fancybox-thumbs.js'),
'css' => array('jquery.fancybox-thumbs.css'),
)
);
$cs->registerPackage('fancybox');
if ($buttons)
$cs->registerPackage('fancybox-buttons');
if ($thumbs)
$cs->registerPackage('fancybox-thumbs');
}
public function registerFontAwesome(){
$cs = Yii::app()->clientScript;
if (Yii::app()->params['cdn']):
$cs->packages = array(
'fontAwesome' => array(
'basePath' => 'application.res',
'baseUrl' => '//netdna.bootstrapcdn.com/font-awesome/4.0.0/',
'css' => array('css/font-awesome.min.css'),
)
);
else:
$cs->packages = array(
'fontAwesome' => array(
'basePath' => 'application.res',
'baseUrl' => Yii::app()->baseUrl . '/res/lib/font-awesome/',
'css' => array('/css/font-awesome.min.css'),
)
);
endif;
$cs->registerPackage('fontAwesome');
}
public function registerGoogleAnalytics()
{
if($this->config('settings_google_analytics_id')){
Yii::app()->clientScript->registerScript('GA',"
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', '".Yii::app()->params['cdn']."', '{$_SERVER['SERVER_NAME']}');
ga('send', 'pageview');
");
}
}
Paso 4:
llamar a las funciones de este tipo en //layouts/main.php
Yii::app()->getController()->registerDefaults();
Yii::app()->getController()->registerFontAwesome();
Yii::app()->getController()->registerGoogleAnalytics();
hacer algo como esto añadiendo estas líneas a sus archivos de vista;
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/path/to/your/javascript/file'); Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl.'/path/to/css/file');
Además, si desea agregar recursos de módulo tanto CSS como JS, puede utilizar la siguiente lógica.Vea cómo debe indicar la ruta correcta para obtenerPathOfAlias:
public static function register($file)
{
$url = Yii::app()->getAssetManager()->publish(
Yii::getPathOfAlias('application.modules.shop.assets.css'));
$path = $url . '/' . $file;
if(strpos($file, 'js') !== false)
return Yii::app()->clientScript->registerScriptFile($path);
else if(strpos($file, 'css') !== false)
return Yii::app()->clientScript->registerCssFile($path);
return $path;
}
El código anterior ha sido tomado de GPLed Yii basado Tienda web aplicación.
También puede agregar secuencias de comandos de acción del controlador. Sólo tiene que añadir esta línea en un método de acción luego de que la escritura apear sólo en ese punto de vista:
Yii::app()->clientScript->registerScriptFile(Yii::app()->request->baseUrl . '/js/custom.js', CClientScript::POS_HEAD);
donde POS_HEAD diga marco para poner la escritura en la sección de cabecera
En el marco Yii, puede incluir js y css utilizando el siguiente método.
Incluyendo CSS:
{Yii::app()->request->baseUrl}/css/styles.css
Incluyendo JS:
{Yii::app()->request->baseUrl}/js/script.js
Incluyendo imagen:
{Yii::app()->request->baseUrl}/images/logo.jpg
Nota: Al utilizar el concepto de diseño en yii, puede agregar css y js en lugar de especificarlo en la plantilla de vista.
Agregue el CSS y JS en la disposición Folder.Access en cualquier parte del proyecto
<!--// Stylesheets //-->
<?php
$themepath=Yii::app()->theme->baseUrl;
Yii::app()->clientScript->registerCoreScript("jquery");
?>
<link href="<?php echo $themepath."/css/custom.css"; ?>" rel="stylesheet" media="all" />
<!--// Javascript //-->
<?php Yii::app()->clientScript->registerCoreScript("jquery"); ?>
</script> -->
<script type="text/javascript" src="<?php echo $themepath; ?>/js/video.min.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css">
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="/news/js/popup.js"></script>
entrada de enlace debe sobre la primera etiqueta php en la vista de pag
Uso de extensión bootstrap
mi archivo CSS: temas / bootstrap / css / style.css
mi archivo JS: root / js / script.js
a tema / bootstrap / views / layouts / main.php
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->theme->baseUrl; ?>/css/styles.css" />
<script type="text/javascript" src="<?php echo Yii::app()->request->baseUrl; ?>/js/script.js"></script>
Esta fue también una forma fácil de añadir guión y css en main.php
<script src="<?=Yii::app()->theme->baseUrl; ?>/js/bootstrap.min.js"></script>
<link href="<?=Yii::app()->theme->baseUrl; ?>/css/bootstrap.css" rel="stylesheet" type="text/css">
Si está utilizando el tema, puede utilizar la siguiente sintaxis
Yii::app()->theme->baseUrl
incluir archivo CSS:
<link href="<?php echo Yii::app()->theme->baseUrl;?>/css/bootstrap.css" type="text/css" rel="stylesheet" media="all">
Incluir archivo JS
<script src="<?php echo Yii::app()->theme->baseUrl;?>/js/jquery-2.2.3.min.js"></script>
Si no estás usando el tema
Yii::app()->request->baseUrl
Usar así
<link href="<?php echo Yii::app()->request->baseUrl; ?>/css/bootstrap.css" type="text/css" rel="stylesheet" media="all">
<script src="<?php echo Yii::app()->request->baseUrl; ?>/js/jquery-2.2.3.min.js"></script>