【问题标题】:What is layout/template/themes in codeigniter什么是 codeigniter 中的布局/模板/主题
【发布时间】:2014-07-24 05:40:02
【问题描述】:

我是 codeigniter 的新手,我对 codeigniter 中的布局/模板/主题感到麻烦。
我不知道什么时候应该使用其中之一..
我能做的最好的方法是什么?如果我想用免费的 html/css 模板 制作一个网站,比如

goodnatured
|--img
   |--img01.jpg
|--css
   |--style.css
|--js
   |--jquery.js
|--index.html

任何人都可以告诉我一个教程,建议,...谢谢

【问题讨论】:

    标签: codeigniter


    【解决方案1】:

    我只是写了一点额外的库(application/libraries/display_lib.php)来渲染模板和类似的页面块。 像这样的:

        class Display_Lib{
           private $_CI;
           private $_template_data;
    
           public function __construct()
           {
               $this->_CI =& get_instance();
           }
    
           public function set($key, $value)
           {
               $this->_template_data[$key] = $value;
           }
    
           public function get($key)
           {
               return $this->_template_data[$key];
           }
    
           public function get_template_data()
           {
               return $this->_template_data;
           }
    
           public function display_page($view, $data = array())
           {
               $this->set('content', $this->_CI->load->view($view, $data, TRUE));
               $this->_CI->load->view('templates/main_template', $this->get_template_data());
           }
    }
    

    将此库设置为自动加载:

    $autoload['libraries'] = array('session', 'database', 'display_lib');
    

    并在控制器中调用它:

    class Main extends CI_Controller{
        public function index()
        {
            $some_data = array();
            $this->display_lib->display_page('views/main_view', $some_data);
        }
    }
    

    模板示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <base href="<?=base_url();?>">
        <meta charset="utf-8">
        <link rel="icon" href="<?=site_url('img/favicon.ico')?>" type="image/x-icon"/>
        <link rel="stylesheet" href="<?=site_url('css/style.css');?>" type="text/css" media="screen, projection"/>
        <script type="text/javascript" src="<?=site_url('js/jquery-1.10.2.min.js');?>"></script>
        <title>Some page title</title>
    </head>
    <body>
        <header></header>
        <div class="auth_wrapper">
            <div class="content">
                <?=$content;?>
            </div>
            <div class="buffer"></div>
        </div>
        <footer></footer>
    </body>
    </html>
    

    还有application/views/main_view简单的例子:

    <div>Come content will be here</div>
    

    这个库允许使用模板并从控制器渲染视图。

    【讨论】:

    • 文件夹是什么样的? application |--libraries | |--display_lib.php |--controllers | |--main.php |--views |--main_view.php img |--img01.jpg css |--style.css js |--jquery.js
    • 是的,你的屏幕是正确的显示应用结构,还需要将templates/main_template.php添加到views文件夹中。
    【解决方案2】:

    模板处理页面的布局。您创建一个包含您的元数据、页眉、页脚和正文空间的模板。正文被注入到模板中,这是内容更改的地方。

    这个想法是网站的大部分内容不会改变,只有主体会改变。这就是模板有用的地方,它们可以节省您的时间并提高一致性。 看看这个模板库,还不错:http://getsparks.org/packages/template/show

    主题与模板相结合,因为模板通常定义布局,而主题只是“皮肤”布局。主题包括将进一步修改模板的资产和样式。

    干杯

    【讨论】:

      【解决方案3】:

      制作一个template.php、header.php、footer.php。下面是template.php,同样制作页眉和页脚并将它们都放在views文件夹中:

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
          <link rel="icon" href="<?=site_url('img/favicon.ico')?>" type="image/x-icon"/>
          <link rel="stylesheet" href="<?=site_url('css/style.css');?>" type="text/css" media="screen, projection"/>
          <script type="text/javascript" src="<?=site_url('js/jquery-1.10.2.min.js');?>"></script>
          <title>Some page title</title>
      </head>
      <body>
          <header><?=$this->load->view('header');?></header>
          <div class="wrapper">
              <div class="content">
                  <?=$main?>
              </div>
          </div>
          <footer><?=$this->load->view('footer');?></footer>
      </body>
      </html>
      

      在您的 Controller 函数中:

      function index(){
          $data           = array();
          $data['main']   = "home";           #this view is home.php in views folder, the content part of template.php
          $this->load->view('template', $data); #this is the template file being rendered.
      }
      

      我认为这是CI中使用模板最简单的方法。

      【讨论】:

      • 你甚至没有改变@joni的jQuery版本js/jquery-1.10.2.min.js
      • 使用了HTML 部分,但逻辑是我的。它与其他答案没有任何关系。 @HashemQolami
      • 这是一种不好的做法,并且违反了 MVC 约定从视图加载视图。考虑使用布局或模板库(这是我的:github.com/scotch-io/stencil) - 或构建自己的。如果您决定这样做,我建议您这样做 $data['header'] = $this->load->view('header', '', TRUE);然后将其传递给您的视图以用作 $header。
      • @envysea 表示这种方式 ($this->load->view('header'), $this->load->view('content'), $this->load-> view('footer')) 不好?
      • @freestyle。我认为最好的方法是使用另一个答案所说的模板库。或者,如果您按照此答案建议的方式进行操作,那么这两种方法都是很好的方法:gist.github.com/ncerminara/6251524gist.github.com/ncerminara/6251613。或者查看 Stencil,我之前发布的链接是开箱即用的,可以使用完整的模板系统,附带示例,并且非常易于使用。
      猜你喜欢
      • 2016-04-23
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      相关资源
      最近更新 更多