yii2 页面底部加载css和js的技巧


Posted in PHP onApril 21, 2016

一般来说,网页内部的js文件或代码,都是放置在网页底部</body>的前面,这是因为网页自上而下加载,用户在访问我们页面的时候尽量不要因为加载js展现过长时间的空白页面,停留时间过长就白白流失了用户量。

yii2中是集成了jQuery的,而且jQuery文件是加载在页面底部的,因此,如果我们的js代码段不在页面底部加载,就很大可能会发生$未定义的友好提示。

我这废话一大堆得毛病确实需要去挂个号看看了...

先来看看js代码段怎么处理

<?php
$this->registerJs('
$(function () {
//为所欲为的写你想要写的js代码吧
$......
});
', \yii\web\View::POS_END);

对,就是用上面的registerJs方法注册,有小伙伴听不懂了,啥是注册,简单理解就是把你的js代码放置在你想要放的页面位置。

第一个参数嘛,很好理解,就是我们要写的js代码块。第二个参数就是我们需要指定代码块插入在页面的具体位置了。

第二个参数这里只讨论 \yii\web\View::POS_END,意思就是页面底部</body>之前插入。

当然还有第三个参数,意思是js代码块的一个id标示,不指定会默认生成,此处忽略。

 哦对了,上面的$this不要混淆,这里是指yii\web\View对象

接下来一起看看怎么引入外部的js文件。

官网的例子是这样给的

$this->registerJsFile('http://example.com/js/main.js', ['depends' => [\yii\web\JqueryAsset::className()]]);

但是人家说了,我们不建议这么用,这样依赖来依赖去关系复杂。

好了,我们来看看怎么使用包管理asset bundles进行注册吧。

我们先打开文件 backend\assets\AppAsset.php文件瞅瞅是什么高大上的东西,我擦,果然高深,我张作完全看不懂的样子,完了,下面没法写了,看不懂怎么讲,回归正题,我们要抓紧时间扩展下。

我们在AppAsset类里添加了两个静态方法,完整版的AppAsset类如下:

namespace backend\assets;
use yii\web\AssetBundle;
/**
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @since 2.0
 */
class AppAsset extends AssetBundle
{
  public $basePath = '@webroot';
  public $baseUrl = '@web';
  public $css = [
    'css/site.css',
  ];
  public $js = [
  ];
  public $depends = [
    'yii\web\YiiAsset',
    'yii\bootstrap\BootstrapAsset',
  ];  //定义按需加载JS方法,注意加载顺序在最后 
  public static function addScript($view, $jsfile) { 
    $view->registerJsFile($jsfile, [AppAsset::className(), 'depends' => 'backend\assets\AppAsset']); 
  } 
  //定义按需加载css方法,注意加载顺序在最后 
  public static function addCss($view, $cssfile) { 
    $view->registerCssFile($cssfile, [AppAsset::className(), 'depends' => 'backend\assets\AppAsset']); 
  } 
}

我们先来说说添加的addScript和addCss有啥作用,意图是啥,上面说了,不建议在view层直接用$this->registerJsFile方法注册文件,这里呢,我们添加的addScript方法,以后view层直接调用这个方法对文件进行注册。

那为啥这个就好了呢?好处是非常明显的,调用该方法避免了每次注册文件都要填写依赖关系,十分方便。

其中需要说明的是,需要注册的文件都会在yii.js和bootstrap.js文件的后面,这也正是我们所需要的。

这样一来,我们在view层加载外部js文件也就灰常简单了,像下面这样,

use backend\assets\AppAsset;
AppAsset::register($this);
AppAsset::addScript($this,'/css/main.js');

而不必像下面这样繁琐:

$this->registerJsFile('/css/main.js',['depends'=>['backend\assets\AppAsset'], 'position'=> $this::POS_END]);
$this->registerJsFile('/css/left.js',['depends'=>['backend\assets\AppAsset']]);
$this->registerJsFile('/css/extension.js',['depends'=>['backend\assets\AppAsset']]);

到此喃,我们就完整的实现了在yii2中页面底部加载css,js代码或外部文件了。

以上所述是小编给大家介绍的yii2 页面底部加载css和js的技巧的相关内容,希望对大家有所帮助!

PHP 相关文章推荐
PHP入门
Oct 09 PHP
php REMOTE_ADDR之获取访客IP的代码
Apr 22 PHP
php模板函数 正则实现代码
Oct 15 PHP
使用PHP Socket写的POP3类
Oct 30 PHP
PHP反射使用实例和PHP反射API的中文说明
Jul 02 PHP
Laravel框架表单验证详解
Sep 04 PHP
PHP curl 抓取AJAX异步内容示例
Sep 09 PHP
WordPress中自定义后台管理界面配色方案的小技巧
Dec 29 PHP
基于thinkPHP框架实现留言板的方法
Oct 17 PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 PHP
PHP 技巧 * SVG 保存为图片(分享图生成)
Apr 02 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
Apr 20 #PHP
又拍云异步上传实例教程详解
Apr 19 #PHP
ThinkPHP中order()使用方法详解
Apr 19 #PHP
ThinkPHP中limit()使用方法详解
Apr 19 #PHP
ThinkPHP中where()使用方法详解
Apr 19 #PHP
yii2中的rules 自定义验证规则详解
Apr 19 #PHP
PHP序列化/对象注入漏洞分析
Apr 18 #PHP
You might like
两个强悍的php 图像处理类1
2009/06/15 PHP
基于Zookeeper的使用详解
2013/05/02 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
PHP Include文件实例讲解
2019/02/15 PHP
js获取单选按钮的数据
2006/11/27 Javascript
ajax中get和post的说明及使用与区别
2012/12/23 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
AngularJS ng-repeat数组有重复值的解决方法
2016/10/23 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
简单说明Python中的装饰器的用法
2015/04/24 Python
Python数据结构之翻转链表
2017/02/25 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
基于python生成器封装的协程类
2019/03/20 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
2019/12/30 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
2020/09/03 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
学生自我鉴定模板
2013/12/30 职场文书
关于赌博的检讨书
2014/01/08 职场文书
实验室标语
2014/06/21 职场文书
正风肃纪查摆剖析材料
2014/10/10 职场文书
单位考核鉴定意见
2015/06/05 职场文书
离职证明范本
2015/06/12 职场文书