【问题标题】:Getting the hang of CodeIgniter - Templating / loading views掌握 CodeIgniter - 模板/加载视图
【发布时间】:2010-11-10 15:42:37
【问题描述】:

尝试学习 CI 并阅读文档以获得更好的理解。在没有单独的库的情况下,我可以通过包含如下视图列表来制作模板:

$this->load->view('header');
$this->load->view('navigation');
$this->load->view('sidenav_open');
$this->load->view('blocks/userinfo');
$this->load->view('blocks/stats');
$this->load->view('sidenav_close');
$this->load->view('content',$data);
$this->load->view('footer');

这是有道理的,但我真的会在每个控制器(页面)上都有这个吗?不确定是否有办法将其包含在初始控制器中(欢迎),然后在其他控制器中以某种方式引用它?或者也许我完全错过了一些东西

【问题讨论】:

标签: php templates codeigniter views


【解决方案1】:

您可以从视图文件中加载视图。例如,考虑一个名为 page_template.php 的通用页面模板:

<html>
<body>
  <div id = "header">
      <?php $this->load->view('header');?>
      <?php $this->load->veiw('navigation');?>
  </div>
  <div id = "sidenav">
     <?php $this->load->view('sidenav');?>
  </div>
  <div id = "content">
     <?php echo $content;?>
   </div>

  <div id = "footer">
      <?php $this->load->view('footer');?>
 </body>
 </html>

通过利用 codeigniter 的能力来加载您更动态的区域,以在控制器中将视图作为变量返回:

$template['content'] = $this->load->view('content',$data,TRUE);
$this->load->view('page_template',$template);

通过将 TRUE 传递给加载函数,CI 将从视图返回数据,而不是输出到屏幕。

您的 sidenav 部分可能是它自己的视图文件 sidenav.php,您可以在其中硬编码或加载类似于上述示例的“块”。

我已经做到了这两种方式,包括每个控制器方法中的每一个臭名昭著的视图,以及使用加载子视图和动态区域的页面模板,到目前为止,第二种方法让我更开心。

【讨论】:

  • 这很重要,所以我想稍微澄清一下:将true 作为第三个参数传递给视图加载器方法会返回视图的确切输出作为字符串 .当您在异步请求期间加载视图并希望使用 JavaScript 将 HTML 字符串插入 DOM 时,这尤其有用。
【解决方案2】:

从视图中加载视图可能会导致混乱。

扩展 Controller 类隐藏了该方法带来的大部分复杂性,但仍利用通过在每次页面加载时渲染一次来生成通用视图(页脚、页眉、导航栏等)的想法。

具体而言,请参阅 CI 用户指南和 wiki 以获取对 MY_Controller 的引用 - 您可以通过在 ./libraries 目录中创建一个 MY_Controller.php 文件来扩展它。

您可以在其中调用视图片段,还可以利用 load-&gt;view() 调用的第三个参数=true 功能。您将这些加载到$this-&gt;data - 例如将页脚加载到$this-&gt;data['footer']。在您的各种控制器中,继续将视图数据添加到$this-&gt;data。在您看来 - 我通常使用一个模板,除了框架 HTML 和一些基本 CSS 之外几乎没有什么作用,然后将整个页眉、页脚、导航和主要内容块作为变量回显,取自 $this-&gt;data

额外的好处 - 如果您是 CI 新手,您可能很快就会寻找如何执行 MY_Controller 可以让您轻松完成的其他事情 :)

我有一个关于简化视图部分的生成和显示的 wiki 页面,正如您在此处尝试做的那样,使用 MY_Controller 在:

https://github.com/EllisLab/CodeIgniter/wiki/Header-and-Footer-and-Menu-on-every-page---jedd

【讨论】:

  • 您的链接已失效。一个完美的例子,说明为什么答案应该是完全“独立的”。
  • 感谢您的有用建议。答案已嵌入。链接另一端的剩余信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 2019-03-29
  • 2014-02-18
  • 2011-05-29
  • 1970-01-01
  • 2018-04-01
相关资源
最近更新 更多