如何在Codeigniter 3中需要时自动调用插件?

时间:2017-10-23 07:48:28

标签: php codeigniter codeigniter-3

我们说我有一个索引模块(模型视图和控制器) 在索引页面上,我想使用Highchart作为例子 最简单的做法是在我的模板上加上highchart.js。

但是,如果我不想在其他页面上包含highchart.js,该怎么办? 如果我在模板上包含我的所有插件,那将是一种浪费,而且页面可能需要更长的时间才能加载。 Codeigniter 3中是否有任何方法仅在需要时加载插件?

4 个答案:

答案 0 :(得分:1)

这完全是您在哪个页面上的句柄,您必须加载哪个插件。您可以动态包含js,css。您可以在所有视图页面中静态提及js或css应包含哪些内容,或者您​​可以将其传递给控制器​​。

这是一些参考。希望它会有所帮助:
1)Codeigniter - how to include a dynamic javascript file in a view
2)how to load css, js dynamically in codeigniter

答案 1 :(得分:0)

首先将分类插件包含在3个(或更多插件所需的插件数)类别中: -

1)经常使用(包含在60-100%页面中)

2)很少使用(包含在20-60%的页面中)

3)一次或不超过2-5页

为前2个类别创建单独的模板&包括你需要的地方。

最后一种类型包括

答案 2 :(得分:0)

在模板库中添加一个函数来加载JS文件:

public function set_js($name, $src)
    {
        $src = htmlspecialchars(strip_tags($src));
        $this->_js[$name] = '<script src="'.$src.'"></script>';
        return $this;
    }

用作:

$this->template->set_js('js-file', base_url() .'assets/vendor/js-file/js-file.min.js');

在您的控制器中。

在您的布局中,您可以添加

<?php print $template['js']; ?>

答案 3 :(得分:0)

最后我使用HMVC,然后我创建了自己的核心控制器作为MY_Controller,然后在这个类下我编写了函数来获取带有switch case的插件。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class MY_Controller extends MX_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->module("Template");
    }

    public function include($plugin)
    {
        switch ($plugin) {
            case 'highcharts':
                return "global/plugins/js/highcharts.js";
                break;
        }
    }
}

然后在我的模块控制器中我扩展核心控制器,然后我把它放在一个数组中,所以如果我有多个插件,我可以将它们包含在数组中。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Ookla extends MY_Controller {
    public function index()
    {
        $data["js"] =   [
                            $this->include('highcharts') // <- here
                        ];
        $data["main_content"] = "ookla/ookla";
        $this->template->master_template($data);
    }
}

然后在我的master_template视图中,只要它在数组中有插件,我就会循环它。

...
    <?php
            if(isset($js)){
                foreach ($js as $item) {
                    echo "<script type='text/javascript' src='".base_url()."assets/".$item."'></script>";
                }
            }
        ?>
    </body>

</html>

谢谢你们的见解。