Интеграция 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;
    }
}

Это всегда работало для меня, но теперь я пробую умный, и я не мог в жизни понять, как заставить его работать так, как этот.

Если бы кто-нибудь мог указать мне правильное направление. Это было бы здорово.

PS. Извиняюсь, если на этот вопрос уже был дан ответ, я гуглил это последние 2 часа и ничего не нашел. Мои навыки работы с PHP в лучшем случае средние.


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


Ответы (2)


Я не эксперт, но мне пришлось пройти через это не так давно. Я сделал что-то вроде этого:

заголовок.tpl

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

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

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

нижний колонтитул.tpl

    </body>
</html>

Тогда вы могли бы просто всегда вызывать 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