2013-03-13 3 views
0

Это немного трудно объяснить, что мой вопрос о том, но я собираюсь попробовать :)CodeIgniter - Smarty - Как извлечь шаблоны в мастер-шаблон из одного места в CodeIgniter

В пользовательских проектах, где я использую 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 я могу получить доступ к about.tpl с помощью {$ содержание} Это {$ содержание} переменная будет меняться для каждой страницы, так как index.php является страницу, на которую будут отправляться все данные, запросив страницу в моем приложении.

Вопрос: Есть ли файл в CodeIgniter, который доступен на каждой странице, чтобы я мог создать что-то вроде выше? Сейчас я должен использовать этот фрагмент кода (второй пример) в каждой функции моего контроллера, и это кажется неэффективным.

Конечно, мне нужно установить $ data ['tpl_Name'] в каждой функции, но это не проблема.

Спасибо.

+0

Рассматривали ли вы расширение основного контроллера? –

+0

То, как я это сделаю, переводит всю информацию о странице в файл CSV (т. Е. Sitemap.csv). Затем загрузите файл csv в функцию конструктора в виде массива.Затем вы можете маршрутизировать все запросы страниц к одному методу, динамически устанавливать шаблоны на основе uri (как вы это уже знаете), но также запрашивать информацию о странице из массива sitemap.csv таким же образом. – Jeemusu

ответ

1

Существует несколько способов интеграции библиотеки шаблонов в CodeIgniter, и многое зависит от того, как вы хотите связать свои шаблоны вместе. Следующие могут подходить вам хорошо, или, может быть, просто указать вам в правильном направлении. Это не единственное решение для шаблонов Smarty/CI, но это тот, с которым я знаком.

I wrote some code to integrate Smarty into CI. Он позволяет использовать стандартный способ загрузки просмотров - $this->load->view('view', $data) - но вы можете использовать синтаксис Smarty в файлах.

Способ, которым я обрабатывал шаблон «хозяин», находится через Smarty's {extends} (template inheritance docs). Отдельные представления, которые я загружаю, распространяются либо на основной шаблон, либо на другую иерархию, которая ведет к одному.

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> 

page.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, чтобы получить более подробные сведения, но это то, что я делал раньше. :)

Смежные вопросы