【问题标题】:Creating custom templates for rendering common pages创建用于呈现通用页面的自定义模板
【发布时间】:2013-09-09 06:41:51
【问题描述】:
我是 codeigniter 的新手,我想知道如何使用自定义模板来呈现常见页面,如页眉、页脚、侧面板等。连同页面的数据。
class Template {
function show($view)
{
<?php $this->load->view('header'); ?>
<?php $this->load->view($view,$data); ?>
<?php $this->load->view('footer',$data); ?>
}
}
这是我的意思的示例。谁能帮忙。
【问题讨论】:
标签:
php
codeigniter
templates
header
footer
【解决方案1】:
不要在一个控制器函数中调用 3 个视图,因为它们会限制你。而是只调用一个视图,该视图调用另外 3 个视图。
这是你的计划:
$this->load->view('header');
$this->load->view($view,$data);
$this->load->view('footer',$data);
问题是您的页眉视图会打开一些 HTML 标签,这些标签会在页脚视图中关闭,例如 div#container。这将使您的代码难以辨认。
我的建议是:
$main_data['a']=...
$main_data['b']=...
$main_data['c']=...
$this->general_view('myview',$main_data);
protected function general_view($main_view,$main_data)
{
$data['main_data']=$main_data;
$data['main_view']=$main_view;
$this->load->view('general_view',$data);
}
内部视图:
<HTML>
<HEAD>
....
</HEAD>
<BODY>
<?$this->load->view('header');?>
<div id="container">
<?$this->load->view($main_view,$main_data);?>
</div>
<?$this->load->view('footer',$data);?>
</BODY>
<HTML>
【解决方案3】:
可以,只需在名为 masterpage.php 的视图中添加一个文件,然后使用以下代码:
<html>
<head>
</head>
<body>
<div class='menu'>My Menu here</div>
<div class='content'>
<?php echo $content; ?>
</div>
</body>
</html>
那么你的观点应该是这样的
<?php
ob_start();
?>
content
<?php
$content= ob_get_contents();
ob_end_clean();
include("application/views/masterpage.php");
?>
希望对你有帮助。
【解决方案4】:
您可以扩展一个 abstractClass 以获得层次结构索引:
抽象类:
class AbstractController extends CI_Controller
{
var $_template;
function __construct()
{
parent::__construct();
}
function index()
{
$this->load->view('header');
$this->load->view($this->_template);
$this->load->view('footer',$data);
}
}
家庭控制器:
class Home extends AbstractController
{
function __construct()
{
parent::__construct();
$this->_template = "home/home_view";
}
}
当您访问 site.com/home 时,您将覆盖 $this->_template 和主视图路径,并从抽象控制器调用 index()
祝你好运