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 相关文章推荐
解决中英文字符串长度问题函数
Jan 16 PHP
php开启安全模式后禁用的函数集合
Jun 26 PHP
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
Mar 06 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
php中数据库连接方式pdo和mysqli对比分析
Feb 25 PHP
PHP Opcache安装和配置方法介绍
May 28 PHP
PHP文件操作详解
Dec 30 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
Oct 26 PHP
Laravel中使用Queue的最基本操作教程
Dec 27 PHP
tp5实现微信小程序多图片上传到服务器功能
Jul 16 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 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.MVC的模板标签系统(三)
2006/09/05 PHP
社区(php&amp;&amp;mysql)二
2006/10/09 PHP
解析PHP中的正则表达式以及模式匹配
2013/06/19 PHP
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
jquery键盘事件介绍
2011/01/31 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
Jquery树插件zTree用法入门教程
2015/02/17 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
jQuery基于正则表达式的表单验证功能示例
2017/01/21 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
JavaScript 数组的进化与性能分析
2017/09/18 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
微信小程序实现吸顶效果
2020/01/08 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
[03:02]安得倚天剑,跨海斩长鲸——中国军团出征DOTA2国际邀请赛
2018/08/14 DOTA
TensorFlow高效读取数据的方法示例
2018/02/06 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
python实现多层感知器
2019/01/18 Python
python如何进行矩阵运算
2020/06/05 Python
Python是怎样处理json模块的
2020/07/16 Python
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
红领巾心向党广播稿
2014/01/19 职场文书
初婚初育证明范本
2014/11/24 职场文书
大学生社会实践感想
2015/08/11 职场文书
给原生html中添加水印遮罩层的实现示例
2021/04/02 Javascript
django学习之ajax post传参的2种格式实例
2021/05/14 Python
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL