Smarty: использование переменных дочернего шаблона

Panchous

Павел
Smarty: использование переменных дочернего шаблона

возможно ли использовать переменную, объявленную в дочернем шаблоне?
Пробовал так:

-------- main.tpl -------------
<h3>{$title}</h3>
{include file="content.tpl"}
-------- main.tpl -------------

-------- content.tpl -------------
{assign var="title" value="myTitle"}
Данные страницы
-------- content.tpl -------------

Не вышло...
Как можно передать переменную в родительский шаблон?

ПС:
Хочется сделать отображение заголовков всех страниц однотипными,
а в на конкретных страницах определять заголовки...
 

Panchous

Павел
Demiurg
пробовал - так тоже не работает!
к тому же выводить заголовок страницы в самом ее конце - не совсем то, что мне надо....
 

Demiurg

Guest
так "не работает" или "выводить заголовок страницы" ?
 

Panchous

Павел
Demiurg
твой пример ничего не выводит ($title - пустой)
Заголовок (<h3>Заголовок</h3>) хочется выводить перед содержимым страницы - см. пост#1 (main.tpl)
 

Demiurg

Guest
Если хочеться выводить до содержимой страницы то и определять его надо до, а не после. Вобще подобный вещи обычно задаются в скриптах.
 

Panchous

Павел
Demiurg
Есть 2 вида страниц:
1. с динамическим содержимом (данные берутся из БД - на каждую такую странуцу свой скрипт, который определяет заголовок)
2. простые статические.
Вывод всех страниц с чистым HTML делает один скрипт, сохраняя общее оформление.
При этом в шаблонах таких страниц я раньше каждый раз писал в начале:
<h2>Страничка</h2>
Таких страниц много - и мне понадобилось вскоре править
<h2> -> <h3>
Можно ли вынести внешний вид заголовка в родительский шаблон???
Можно ли передать переменную из дочернего шаблона в родительский?
Если я вкорне неправ - посоветуйте правильное решение.
 

Demiurg

Guest
Можно, например, все общие части вынести в отдельные шаблоны, которые при необходимости подключать а сами тексты перенести в конфиг.
 

Panchous

Павел
Demiurg
ТАМ не тексты - а html-страницы!
может полный пример показать?

main.tpl:
PHP:
<html>
<head><title>{!$title|default:"Title"!}</title></head>
<body>{!include file="body.tpl"!}</body>
</html>
body.tpl:
PHP:
<table>
<tr><td>{!include file="top_level.tpl"!}</td></tr>
<tr><td height="100%">
       <table>
       <tr><td>{!include file="menu.tpl"!}</td>
       <td class="content">{!include file=$content!}</td>
</tr></table>
</td></tr>
<tr><td>{!include file="bottom_level.tpl"!}</td></tr>
</table>
Так вот....
Если идет работа с динамическими данными,
то скрипт news.php, например, вместо $content задает шаблон новостей и заголовок.

А есть скрипт default.php который просто отображает html-страницы (помещает их содержимое вместо $content)
Параметр данного скрипта - имя простого шаблона.
В простых шаблонах находится простой html.
Каждая страница имеет заголовок, например:
simple_page.tpl:
PHP:
 <h3>Simple Page</h3>
page text
 

Demiurg

Guest
для статической странице $title как определяется ?
 

Panchous

Павел
Автор оригинала: Demiurg
для статической странице $title как определяется ?
Никак!
А так как он пустой - использутся по-умолчанию.
(см. main.tpl)

-~{}~ 30.11.04 14:20:

Я хочу получить что-то типа того:

body.tpl:
PHP:
<table> 
<tr><td>{!include file="top_level.tpl"!}</td></tr> 
<tr><td height="100%"> 
       <table> 
       <tr><td>{!include file="menu.tpl"!}</td> 
       <td class="content">
       <h3>{!$page_title!}</h3>
       {!include file=$content!}
       </td> 
</tr></table> 
</td></tr> 
<tr><td>{!include file="bottom_level.tpl"!}</td></tr> 
</table>
simple_page.tpl:
PHP:
{!assign var="page_title" value="Simple Page"!}
page text
что бы выводилось:

Simple Page
page text

(все заголовки простых страниц выводились однообразно)

-~{}~ 30.11.04 14:21:

Итак конкретный вопрос:
Можно ли передавать из дочернего шаблона в родительский переменные, определенные в первом?
 

Demiurg

Guest
Нету в smarty понятия дочерних и родительских шаблонов, есть include, так же как и в php. То есть один кусок куда вставляется в другой и все.
 

Panchous

Павел
Demiurg
Тогда как лучше решить мою задачу?
(надеюсь, я ее понятно изложил)
 

alexhemp

Новичок
Возможно я что-то не понял, но лучше действовать наоборот.

1. Создать шапку и подвал
2. Инклюдить их из скриптов передавая в качестве параметра title

Случай этот описан в документации ;-)

Наоборот боюсь невозможно...

Я лично делаю по другому - передаю в переменной $BODY имя шаблона - тела а в переменной $PAGE.title - заголовок (У меня заголовки страниц формируются из базы). Использую один шаблон в котором описана вся страница, за исключением контента.

В принципе как ты хочешь сделать нельзя, ибо смарти интерпретирует шаблон последовательно, и на момент интепретации уже выполнена подстановка переменных, что "выше" по тексту. Нужно 2 прохода в твоем случае.
 
Сверху