• yii2 如何在页面底部加载css和js


    作者:白狼 出处:www.manks.top/article/yii2_load_js_css_in_end 

    本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    正所谓命由己造,相由心生,那么我们的问题又是怎么抛出来的喃?

    这个问题也算是个比较久远但是经常会有人要问到的问题。究其原因,

    一来实际开发中不可避免,二来也就是刚接触yii的小伙伴喜欢揪着不放。那

    为啥了解过这个问题的人就不纠结了喃?外星人:楼主你si不si撒,人家都了解怎么做了还纠结这个问题干嘛。

    那行,关乎所以的人看看就行。

    一般来说,网页内部的js文件或代码,都是放置在网页底部</body>的前面,这是因为网页自上而下加载,用户在访问我们页面的时候尽量不要因为加载js展现过长时间的空白页面,停留时间过长就白白流失了用户量。

    yii2中是集成了jQuery的,而且jQuery文件是加载在页面底部的,因此,如果我们的js代码段不在页面底部加载,就很大可能会发生$未定义的友好提示。

    我这废话一大堆得毛病确实需要去挂个号看看了...

    先来看看js代码段怎么处理

    <?php
    $this->registerJs('
    $(function () {
    //为所欲为的写你想要写的js代码吧
    $......
    });
    ', yiiwebView::POS_END);

    对,就是用上面的registerJs方法注册,有小伙伴听不懂了,啥是注册,简单理解就是把你的js代码放置在你想要放的页面位置。

    第一个参数嘛,很好理解,就是我们要写的js代码块。第二个参数就是我们需要指定代码块插入在页面的具体位置了。

    第二个参数这里只讨论 yiiwebView::POS_END,意思就是页面底部</body>之前插入。

    当然还有第三个参数,意思是js代码块的一个id标示,不指定会默认生成,此处忽略。

    哦对了,上面的$this不要混淆,这里是指yiiwebView对象

    接下来一起看看怎么引入外部的js文件。

    官网的例子是这样给的

    $this->registerJsFile('http://example.com/js/main.js', ['depends' => [yiiwebJqueryAsset::className()]]);

    但是人家说了,我们不建议这么用,这样依赖来依赖去关系复杂。

    好了,我们来看看怎么使用包管理asset bundles进行注册吧。

    我们先打开文件 backendassetsAppAsset.php文件瞅瞅是什么高大上的东西,我擦,果然高深,我张作完全看不懂的样子,完了,下面没法写了,看不懂怎么讲,回归正题,我们要抓紧时间扩展下。

    我们在AppAsset类里添加了两个静态方法,完整版的AppAsset类如下:

    namespace backendassets;
    use yiiwebAssetBundle;
    /**
     * @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 = [
            'yiiwebYiiAsset',
            'yiiootstrapBootstrapAsset',
        ];
        //定义按需加载JS方法,注意加载顺序在最后       public static function addScript($view, $jsfile) {           $view->registerJsFile($jsfile, [AppAsset::className(), 'depends' => 'backendassetsAppAsset']);       }              //定义按需加载css方法,注意加载顺序在最后       public static function addCss($view, $cssfile) {           $view->registerCssFile($cssfile, [AppAsset::className(), 'depends' => 'backendassetsAppAsset']);       }   }

    我们先来说说添加的addScript和addCss有啥作用,意图是啥,上面说了,不建议在view层直接用$this->registerJsFile方法注册文件,这里呢,我们添加的addScript方法,以后view层直接调用这个方法对文件进行注册。

    那为啥这个就好了呢?好处是非常明显的,调用该方法避免了每次注册文件都要填写依赖关系,十分方便。

    其中需要说明的是,需要注册的文件都会在yii.js和bootstrap.js文件的后面,这也正是我们所需要的。

    这样一来,我们在view层加载外部js文件也就灰常简单了,像下面这样,

    use backendassetsAppAsset;
    AppAsset::register($this);
    AppAsset::addScript($this,'/css/main.js');

    而不必像下面这样繁琐:

    $this->registerJsFile('/css/main.js',['depends'=>['backendassetsAppAsset'], 'position'=> $this::POS_END]);
    $this->registerJsFile('/css/left.js',['depends'=>['backendassetsAppAsset']]);
    $this->registerJsFile('/css/extension.js',['depends'=>['backendassetsAppAsset']]);

    到此喃,我们就完整的实现了在yii2中页面底部加载css,js代码或外部文件了。

    如果你还想深入了解更多,可以继续参考官方文档。

    官方文档 http://www.yiiframework.com/doc-2.0/guide-structure-assets.html

    http://www.yiiframework.com/doc-2.0/guide-output-client-scripts.html

  • 相关阅读:
    MVC ORM 架构
    Kubernetes 第八章 Pod 控制器
    Kubernetes 第七章 Configure Liveness and Readiness Probes
    Kubernetes 第六章 pod 资源对象
    Kubernetes 第五章 YAML
    Kubernetes 核心组件
    Kubernetes 架构原理
    Kubernetes 第四章 kubectl
    Kubernetes 第三章 kubeadm
    yum 配置及yum 源配置
  • 原文地址:https://www.cnblogs.com/wwolf/p/5413697.html
Copyright © 2020-2023  润新知