Includi CSS, file javascript in Yii Framework
-
22-09-2019 - |
Domanda
Come includere un file Javascript o CSS in Yii Framework?
Voglio creare una pagina sul mio sito che abbia una piccola applicazione Javascript in esecuzione, quindi voglio includerla .js
E .css
file in una vista specifica.
Soluzione
Qualcosa di simile a questo:
<?php
$baseUrl = Yii::app()->baseUrl;
$cs = Yii::app()->getClientScript();
$cs->registerScriptFile($baseUrl.'/js/yourscript.js');
$cs->registerCssFile($baseUrl.'/css/yourcss.css');
?>
Altri suggerimenti
È possibile farlo aggiungendo
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/path/to/your/script');
Mi è piaciuto rispondere a questa domanda.
Le loro sono molti posti in cui abbiamo i file css e javascript, come nella cartella css, che è al di fuori della cartella protetta, css e file js di estensione e widget che abbiamo bisogno di includere esternamente qualche volta quando l'uso di AJAX molto, js e css file di framework nucleo che anche abbiamo bisogno di includere esternamente qualche volta. Quindi loro sono alcuni modi per farlo.
Includi principali file js di framework come jquery.js, jquery.ui.js
<?php
Yii::app()->clientScript->registerCoreScript('jquery');
Yii::app()->clientScript->registerCoreScript('jquery.ui');
?>
Includi file dalla cartella css al di fuori della cartella protetta.
<?php
Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl.'/css/example.css');
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/css/example.js');
?>
Includi file CSS e JS da interno o widget.
Ecco fancybox è un'estensione che si trova nella cartella protetta. I file che abbiamo tra cui ha percorso: / protected / extensions / fancybox / beni /
<?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');
?>
Inoltre possiamo includere file del framework di base: Esempio:. Sono compresi file di CListView js
<?php
$baseScriptUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('zii.widgets.assets'));
Yii::app()->clientScript->registerScriptFile($baseScriptUrl.'/listview/jquery.yiilistview.js',CClientScript::POS_END);
?>
- Abbiamo bisogno di includere i file js di widget zii o estensione esternamente a volte, quando li usiamo in vista sottoposta a rendering che vengono ricevuti da chiamata ajax, perché il caricamento di ogni nuovo file ajax tempo creare conflitto nel chiamare le funzioni js.
Per maggiori dettagli Guarda il mio blog articolo
Facile nel tuo conf / main.php. Questo è il mio esempio con bootstrap. Si può vedere che qui
'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.
),
),
),
),
Nella visualizzazione, aggiungere il seguente:
<?php
$cs = Yii::app()->getClientScript();
$cs->registerScriptFile('/js/yourscript.js', CClientScript::POS_END);
$cs->registerCssFile('/css/yourcss.css');
?>
Si prega di notare il secondo parametro quando si registra il file js, è la posizione dello script, quando si imposta CClientScript :: POS_END, si lascia che la rende HTML prima che il javascript è caricato.
Ci sono molti metodi che possiamo includono javascript , css nella vostra Yii App . Oggi voglio dimostrare tre metodi semplici e disponibili.
Un modo semplice per aggiungere js, css modificando 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'),
)
),
),
// ...
),
Utilizzando getClientScript
Di solito, si aggiunge nel blocco di codice in Controller o il layout del vostro tema
$baseUrl = Yii::app()->baseUrl;
$cs = Yii::app()->getClientScript();
$cs->registerScriptFile($baseUrl.'/js/yourscript.js');
$cs->registerCssFile($baseUrl.'/css/yourcss.css');
o più breve:
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');
Includi file js fondamentali
Yii::app()->clientScript->registerCoreScript('jquery');
Yii::app()->clientScript->registerCoreScript('jquery.ui');
Più veloce Yii API documento: http://yii.codexamples.com/
Per includere i file CSS e JS in una specifica visualizzazione è possibile farlo tramite controller passando il false, true
parametri, che includerà i CSS e JS per, per esempio:.
$this->renderPartial(
'yourviewname',
array(
'model' => $model,
false,
true
)
);
qui è una buona soluzione per utilizzare CDN e gli script non in linea
Io uso questo codice in ogni applicazione costruisco, in modo da poter utilizzare questo in qualsiasi applicazione.
script inclusi:
- 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
STEP1:
inserire questo codice in config / main.php
'params'=>array(
'cdn'=>true, // or false
...
STEP2:
creare la cartella resoreses nella cartella app root e inserire lo script vi
res/
--js
--css
--img
--lib
--style
..
Passo 3:
inserire questo codice nei componenti / 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');
");
}
}
STEP4:
richiamare le funzioni come questo in //layouts/main.php
Yii::app()->getController()->registerDefaults();
Yii::app()->getController()->registerFontAwesome();
Yii::app()->getController()->registerGoogleAnalytics();
fare qualcosa di simile con l'aggiunta di queste righe ai file View;
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/path/to/your/javascript/file'); Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl.'/path/to/css/file');
Inoltre, se desideri aggiungere risorse del modulo sia CSS che JS, puoi utilizzare la seguente logica.Scopri come è necessario indicare il percorso corretto getPathOfAlias:
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;
}
Il codice sopra è stato preso da GPLed Yii based Negozio online app.
È anche possibile aggiungere script da azione del controller. Basta aggiungere questa linea in un metodo di azione che poi script apear solo in questo punto di vista:
Yii::app()->clientScript->registerScriptFile(Yii::app()->request->baseUrl . '/js/custom.js', CClientScript::POS_HEAD);
dove POS_HEAD dire quadro di mettere script nella sezione head
Nel framework Yii, puoi includere js e css utilizzando il metodo seguente.
Inclusi CSS:
{Yii::app()->request->baseUrl}/css/styles.css
Incluso JS:
{Yii::app()->request->baseUrl}/js/script.js
Immagine inclusa:
{Yii::app()->request->baseUrl}/images/logo.jpg
Nota: Utilizzando il concetto di layout in yii, puoi aggiungere css e js invece di specificare nel modello di visualizzazione.
Aggiungere i CSS e JS nel layout Folder.Access in qualsiasi parte del progetto
<!--// 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>
il collegamento deve essere inserito nel primo tag php nella pagina di visualizzazione
Utilizzo di estensione bootstrap
il mio file css: Temi / bootstrap / css / style.css
il mio file js: root / js / script.js
a a tema / bootstrap / views / layout / 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>
Questo è stato anche un modo semplice per aggiungere sceneggiatura e css in 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">
Se si sta utilizzando a tema allora si può sottostante Sintassi
Yii::app()->theme->baseUrl
includere file CSS:
<link href="<?php echo Yii::app()->theme->baseUrl;?>/css/bootstrap.css" type="text/css" rel="stylesheet" media="all">
include file JS
<script src="<?php echo Yii::app()->theme->baseUrl;?>/js/jquery-2.2.3.min.js"></script>
Se non si utilizza il tema
Yii::app()->request->baseUrl
Utilizzare come non
<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>