сборка страницы из нескольких шаблонов

jenia

Новичок
Может не стоило лезть в старубю тему, но всё же...
У меня такая же ситуация:
Есть основной шаблон - index.tpl;
есть шаблон новостей (шаблон блока новостей, которые выводятся на каждой странице) - news.tpl;
есть файл - index.php, который достаёт информацию из источника (базы или файла) и передаёт её в основной шаблон (index.tpl);
есть файл - news.php, который достаёт новости из базы;
Код:
index.php:
PHP:
require_once('Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = '/templates/';
$smarty->compile_dir = /templates_c/';
$smarty->config_dir = '/configs/';
$smarty->cache_dir = '/cache/';

//выбираем из базы информацию и помещаем её в $text

$smarty->assign('text', text);
$smarty->display('index.tpl');
news.tpl:
PHP:
<br>{$news}<br>
index.tpl:
PHP:
{$text}<br>
{include file='news.tpl'}<br>
news.php:
PHP:
//выбираем информацию из базы и помещаем в переменную $news
Как в этой схеме в news.tpl должна передаватся переменная $news из news.php?
 

jenia

Новичок
$smarty->assign используется для присвоения значений в шаблонах.
У меня вот какая ситуация: пользователь обращается к index.php. Файл index.php вытягивает из базы данные и передаёт в index.tpl, который подключает news.tpl. А где должен быть вызов news.php? И каким образом?
 

zerkms

TDD infected
Команда форума
а как твой index.php обычно определяет что в этот раз нужно подключить news.php?
 

jenia

Новичок
index.php вообще не должен определять подключения news.php как я понимаю. news.php всего навсего выдаёт небольшой блок новостей, который должен размещатся на всех страницах. Если я захочу убрать этот блок со всех страниц, так что мне из всех файлов (index.php, about.php и т. д.) вырезать участки кода?

-~{}~ 29.05.06 19:49:

Вообще шаблоны я начал изучать по книге "РНР 5" Котерова, Костарева. Так там описан шаблонизатор (построенный на основе смарти в том числе). В этом шаблонизаторе был тег {t_component}...{/t_component}, который добавлял в шаблон не статический файл (как {include}), а непосредственно обработчик компонента, который доставал нужные данные и возвращал их.
В моём случае таким обработчиком может быть news.php.

-~{}~ 29.05.06 20:01:

Как это можно осуществить в Смарти
 

Фанат

oncle terrible
Команда форума
чювак.
ты определись сначала - с чем у тебя проблема.
а потом отнимай у людей время своими вопросами.

Если ты не знаешь, как построить своё приложение, то при чём тут смарти?

подумай хорошенько, определи действительную проблему, отсеки от неё всё лишнее и задай вопрос по-человечески.
 

jenia

Новичок
Проблема такова: как в одном шаблоне (index.tpl) собрать данные из нескольких файлов обработчиков и вывести на страницу? То есть, на страницу должны быть выведены основной текст (получается из index.php) и блок новостей (получается из news.php).
 

jenia

Новичок
Ты предлагаешь инклюдить news.php в index.php? А если будет переделыватся дизайн сайта и в новом дизайне не окажется блока новостей на странице index.php? Тогда получается придётся править и index.php вместе с файлом шаблона index.tpl?

-~{}~ 29.05.06 21:44:

Как бы ты сделал, если на многих страницах тебе нужно было бы выводить одинаковые динамические блоки? Например: блок новостей, опрос, котировку валют...
В документации к смарти указана возможность составных шаблонов (http://smarty.php.net/manual/ru/tips.componentized.templates.php). Т. е. пишешь свою функцию и кидаешь в папку plugins. Это единственная возможность организовать построение страницы из нескольки динамических блоков?
 

Фанат

oncle terrible
Команда форума
ох уж этот Котеров с его pull-шаблонами.
думаю, можно сделать так, как ты хочешь
но я бы сам делал по-старинке: нужна инфа - инклюжу код, который определяет нужные переменные
 

jenia

Новичок
Но если тебе придётся менять дизайн (т. е. файл index.tpl), то получается придётся менять код файла index.php? Правильно я понимаю?
 

dark_lord

Новичок
Я бы тоже вложил news.php в index.php. В news.php выбираются новости из базы данных и присваиваются $smarty->assign(). Убрать include "news.php" из index.php займет 1-2 секунды.
 

zerkms

TDD infected
Команда форума
jenia
если уж тебе так хочется - пройди по ссылке в подписи и в архиве найди и посмотри файл mzz/system/template/plugins/function.load.php
 

jenia

Новичок
zerkms
Ссылка не работает

-~{}~ 31.05.06 22:09:

Ссылка заработала.
Разобрался. По ссылке находится плагин, который подключает нужный модуль. Всё понятно. Очень удобно. Всем спасибо.
 
Сверху