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 项目的方法
Jan 02 PHP
php array_map()数组函数使用说明
Jul 12 PHP
基于php使用memcache存储session的详解
Jun 25 PHP
Java和PHP在Web开发方面对比分析
Mar 01 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
php处理抢购类功能的高并发请求
Feb 08 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
php实现小程序支付完整版
Oct 09 PHP
PHP的PDO错误与错误处理
Jan 27 PHP
php实现QQ小程序发送模板消息功能
Sep 18 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
Sep 19 PHP
Laravel使用原生sql语句并调用的方法
Oct 09 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中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
php curl模拟post提交数据示例
2013/12/31 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
使用堆实现Top K算法(JS实现)
2015/12/25 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
JS实现为动态创建的元素添加事件操作示例
2018/03/17 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
pow在python中的含义及用法
2019/07/11 Python
详解python中的index函数用法
2019/08/06 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
高级编程求职信模板
2014/02/16 职场文书
营销总监岗位职责范本
2014/02/26 职场文书
《诚实与信任》教学反思
2014/04/10 职场文书
高中生操行评语大全
2014/04/25 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
大一学生个人总结
2015/02/15 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
生鲜超市—未来中国最具有潜力零售业态
2019/08/02 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技