0

我通过本教程在我的 CI 安装中实现了 smarty:http: //www.coolphptools.com/codeigniter-smarty

它工作正常,除了页眉和页脚是通过包含模板中的文件来加载的。

IE。

{include file="header.tpl" title="Example Smarty Page" name="$Name"}
...
{include file="footer.tpl"}

有没有办法从控制器或 Smarty 库类中加载它们?

为了更清楚地说明我想要什么;如果没有模板引擎,我只会view通过自定义加载器扩展该方法。

例如。

class MY_Loader extends CI_Loader {

    function view( $template, $data = array(), $return = false ) {

        $content = parent::view( 'header', $data, $return );
        $content .= parent::view( $template, $data, $return );
        $content .= parent::view( 'footer', $data, $return );

        if( $content )
            return $content;
    }
}

这一直对我有用,但现在我正在尝试聪明,我一生都无法弄清楚如何让它像这样工作。

如果有人能指出我正确的方向。那简直太好了。

PS。抱歉,如果之前已经回答过这个问题,我在过去 2 个小时里一直在谷歌搜索,但我似乎找不到任何东西。我的 PHP 技能充其量只是中等水平。

4

3 回答 3

3

我不是专家,但不久前我确实必须经历这个。我所做的是这样的:

头文件.tpl

<html>
    <head>
    </head>
    <body>

内容.tpl

{include file="header.tpl"}
{include file="$content"}
{include file="footer.tpl"}

页脚.tpl

    </body>
</html>

然后,您可以content.tpl始终进行 smarty 调用并将实际的正文内容传递给$content.

不过,就像我说的那样,我不是专家,所以语法可能不正确,并且可能有一种更“正确”的方式来做到这一点,但我认为这个想法就在那里。

希望有帮助。

于 2013-07-29T12:29:40.713 回答
3

您应该使用{extends}语法来利用模板继承

从您的基本模板文件开始(我们称之为template.php)。该文件将包含您的页眉页脚代码,并将指定主要内容的位置(以及您想要指定的任何其他模板代码块,例如旁边)。

(我在这里使用的是非常简单的 HTML,仅用于示例目的。请不要这样编码。)

模板.php:

<html>
<head>
    <title>{$title|default:'Default Page Title'}</title>
    <meta>
    <meta>
</head>
<body>

    <header>
        <h1>My Website</h1>

        <nav>
            <!-- Navigation -->
        </nav>
    </header>

    <section class="content">

        {block name="content"}{/block}

    </section>

    <footer>
        &copy; 2013 My Website
    </footer>

</body>

然后,您的各个页面将成{extend}为主模板文件,并为所有块指定必要的内容。请注意,您可以使块可选并使用默认值,因此不需要填充所有块(除非您以这种方式编码)。

content_page.php:

{extends file="template.php"}

{block name="content"}

<h2>Content Page</h2>

<p>Some text.</p>

{/block}
于 2013-08-02T05:13:06.927 回答
0
you can user following way to include smarty tpl view in your controller:
$this->smarty->view('content.tpl')

and header.tpl in content page:
{include file='header.tpl'} 
于 2013-07-29T12:40:39.630 回答