SMARTY: Список подстановок

betik

Новичок
SMARTY: Список подстановок

Возможно вопрос подробно или хотя бы просто упоминается в документации. Я не нашёл. Прошу ткнуть, если это так.

Вопрос:
Может ли Смарти проанализировать шаблон и выдать список подстановок?

например шаблон номер1:
<html>
<body>
{data1}
some text here
{data2}
some text here2
{data3}
</body>
</hrml>

наблон номер 2:
<html>
<body>
{data1}
some text here
{data2}
</body>
</hrml>

В скрипт передаётся имя шаблона.
Чтобы получить каждый блок {data} , допустим, необходимо подключиться к оч. тормозному и слабому MySQL серверу.

Сейчас, я делаю блоки по максимому, то есть в любом случае подготавливаю data1, data2 и data3.

Можно ли как-либо узнать, используется ли в текущем шаблоне data1 или data2 или data3 ?

-~{}~ 14.04.05 16:18:

up? или никто не знает?...
 

t3[0one]

Новичок
ты же их из пхп кидаешь в шаблон. вот от туда и узнавай +)),
а вообще в smarty есть оператор if
 

betik

Новичок
Вопрос:
Как узнать, какие подстановки содержатся в файле шаблона средствами smarty ?

Пример:


шаблон номер1:
<html>
<body>
{$data1}
some text here
{$data2}
some text here2
{$data3}
</body>
</hrml>

шаблон номер 2:
<html>
<body>
{$data1}
some text here
{$data2}
</body>
</hrml>

Мои скрипт подготавливает данные для $data1, $data2, $data3 , но во втором шаблоне $data3 не задеёствована. Как моему скрипту узнать об этом?
 

betik

Новичок
Узнать средствами ПХП.
Да подготавливает переменные, причём нет гарантии что все переменные используются в шаблоне. А я хочу чтобы такая гарантия была и получить такую гарантию я хочу средствами функций и/или метдов Смарти, а не писать свой анализатор шаблона на предмет поиска подстановок.

-~{}~ 15.04.05 19:26:

Автор оригинала: Panchous
хм....
Забавный ты...
 

t3[0one]

Новичок
ман читал smarty? Димыч те средствами смарти написал )
Код:
{if $data eq ""}
   Модуль отсутсвует! или просто ни чего
{else}
    Welcome Sir.
    {$data}
{/if}
ИМХО тебе надо пересмотреть архитектуру )
 

betik

Новичок
Пересмотр архитектуры пока не рассматривается, финансирования нет на это. НО никто не понял о чём идёт речь.

Ещё раз:

Шаблон 1 (tpl1.tpl):

{$data1}
{$data2}
{$data3}

Шаблон 2 (tpl2.tpl):

{$data1}
{$data2}


index.php

require 'Smarty.class.php';
$smarty = new Smarty;
$smarty->template_dir = 'templates';
....

Function GetData($any)
{
...коннект то очень тормозной сервер, оч. слрожный запрос
return обработка_очень_сложного_запроса;
}

$smarty->assign("data1",GetData(1));
$smarty->assign("data2",GetData(2));
$smarty->assign("data3",GetData(3));


if(!одному Богу известно что)
$smarty->display('tpl1.tpl');
else
$smarty->display('tpl2.tpl');

При этом получается, что возможна ситуация, когда подготавливаются избыточные данные (GetData(3)).

Что я хочу:

index.php

require 'Smarty.class.php';
$smarty = new Smarty;
$smarty->template_dir = 'templates';
....

Function GetData($any)
{
...коннект то очень тормозной сервер, оч. слрожный запрос
return обработка_очень_сложного_запроса;
}

if(!одному Богу известно что)
$replaces=$smarty->некая_стандартная_функция_анализа_для_смарти_написанного _на_php('tpl1.tpl');
else
$replaces=$smarty->некая_стандартная_функция_анализа_для_смарти_написанного _на_php('tpl2.tpl');


if(IsSet($replaces['data1'])) $smarty->assign("data1",GetData(1));
if(IsSet($replaces['data2'])) $smarty->assign("data2",GetData(2));
if(IsSet($replaces['data3'])) $smarty->assign("data3",GetData(3));

if(!одному Богу известно что)
$smarty->display('tpl1.tpl');
else
$smarty->display('tpl2.tpl');
 

t3[0one]

Новичок
всё ИМХО и как мог так и пояснил :
передаёшь переменные в массиве имена шаблонов. а там
Код:
{section name=a1 loop=$date}
{include="/dir/$date[a1]"}
{/section}
не то ? +)
я сделал типа когда пишешь блок или модуль .... у меня есть класс под смарти написанный.. специально
итог пишу :
if ($biaka=='byka'){
$mod_tpl='byka';
else{
$mod_tpl=biaka;
}
$lib->compilemod('$name_mod','$mod_tpl');//в пхп говорю типа от модуля $name_mod надо скомпилить $mod_tpl...

в итоге у меня судя по настракам в базе $nameX_mod (типа куда шаблон от $nameX_mod вставлять с какой стороны и тп) у меня собирается имена шаблонов ( неизвестно скока их может быть) в три массива(типа модуль и две стороны )..расфасованные согласно настройкам в базе ...
и всё +)) ... дальше логика согласно выше представленному варианту
Код:
{section name=a1 loop=$date}
....
{/section}
----
сори есле ... как объеснить в двух словах от себя))
Это не совет это как делаю я ... с подобными проблемами больше на сталкиваюсь....
ко всему не сложно будет делать детальное кеширование
 

betik

Новичок
Ну, такой шаблон попробуй объясни дизайнеру... Да и не универсально это...
Хотя интересный вариант...
 

t3[0one]

Новичок
минус в том что допустим блоки собераются друг под другом.. впринципе это вся не универсальность... но на самом деле можно придумать разные настандартные варианты для определённых целей ) и очень удобно работать, када пишешь модуль или блок )
немного smarty тегов не повредят дизайнеру +)
зато проблем не возникает=)
 

betik

Новичок
Дизайнер человек, которые не понимает конструкции if ...
Принципиально.
Не понимает, что если он сядет в самолёт, то он доберётся до Лондона из Мск быстрее, чем на поезде (утрирую)
 

t3[0one]

Новичок
не путай дизайнера и верстальщика.....я чуток не правельно вырозился постом выше... имхо...без этого не как даже есле это будет не три строчки смарти а {$data} одно и тоже.. как приподнесёшь...
дизайнер он нарисовал ...может даже и сверстал в одну страничку Html ... имхо как я понимаю о дизайнере...но это уже не по теме =)
 

Arikon

Новичок
решение: написать свой парсер шаблона (в 5 строк), который будет выбирать из шаблона по regexp все переменные

пример:
PHP:
function get_template_vars($tpl) {

 $tpl_content = implode('', file($tpl));
 $cut_pattern = array('/{literal}.*?{\/literal}/', '/{\*.*?\*}/');
 $tpl_content = preg_replace($cut_pattern, '', $tpl_content);
 preg_match_all('/\$([\w\d]+)/', $tpl_content, $vars, 2);

 $all_vars = array();
 foreach ($vars as $v){
  $all_vars[] = $v[1];
 }

 return array_unique($all_vars);
}
 

trigger

Guest
betik
Извини, смарти все-таки шаблонизатор, хоть и самый крутой. Его разработчики считали, что такими проблемами, как у тебя должен заниматься программист, а не верстальщик.
Совет -- пересмотри архитектуру, чтобы такой потребности не возникало.

>> Пересмотр архитектуры пока не рассматривается, финансирования нет на это.

Значит пробей. Ты ведь пишешь качественные программы, не так ли?
 

Мутник

Новичок
trigger

не уж то там так сложно все поменять (пару строк кода)?? это ведь тебе самому в дальнейшем куу проблем решит??? не упирайся... а послушай, что "старшие" говорят...
 
Сверху