CodeIgniter 中的部分视图
Partial Views in CodeIgniter
我是使用 CodeIgniter Framework 的初学者。之前学过Laravel。我的问题是我想在 Laravel 中制作像 Blade 这样的动态模板。所以,在每个页面中,我只加载该页面只需要的样式和脚本。
这是我用 CodeIgniter 创建的代码,因此可以动态加载自定义样式和自定义脚本。
template.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
// <hmtl>
$this->load->view($header);
if(isset($style))
$this->load->view($style);
// <body>
$this->load->view($navbar);
if(isset($sidebar))
$this->load->view($sidebar);
$this->load->view($content);
$this->load->view($footer);
// </body>
if(isset($script))
$this->load->view($script);
// </html>
和我的控制器
public function index()
{
$data = [
'title' => 'Home',
'header' => 'partials/_header',
'navbar' => 'partials/_navbar',
'content' => 'guest/public',
'footer' => 'partials/_footer'
];
$this->load->view('template', $data);
}
也许你有更好的想法,因为我被它困住了。在 Laravel 中很容易,因为有 @yield
和 @section
。
你们的任何想法对我来说都会很有帮助,谢谢。
我确实做过一次类似的事情,现在承认,但我是在模板库中完成的。
使用像
这样的设置器
$this->template_library->set_css_script('page.css');
$this->template_library->set_layout('product_page');
控制器将以这样的调用结束:
$this->template_library->render_page();
然后模板库会使用 load->view 函数来创建页面并根据设置或未设置的值输出它,页面布局意味着我可以有各种设置布局,如 home_page、product_page、checkout_page、message_page 等等等等
对于布局,我有一个主布局用于主页,以及不同页面的变体。
虽然最后我恢复到简单视图,但页眉和页脚以及任何变体都有通用文件。维护大量不同的视图文件比维护所有布局、模板和局部更容易。
一个很有帮助的事情是一个视图可以加载另一个视图。因此,为了保持一切干燥,这意味着任何衍生页面部分视图都可以保存在 'partials' 文件夹中,例如 'related products' 或 'blog_list' 等
希望对您有所帮助。
最后,我想出了使它动态化的最佳方法。如何在每个不同的页面加载自定义脚本和 css。
这里是 template.php 的代码(在 views 文件夹内)
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$this->load->view($header);
$this->load->view($navbar);
$this->load->view($content);
$this->load->view($footer);
和控制器控制器
public function index() {
$data = [
'header' => 'partials/_header',
'style' => 'partials/style/_public_css',
'navbar' => 'partials/_navbar',
'content' => 'guest/public',
'footer' => 'partials/_footer',
'script' => 'partials/script/_public_js'
];
$this->load->view('template', $data);
}
并且在 _header.php
的部分视图中
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>...</title>
<!-- Partial CSS Here -->
<?php if(isset($style)) $this->load->view($style); ?>
</head>
<body>
_navbar.php
<header>
<nav class="navbar navbar-inverse navbar-fixed-top">
....
</nav>
</header>
然后是控制器中的内容变量,它会加载 public.php(在我的例子中,您必须替换为您要加载的任何页面)
<div class="container">
....
</div>
最后一个是_footer.php
<footer>
....
</footer>
<!-- JQuery HERE -->
<!-- any js that you will you in all pages HERE -->
<!-- Partial Script Here -->
<?php if(isset($script)) $this->load->view($script); ?>
</body>
<html>
记住,如果你的页脚在每个页面上都是静态的,将你的 JQuery 放在 _footer.php 中,如果它不只是放置 jquery 在 _header.php 中,即使先加载脚本也不是最佳做法。
我是使用 CodeIgniter Framework 的初学者。之前学过Laravel。我的问题是我想在 Laravel 中制作像 Blade 这样的动态模板。所以,在每个页面中,我只加载该页面只需要的样式和脚本。
这是我用 CodeIgniter 创建的代码,因此可以动态加载自定义样式和自定义脚本。
template.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
// <hmtl>
$this->load->view($header);
if(isset($style))
$this->load->view($style);
// <body>
$this->load->view($navbar);
if(isset($sidebar))
$this->load->view($sidebar);
$this->load->view($content);
$this->load->view($footer);
// </body>
if(isset($script))
$this->load->view($script);
// </html>
和我的控制器
public function index()
{
$data = [
'title' => 'Home',
'header' => 'partials/_header',
'navbar' => 'partials/_navbar',
'content' => 'guest/public',
'footer' => 'partials/_footer'
];
$this->load->view('template', $data);
}
也许你有更好的想法,因为我被它困住了。在 Laravel 中很容易,因为有 @yield
和 @section
。
你们的任何想法对我来说都会很有帮助,谢谢。
我确实做过一次类似的事情,现在承认,但我是在模板库中完成的。
使用像
这样的设置器 $this->template_library->set_css_script('page.css');
$this->template_library->set_layout('product_page');
控制器将以这样的调用结束:
$this->template_library->render_page();
然后模板库会使用 load->view 函数来创建页面并根据设置或未设置的值输出它,页面布局意味着我可以有各种设置布局,如 home_page、product_page、checkout_page、message_page 等等等等
对于布局,我有一个主布局用于主页,以及不同页面的变体。
虽然最后我恢复到简单视图,但页眉和页脚以及任何变体都有通用文件。维护大量不同的视图文件比维护所有布局、模板和局部更容易。
一个很有帮助的事情是一个视图可以加载另一个视图。因此,为了保持一切干燥,这意味着任何衍生页面部分视图都可以保存在 'partials' 文件夹中,例如 'related products' 或 'blog_list' 等
希望对您有所帮助。
最后,我想出了使它动态化的最佳方法。如何在每个不同的页面加载自定义脚本和 css。
这里是 template.php 的代码(在 views 文件夹内)
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$this->load->view($header);
$this->load->view($navbar);
$this->load->view($content);
$this->load->view($footer);
和控制器控制器
public function index() {
$data = [
'header' => 'partials/_header',
'style' => 'partials/style/_public_css',
'navbar' => 'partials/_navbar',
'content' => 'guest/public',
'footer' => 'partials/_footer',
'script' => 'partials/script/_public_js'
];
$this->load->view('template', $data);
}
并且在 _header.php
的部分视图中<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>...</title>
<!-- Partial CSS Here -->
<?php if(isset($style)) $this->load->view($style); ?>
</head>
<body>
_navbar.php
<header>
<nav class="navbar navbar-inverse navbar-fixed-top">
....
</nav>
</header>
然后是控制器中的内容变量,它会加载 public.php(在我的例子中,您必须替换为您要加载的任何页面)
<div class="container">
....
</div>
最后一个是_footer.php
<footer>
....
</footer>
<!-- JQuery HERE -->
<!-- any js that you will you in all pages HERE -->
<!-- Partial Script Here -->
<?php if(isset($script)) $this->load->view($script); ?>
</body>
<html>
记住,如果你的页脚在每个页面上都是静态的,将你的 JQuery 放在 _footer.php 中,如果它不只是放置 jquery 在 _header.php 中,即使先加载脚本也不是最佳做法。