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中文汉字验证码
Apr 08 PHP
php 移除数组重复元素的一点说明
Nov 27 PHP
PHP MVC模式在网站架构中的实现分析
Mar 04 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
php中cookie实现二级域名可访问操作的方法
Nov 11 PHP
PHP关联数组实现根据元素值删除元素的方法
Jun 26 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
Mar 08 PHP
thinkphp 手机号和用户名同时登录
Jan 20 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
May 05 PHP
Laravel实现定时任务的示例代码
Aug 10 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 30 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中大括号作用介绍
2012/03/22 PHP
PHP 第二节 数据类型之数组
2012/04/28 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
js星星评分效果
2014/07/24 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
JavaScript实现跟随滚动缓冲运动广告框
2017/07/15 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
Python中3种内建数据结构:列表、元组和字典
2014/11/30 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
2017/11/08 Python
python中lambda()的用法
2017/11/16 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
对python函数签名的方法详解
2019/01/22 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
什么是lambda函数
2013/09/17 面试题
护理学中专毕业生求职信
2013/11/11 职场文书
成绩单家长评语大全
2014/04/16 职场文书
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
小学运动会开幕词
2015/01/28 职场文书
考察邀请函范文
2015/01/31 职场文书
尼克胡哲观后感
2015/06/08 职场文书
六一儿童节新闻稿
2015/07/17 职场文书