2013-07-29 6 views
0

Я реализовал Smarty на моей установке CI с помощью этого урока: http://www.coolphptools.com/codeigniter-smartyCodeigniter + Smarty интеграции, верхний/нижний колонтитул шаблонного

Он отлично работает, за исключением того, что верхние и нижние колонтитулы нагружены, включая файлы в шаблоне ,

т.е.

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

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

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

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

ответ

3

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

header.tpl

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

content.tpl

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

footer.tpl

</body> 
</html> 

Тогда вы могли бы просто Smarty вызов content.tpl всегда и передавать фактическое содержимое тела через $content ,

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

Надеюсь, что помогает.

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'} 
3

Вы должны использовать синтаксис {extends} воспользоваться template inheritance.

Начните с файла базового шаблона (назовем его 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} 
Смежные вопросы