【问题标题】:How to load a base template in code igniter如何在 codeigniter 中加载基本模板
【发布时间】:2013-07-08 16:20:27
【问题描述】:

我是使用 CI 的新手,我有一个问题。更像是一个设计方法建议。我想为静态页面创建一个基本模板。基本上我想加载文档类型、头部和正文,但没有别的。我希望内容由我通过 URL 调用的任何类/函数加载。我知道我可以使用 HTML 模板和 str_replace() 来做到这一点,但有没有更好的方法或我不熟悉的一些花哨的 CI 方法?

这是我目前所拥有的,它有效,但不是最好的。

class Sandbox extends CI_Controller {

    public function __construct() {
        parent::__construct();
        //echo "hello world?"; 
    }

    public function load($what){
        if ($what == 'something'){

            if (!file_exists('application/views/content/'.$what.'.php')){
                // Whoops, we don't have a page for that!
                show_404();
            }
            $data = array();
            $this->load->view('templates/header', $data);
            $this->load->view('content/'.$what, $data);
            $this->load->view('templates/footer', $data);
        }
        else { // Default load

            $data = array();
            $data['message'] = 'Hello World';
            //$this->load->view('templates/header', $data);
            $this->load->view('content/sandbox', $data);
            //$this->load->view('templates/footer', $data);
        }
    }
}

当我加载视图方法时,它似乎可以工作,但我必须添加 doctype 并前往模板。我宁愿单独加载这些,所以不必创建多个标题。我正在寻找的是一种专门加载页面部分以及该给定页面所需的任何脚本/css的方法。

感谢您的建议。

【问题讨论】:

    标签: php codeigniter templates


    【解决方案1】:

    您在控制器中的函数名称是对 url 的引用,例如:

    www.ci.com/sandbox/load
    

    上面的 url 将在沙盒控制器中加载 function load()

    要创建模板,您只需创建一个包含所需基础知识的视图,然后将内容传递给该视图,例如:

    function home(){
    $data['content'] = $this->load->view('home_content',,TRUE);
    this->load->view('template', $data)
    }
    

    通过在第三个参数中使用TRUE,您将返回数据而不是显示它。

    然后在模板文件中只是echo $content; 您还可以使用相同的方法创建单独的头文件和其他文件以包含在模板中,即:

    function home(){
    $data['content'] = $this->load->view('home_content',,TRUE);
    $data['head'] = $this->load->view('head',,TRUE);
    this->load->view('template', $data);
    }
    

    您还可以将数据变量传递给您要返回的视图,即:

    $data['content'] = $this->load->view('home_content',,TRUE);
    $data['admin_script'] = $this->load->view('admin_script',,TRUE);
    $data['head'] = $this->load->view('head',$data,TRUE);
    

    我希望这会有所帮助! :)

    如果你想加载不同的页面,你应该为它们创建单独的函数并创建一个新的路由规则:Codeigniter: URI ROUTING

    【讨论】:

    • $data['content'] = $this->load->view('home_content',,TRUE);返回包含html标签的数据吗?
    • 它将包括您放入该文件的所有内容。把它想象成你在使用include
    • 谢谢,它很方便,我可以用它来做我想做的事。我刚刚测试过:D
    猜你喜欢
    • 2013-10-08
    • 2016-03-11
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多