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 相关文章推荐
一个ORACLE分页程序,挺实用的.
Oct 09 PHP
PHP的FTP学习(三)
Oct 09 PHP
php自动加载的两种实现方法
Jun 21 PHP
linux下删除7天前日志的代码(php+shell)
Jan 02 PHP
php-perl哈希算法实现(times33哈希算法)
Dec 30 PHP
修改apache配置文件去除thinkphp url中的index.php
Jan 17 PHP
PHP防止post重复提交数据的简单例子
Jun 07 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
May 13 PHP
微信支付开发订单查询实例
Jul 12 PHP
ZendFramework框架实现连接两个或多个数据库的方法
Dec 08 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
KindEditor在php环境下上传图片功能集成的方法示例
Jul 20 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水印技术
2007/02/14 PHP
PHP 压缩文件夹的类代码
2009/11/05 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
JavaScript中的ubound函数使用实例
2014/11/04 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
NodeJS和BootStrap分页效果的实现代码
2016/11/07 NodeJs
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
vue模板语法-插值详解
2017/03/06 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
Python 如何提高元组的可读性
2019/08/26 Python
python标识符命名规范原理解析
2020/01/10 Python
tensorflow 模型权重导出实例
2020/01/24 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
Python3 shelve对象持久存储原理详解
2020/03/23 Python
python之语音识别speech模块
2020/09/09 Python
python在地图上画比例的实例详解
2020/11/13 Python
flask项目集成swagger的方法
2020/12/09 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
Unix如何添加新的用户
2014/08/20 面试题
给小学生的新年寄语
2014/04/04 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
教师节标语大全
2014/10/07 职场文书
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题