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 相关文章推荐
phpBB BBcode处理的漏洞
Oct 09 PHP
关于file_get_contents返回为空或函数不可用的解决方案
Jun 24 PHP
完美解决PHP中的Cannot modify header information 问题
Aug 12 PHP
php计算当前程序执行时间示例
Apr 24 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
Apr 24 PHP
php调用新浪短链接API的方法
Nov 08 PHP
ThinkPHP中RBAC类的四种用法分析
Nov 24 PHP
PHP模板引擎Smarty中变量的使用方法示例
Apr 11 PHP
PHP中的print_r 与 var_dump 输出数组
Jun 13 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
Aug 14 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
Oct 15 PHP
基于ThinkPHP删除目录及目录文件函数
Oct 28 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
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
javascript 面向对象编程 function也是类
2009/09/17 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
理解javascript异步编程
2016/01/27 Javascript
javascript实现计时器的简单方法
2016/02/21 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
2017/04/24 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
Pandas读写CSV文件的方法示例
2019/03/27 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
Scrapy模拟登录赶集网的实现代码
2020/07/07 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
Python LMDB库的使用示例
2021/02/14 Python
CSS3 animation实现简易幻灯片轮播特效
2016/09/27 HTML / CSS
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
全球虚拟主机商:HostGator
2017/02/06 全球购物
网络教育自我鉴定
2013/11/01 职场文书
小学生演讲稿大全
2014/04/25 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
软件项目经理岗位职责
2015/04/01 职场文书
餐厅收银员岗位职责
2015/04/07 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
安全生产学习心得体会
2016/01/18 职场文书
编写python程序的90条建议
2021/04/14 Python
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis