Yii Framework'e bir Javascript veya CSS dosyası nasıl eklenir?
Sitemde küçük bir Javascript uygulamasının çalıştığı bir sayfa oluşturmak istiyorum, bu nedenle belirli bir görünüme .js
ve .css
dosyalarını dahil etmek istiyorum .
Yanıtlar:
Bunun gibi bir şey:
<?php
$baseUrl = Yii::app()->baseUrl;
$cs = Yii::app()->getClientScript();
$cs->registerScriptFile($baseUrl.'/js/yourscript.js');
$cs->registerCssFile($baseUrl.'/css/yourcss.css');
?>
Bu soruyu cevaplamayı sevdim.
Bunlar, korumalı klasörün dışındaki css klasörü, css & js uzantı ve widget dosyaları gibi css & javascript dosyalarına sahip olduğumuz ve ajax'ı çok kullandığımızda harici olarak eklememiz gereken birçok yer, js & css core dosyaları Bazen dışarıdan dahil etmemiz gereken çerçeve. Yani bunu yapmanın bazı yolları var.
Jquery.js, jquery.ui.js gibi temel js dosyalarını dahil edin
<?php
Yii::app()->clientScript->registerCoreScript('jquery');
Yii::app()->clientScript->registerCoreScript('jquery.ui');
?>
Korumalı klasörün dışındaki css klasöründeki dosyaları dahil edin.
<?php
Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl.'/css/example.css');
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/css/example.js');
?>
Uzantı veya widget'lardan css & js dosyalarını dahil edin.
Burada fancybox, korumalı klasörün altına yerleştirilmiş bir uzantıdır. Dahil ettiğimiz dosyaların yolu var: / protected / extensions / fancybox / assets /
<?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');
?>
Ayrıca çekirdek çerçeve dosyalarını da ekleyebiliriz: Örnek: CListView js dosyasını ekliyorum.
<?php
$baseScriptUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('zii.widgets.assets'));
Yii::app()->clientScript->registerScriptFile($baseScriptUrl.'/listview/jquery.yiilistview.js',CClientScript::POS_END);
?>
Daha fazla ayrıntı için Blog makaleme bakın
Conf / main.php dosyanızda kolay. Bu benim bootstrap örneğim. Burada görebilirsin
'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.
),
),
),
),
Görünümde aşağıdakileri ekleyin:
<?php
$cs = Yii::app()->getClientScript();
$cs->registerScriptFile('/js/yourscript.js', CClientScript::POS_END);
$cs->registerCssFile('/css/yourcss.css');
?>
Lütfen js dosyasını kaydettiğinizde ikinci parametreye dikkat edin, bu betiğinizin konumudur, bunu CClientScript :: POS_END olarak ayarladığınızda, HTML'nin javascript yüklenmeden önce oluşturulmasına izin vermiş olursunuz.
Yii Uygulamanıza javascript, css dahil edebileceğimiz birçok yöntem vardır . Bugün üç basit ve yardımcı yöntem göstereceğim.
Config / main.php dosyasını düzenleyerek js, css eklemenin basit bir yolu
// application components
'components'=>array(
// ...
'clientScript'=>array(
'packages'=>array(
'jquery'=>array(
'baseUrl'=>'//ajax.googleapis.com/ajax/libs/jquery/1/',
'js'=>array('jquery.min.js'),
)
),
),
// ...
),
GetClientScript kullanma
Genellikle, denetleyiciye veya temanızın düzenine kod bloğu ekleriz
$baseUrl = Yii::app()->baseUrl;
$cs = Yii::app()->getClientScript();
$cs->registerScriptFile($baseUrl.'/js/yourscript.js');
$cs->registerCssFile($baseUrl.'/css/yourcss.css');
Veya daha kısa:
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');
Temel js dosyalarını dahil et
Yii::app()->clientScript->registerCoreScript('jquery');
Yii::app()->clientScript->registerCoreScript('jquery.ui');
Daha Hızlı Yii API Belgesi: http://yii.codexamples.com/
$baseUrl = Yii::app()->baseUrl; $cs = Yii::app()->getClientScript(); $cs->registerScriptFile($baseUrl.'/js/yourscript.js'); $cs->registerCssFile($baseUrl.'/css/yourcss.css');
Denetleyiciye yerleştirirsem, $cs
sonra nereye atarım ? Üstelik actionView
Kontrolörümde bu satır var $this -> render('view', array('model' => $this -> loadModel($id), ));
, buraya yerleştirmeli miyim?
JS ve CSS dosyalarını belirli bir görünüme false, true
dahil etmek için, CSS ve JS'yi içerecek parametreleri ileterek denetleyici aracılığıyla yapabilirsiniz , örneğin:
$this->renderPartial(
'yourviewname',
array(
'model' => $model,
false,
true
)
);
CDN ve çevrimdışı komut dosyalarını kullanmak için iyi bir çözüm burada
Bu kodu oluşturduğum her uygulamada kullanıyorum, böylece bunu herhangi bir uygulamada kullanabilirsiniz.
Dahil Edilen Komut Dosyaları:
AŞAMA 1:
bu kodu config / main.php içine koyun
'params'=>array(
'cdn'=>true, // or false
...
ADIM 2:
kök uygulama klasöründe resoreses klasörü oluşturun ve komut dosyanızı oraya koyun
res/
--js
--css
--img
--lib
--style
..
AŞAMA 3:
bu kodu components / controller.php içine koyun
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');
");
}
}
ADIM4:
//layouts/main.php'de bunun gibi işlevleri çağırın
Yii::app()->getController()->registerDefaults();
Yii::app()->getController()->registerFontAwesome();
Yii::app()->getController()->registerGoogleAnalytics();
Bu satırı görünüm dosyalarınıza ekleyerek böyle bir şey yapın;
Yii :: app () -> clientScript-> registerScriptFile (Yii :: app () -> baseUrl. '/ Yol / / javascript / dosyanız'); Yii :: app () -> clientScript-> registerCssFile (Yii :: app () -> baseUrl. '/ Yol / / css / dosya');
Ayrıca hem CSS hem de JS modül varlıkları eklemek istiyorsanız, aşağıdaki mantığı kullanabilirsiniz. GetPathOfAlias için doğru yolu nasıl belirtmeniz gerektiğini görün :
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;
}
Yukarıdaki kod GPLed Yii tabanlı Webshop uygulamasından alınmıştır.
Denetleyici eyleminden de komut dosyaları ekleyebilirsiniz. Sadece bu satırı bir eylem yöntemine ekleyin, ardından bu komut dosyası yalnızca bu görünümde görünecektir:
Yii::app()->clientScript->registerScriptFile(Yii::app()->request->baseUrl . '/js/custom.js', CClientScript::POS_HEAD);
POS_HEAD, framework'e komut dosyasını baş bölümüne koymasını söyler
Yii çerçevesinde, aşağıdaki yöntemi kullanarak js ve css ekleyebilirsiniz.
CSS dahil:
{Yii::app()->request->baseUrl}/css/styles.css
JS dahil:
{Yii::app()->request->baseUrl}/js/script.js
Resim Dahil:
{Yii::app()->request->baseUrl}/images/logo.jpg
Not: yii'de düzen konseptini kullanarak, görünüm şablonunda belirtmek yerine css ve js ekleyebilirsiniz.
The Layout Folder'a CSS ve JS'yi ekleyin Projenin herhangi bir yerine erişin
<!--// 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>
bağlantı, görünüm sayfasındaki ilk php etiketi üzerine girilmelidir
Bootstrap uzantısını kullanma
css dosyam: temalar / bootstrap / css / style.css
js dosyam: root / js / script.js
theme / bootstrap / views / layouts / main.php adresinde
<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>
Bu aynı zamanda main.php'ye script ve css eklemenin kolay bir yoluydu.
<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">
Tema kullanıyorsanız, aşağıdaki Sözdizimini yapabilirsiniz
Yii::app()->theme->baseUrl
CSS Dosyasını dahil et:
<link href="<?php echo Yii::app()->theme->baseUrl;?>/css/bootstrap.css" type="text/css" rel="stylesheet" media="all">
JS Dosyasını Dahil Et
<script src="<?php echo Yii::app()->theme->baseUrl;?>/js/jquery-2.2.3.min.js"></script>
Tema kullanmıyorsanız
Yii::app()->request->baseUrl
Bunun gibi kullan
<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>