我试图在CodeIgniter中创建我的第二个Web应用程序。
在我以前的项目中,我为页眉,页脚和侧边栏创建了视图。
在每个页面控制器中,我都必须像这样加载这些视图:
class Home extends CI_Controller {
public function index()
{
$this->load->view('header');
$this->load->view('sidebar');
$this->load->view('home'); // home
$this->load->view('footer');
}
public function about()
{
$this->load->view('header');
$this->load->view('sidebar');
$this->load->view('about'); // about
$this->load->view('footer');
}
public function contact()
{
$this->load->view('header');
$this->load->view('sidebar');
$this->load->view('contact'); // contact
$this->load->view('footer');
}
}
我不喜欢这样,我觉得我做错了。
有什么建议吗?
答案 0 :(得分:8)
首先在视图文件夹中创建模板
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<meta content="MajidGolshadi" name="author">
<?php echo $html_head; ?>
<title></title>
</head>
<body>
<div id="content">
<?php echo $content; ?>
</div>
<div id="footer">
<?php echo $html_footer; ?>
</div>
</body>
</html>
<强>第二强> 创建一个库以自动加载视图
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Template
{
private $data;
private $js_file;
private $css_file;
private $CI;
public function __construct()
{
$this->CI =& get_instance();
$this->CI->load->helper('url');
// default CSS and JS that they must be load in any pages
$this->addJS( base_url('assets/js/jquery-1.7.1.min.js') );
$this->addCSS( base_url('assets/css/semantic.min.css') );
}
public function show( $folder, $page, $data=null, $menu=true )
{
if ( ! file_exists('application/views/'.$folder.'/'.$page.'.php' ) )
{
show_404();
}
else
{
$this->data['page_var'] = $data;
$this->load_JS_and_css();
$this->init_menu();
if ($menu)
$this->data['content'] = $this->CI->load->view('template/menu.php', $this->data, true);
else
$this->data['content'] = '';
$this->data['content'] .= $this->CI->load->view($folder.'/'.$page.'.php', $this->data, true);
$this->CI->load->view('template.php', $this->data);
}
}
public function addJS( $name )
{
$js = new stdClass();
$js->file = $name;
$this->js_file[] = $js;
}
public function addCSS( $name )
{
$css = new stdClass();
$css->file = $name;
$this->css_file[] = $css;
}
private function load_JS_and_css()
{
$this->data['html_head'] = '';
if ( $this->css_file )
{
foreach( $this->css_file as $css )
{
$this->data['html_head'] .= "<link rel='stylesheet' type='text/css' href=".$css->file.">". "\n";
}
}
if ( $this->js_file )
{
foreach( $this->js_file as $js )
{
$this->data['html_head'] .= "<script type='text/javascript' src=".$js->file."></script>". "\n";
}
}
}
private function init_menu()
{
// your code to init menus
// it's a sample code you can init some other part of your page
}
}
<强>第三强> 在每个控制器构造函数中加载库,然后使用此库自动加载视图
要在视图中加载其他j,您可以这样使用addJS
方法:
$this->template->addJS("your_js_address");
代表Css:
$this->template->addCSS("your_css_address");
并显示您的网页内容,使用show
方法
$this->template->show("your_view_folder", "view_file_name", $data);
我希望这些代码可以帮助您
答案 1 :(得分:3)
在视图中创建template.php将此代码放入此
<?php
$this->load->view('header');
$this->load->view($middle);
$this->load->view('footer');
?>
控制器中的使用此代码
public function index()
{
$data['middle'] = 'home';
$this->load->view('template',$data);
}
答案 2 :(得分:2)
您可以在您使用的主模板文件中加载标题,侧边栏,页脚。
// contact.html
<?php $this->load->view('header');?>
<p>Yak yak yak</p>
<?php $this->load->view('footer');?>
或使用this one
等模板库答案 3 :(得分:1)
您可以像这样创建一个库(或帮助器):
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class View_lib{
function __construct(){
$this->CI =& get_instance();
}
function load_view($current_page){
$parts = array('header', 'sidebar', $current_page, 'footer');
foreach($parts as $part){
$this->CI->load->view($part);
}
}
}
控制器:
public function index(){
$this->load->library('view_lib'); // probably better autoload this
$this->view_lib->load_view('about');
}
有点准系统,但你明白了......
答案 4 :(得分:0)
最好的方法是在构造函数中添加这些文件
function __construct() {
parent::__construct();
$this->load->helper('url');
$this->load->database();
$this->load->view('prots/header');
$this->load->view('prots/top');
$this->load->view('prots/navigation');
}