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



假设我有一个索引模块(模型视图和控制器)。
例如,在索引页面上,我想使用Highchart。
最简单的做法是在我的模板上包含 highchart.js。

但是,如果我不想在其他页面上包含 highchart.js怎么办?

如果我在模板中包含我的所有插件,那将是一种浪费,而且页面可能需要更长的时间来加载。Codeigniter 3 中有什么方法可以只在需要时加载插件吗?

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

这里有一些参考。希望它能有所帮助:
1) Codeigniter - 如何在视图中
包含动态 JavaScript 文件2)如何在codeigniter

>

第一个分类插件包含在3个(或更多,因为需要的插件数量)类别:-

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

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

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

为前 2 个类别创建单独的模板,并在您需要的位置包含。

对于最后一种类型,单独包括

在模板库中添加一个函数来加载 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']; ?>

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

<?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;
        }
    }
}

然后在我的模块控制器中,我扩展了核心控制器,然后将其放在一个数组中,因此如果我有超过 1 个插件,我可以将它们包含在数组中。

<?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>

谢谢你们的见解。

最新更新