解释我的问题有点难,但我会尝试:)
在我正在使用Smarty的自定义项目中,我有一个index.php文件,其中放置了url处理和内容的所有基本设置。
例如:
// Get information for the "about us" page
if($_GET['qs']=='about_us'){
$data['text'] = 'Lorem Ipsum...';
$data['other_stuff'] = 'dolor sit amet';
// Required template file
$data['tpl_Name'] = 'about.tpl';
}
在这个文件的底部,我有一些代码可以获取正确的模板,然后将其发送到master_site模板。
例如:
if (isset($data['tpl_Name'])){
$this->smarty->assign('content', $this->smarty->fetch($data['tpl_Name']));
$this->smarty->view('master_site.tpl');
}
在master_site.tpl中,我可以使用{$ content}访问about.tpl 这个{$ content}变量将针对每个页面进行更改,因为index.php是通过在我的应用程序中请求页面来发送所有数据的页面。
问题:CodeIgniter中是否有可用于每个页面的文件,因此我可以创建类似上面的内容?现在我必须在我的控制器的每个功能中使用这段代码(第二个例子),这似乎效率低下。
当然我必须在每个函数中设置$ data ['tpl_Name'],但这没问题。
感谢。
答案 0 :(得分:1)
有很多方法可以将模板库集成到CodeIgniter中,其中很多方法取决于您希望如何将模板绑定在一起。以下内容可能适合您,或者只是指出您正确的方向。它不是模板的唯一Smarty / CI解决方案,但它是我熟悉的。
I wrote some code to integrate Smarty into CI。它允许您使用加载视图的标准方式 - $this->load->view('view', $data)
- 但您可以在文件中使用Smarty的语法。
我处理“主”模板的方式是通过Smarty的{extends}
(template inheritance docs)。我加载的各个视图都扩展了主模板或导致其中一个的其他层次结构。
<强> main_template.php:强>
<html>
<head>
<meta>
<meta>
<title>{$title|default:"Default Title"}</title>
</head>
<body>
<header>
<h1>My Website</h1>
</header>
<nav>
<ul>
<li>Page Link</li>
<li>Page Link</li>
<li>Page Link</li>
<li>Page Link</li>
</ul>
</nav>
<section class="main-content">
{block name=content}{/block}
</section>
<footer>
© 2013 Me!
</footer>
</body>
</html>
<强> page.php文件:强>
{extends "main_template.php"}
{block "content"}
<h2>My Content Page</h2>
<p>Lorem ipsum and stuff...</p>
{/block}
$title
变量会像平常一样添加到您的视图数据中,并且您将使用标准语法加载页面:
$data['title'] = 'My page';
$this->load->view('page', $data);
我会让你调查Smarty文档以获得更深入的细节,但这就是我之前所做的。 :)