0

解释我的问题有点困难,但我会尝试:)

在我使用 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'] ,但这没问题。

谢谢。

4

1 回答 1

1

有几种方法可以将模板库集成到 CodeIgniter 中,其中很大程度上取决于您希望如何将模板绑定在一起。以下内容可能很适合您,或者可能只是为您指明正确的方向。它不是模板的唯一 Smarty/CI 解决方案,但它是我熟悉的解决方案。

我编写了一些代码将 Smarty 集成到 CI中。它允许您使用加载视图的标准方式$this->load->view('view', $data)——但您可以在文件中使用 Smarty 的语法。

我处理“主”模板的方式是通过 Smarty 的{extends}模板继承文档)。我加载的各个视图都扩展了一个主模板或一些其他层次结构,这些层次结构通向一个。

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>
    &copy; 2013 Me!
</footer>

</body>
</html>

页面.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 文档以获得更深入的细节,但这是我以前做过的。:)

于 2013-03-14T03:12:34.707 回答