Codeigniter + Smarty интеграция, шаблон за горен/долен колонтитул

Внедрих smarty в моята CI инсталация чрез този урок: http://www.coolphptools.com/codeigniter-smarty

Работи добре, с изключение на това, че горният и долният колонтитул се зареждат чрез включване на файловете от шаблона.

ie.

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

Има ли начин да ги заредите от контролера или от класа на библиотеката Smarty?

Да дам по-ясен пример какво искам; Без машина за шаблони просто бих разширил метода view чрез персонализирано зареждане.

eg.

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;
    }
}

Това винаги е работило за мен, но сега опитвам Smarty и не можах за цял живот да разбера как да го накарам да работи като този.

Ако някой може да ме насочи в правилната посока. Това би било страхотно.

PS. Извинявам се, ако това вече е било отговорено преди, търсих това в Google през последните 2 часа и изглежда не мога да намеря нищо. PHP уменията ми са в най-добрия случай на средно ниво.


person clueless    schedule 29.07.2013    source източник


Отговори (2)


Не съм експерт, но трябваше да мина през това не много отдавна. Това, което направих, е нещо подобно:

header.tpl

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

съдържание.tpl

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

долен колонтитул.tpl

    </body>
</html>

Тогава можете просто да накарате smarty да извиква content.tpl винаги и да предава действителното съдържание на тялото през $content.

Както казах обаче, не съм експерт, така че синтаксисът може да е изключен и може да има по-„правилен“ начин да се направи това, но мисля, че идеята е налице.

Надявам се това да помогне.

person rgin    schedule 29.07.2013

Трябва да използвате синтаксиса {extends}, за да се възползвате от наследяване на шаблон.

Започнете с основния шаблонен файл (ще го наречем template.php). Този файл ще включва вашия код на горния и долен колонтитул и ще посочи местоположението на основното съдържание (и всички други блокове от код на шаблона, които искате да посочите, като отстрани например).

(Използвам наистина обикновен HTML тук, само за примерни цели. Моля, не кодирайте по този начин.)

template.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}
person Aken Roberts    schedule 02.08.2013