Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вопрос по шаблонизатору
 
 автор: Дмитрий Смаль   (02.07.2010 в 00:20)   письмо автору
 
 

Здравствуйте!

Счас играюсь с шаблонизатором и пробую разные идеи.

Такой вопрос

есть функция которая получает массив данных и возвращает нтмл шаблон с этими данными
function html_array ($m,$q) {
    ob_start(); // echo to buffer, not screen
    include (ROOT_DIR.'includes/'.$m.'.php');
    return ob_get_clean(); // get buffer contents     
}

например на странице выводится список 10 новостей, получается include делается 10 раз

есть ли решение чтобы include (или что-то другое) делать один раз и в функцию передавать и его значение?

к примеру пробовал
eval(file_get_contents(ROOT_DIR.'includes/'.$m.'.php'))

но тогда <?php надо в шаблонах убирать что делает его очень неудобным и негибким

кстати вот на личном опыте убедился что если сайт небольшой и шаблонов мало то лучше их всех загнать в одну функцию и вызывать через case или ifelse
(по цифрам у меня общий вес шаблонов был до 30 килобайт и их количество до 30 - это работает быстрее чем разбить шаблоны на 30 файлов и нужные инклудить)

  Ответить  
 
 автор: sms-send   (02.07.2010 в 00:29)   письмо автору
 
   для: Дмитрий Смаль   (02.07.2010 в 00:20)
 

> но тогда <?php надо в шаблонах убирать что делает его очень неудобным и негибким

//<?

eval('?>'.file_get_contents(ROOT_DIR.'includes/'.$m.'.php'))

  Ответить  
 
 автор: Дмитрий Смаль   (02.07.2010 в 00:34)   письмо автору
 
   для: sms-send   (02.07.2010 в 00:29)
 

да не
у меня шаблоны такого плана
<div class="page_text">
    <h1><?=$q['name']?></h1>
    <?=$q['text']?>
</div>

получается при вызове функции оно их сразу на экран выводит а я же в переменную сохраняю
поэтому счас при инклуде ob_start(); использую

  Ответить  
 
 автор: sms-send   (02.07.2010 в 00:40)   письмо автору
 
   для: Дмитрий Смаль   (02.07.2010 в 00:34)
 

<?

function html_array ($m,$q$template) { 
    
ob_start(); // echo to buffer, not screen 
    
eval('?>'.$template);
    return 
ob_get_clean(); // get buffer contents      
}

$template file_get_contents(ROOT_DIR.'includes/'.$m.'.php');
$html html_array ($m,$q$template);


UPD.
Или $m это имя шаблона... тогда в функции оно уже не нужно.

А зачем нужно сохранять результат обработки шаблона в переменную?

  Ответить  
 
 автор: Дмитрий Смаль   (02.07.2010 в 00:52)   письмо автору
 
   для: sms-send   (02.07.2010 в 00:40)
 

спасибо за ответ, завтра уже буду пробовать

да $m это имя шаблона а $q - массив данных (почти всегда из скл запроса, но не всегда)

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

  Ответить  
 
 автор: psychomc   (02.07.2010 в 11:02)   письмо автору
 
   для: Дмитрий Смаль   (02.07.2010 в 00:20)
 

а что может ваш шаблонизатор?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования