Целесообразность использование буферизации вывода ob_start() в скрипте

alex_0086

Новичок
Всем привет. У меня вопрос. Пишу маленький проект типа своей CMS (просьба ненакидываться сразу). Схема работы такая, есть шаблон в папке и есть какой-нибудь компонент (например компонент ZAKAZ) и когда пользователь переходит по ссылке localhost/zakaz/ то автоматом обрабатывается скрипт zakaz.php и весь результат работы сохраняется в памяти и в переменной $rezult. Затем в шаблоне строчка <?=$rezult?> выводит все что сохранилось в переменной. Пример кода:
1. Пользователь набирает localhost/zakazy/
2. грузится файл index.php

PHP:
$show_component = getStr ("name"); # получаю имя компонента (zakazy)
$component = new component_class (); # создаю класс

ob_start(); // Начинаю буферизацию вывода
$component->show ($show_component); # выполняю действия в компоненте например формирую список заказов
$rezult = ob_get_contents(); 
ob_end_clean(); // Останавливаю буферизацию и очищаю буфер вывода
3. Подключаю файл шаблона template/index.php

//и в нем такие строчки
PHP:
............
<div>
<?=$rezult?>
</div>
...........
Вопрос: Как вы думаете система реализации сама удобная? или есть альтернативы? (Для меня она удобна, но я боюсь ввиду не имения большого опыта вдруг окажеться что ob_start(), страшно грузит сервер и т.д.)
Заранее спасибо.

P.S. Ну вот я зарегистрировался впервые на форуме Ура!!)).
 

С.

Продвинутый новичок
Все нормально. Для фреймворка без ob_ никак не обойтись.
 

Absinthe

жожо
alex_0086 буферизацию включай не перед запуском контроллера, а перед выводом шаблона.
 

AmdY

Пью пиво
Команда форума
здесь непонятно, почему $component->show() не возвращает строку, сджеланную конкатацией вместо echo или с помощью той же буферизации.
 

Фанат

oncle terrible
Команда форума
Для отображения "компонента" никакая буферизация не нужна.
А нужен, на самом деле - шаблон.

Никакого своего шоу у компонента быть не должно.
Компонент должен только возвращать данные.
Отображением должен заниматься специально обученный код.

В переменной $rezult должны лежать данные для шаблона.
Вместо <?=$rezult?> должно быть <? include шаблон?>
 

alex_0086

Новичок
alex_0086 буферизацию включай не перед запуском контроллера, а перед выводом шаблона.
Я немного изменил в метод show (), я добавил тоже буферизацию. И вот что получилось
PHP:
$show_component = getStr ("name"); # получаю имя компонента (zakazy)
$component = new component_class (); # создаю класс
$component->show ($show_component); # выполняю действия в компоненте например формирую список заказов

ob_start(); // Начинаю буферизацию вывода
include ("shablon.php"); 
$rezult = ob_get_contents(); # вывожу все в переменную
ob_end_clean(); // Останавливаю буферизацию и очищаю буфер вывода 
echo $rezult
Т.е. теперь у меня две буферризации. Такое расположение не будет сильно грузить сервер?
 

alex_0086

Новичок
Я использовал буферизацию что бы при написании компонентов было удобно. Например в папку компонента закидываем файл list.php и в нем примерно такой код:
PHP:
$client_id = getInt ("cid");
$client_danye = $msql->request(Select * from `client` where `client_id` = $client_id);
foreach (client_danye as $key=$val)
{
    echo "$key=$val"
}
и т.д. т.е. просто свободное написание кода.
 

WMix

герр M:)ller
Партнер клуба
зачем тебе буфер?
PHP:
$show_component = getStr ("name"); # получаю имя компонента (zakazy)
$component = new component_class (); # создаю класс
$component->show ($show_component); # выполняю действия в компоненте например формирую список заказов
include ("shablon.php");
чем тебе так хуже?
alex_0086 буферизацию включай не перед запуском контроллера, а перед выводом шаблона.
хм яб сказал наоборот, в zend к примеру любой вывод в controller будет показан после view
 

alex_0086

Новичок
Для отображения "компонента" никакая буферизация не нужна.
А нужен, на самом деле - шаблон.

Никакого своего шоу у компонента быть не должно.
Компонент должен только возвращать данные.
Отображением должен заниматься специально обученный код.

В переменной $rezult должны лежать данные для шаблона.
Вместо <?=$rezult?> должно быть <? include шаблон?>
А можно пример? К примеру есть переменная $rezult и как в ней сохранить результат работы компонента без ob_start?
 

alex_0086

Новичок
зачем тебе буфер?
PHP:
$show_component = getStr ("name"); # получаю имя компонента (zakazy)
$component = new component_class (); # создаю класс
$component->show ($show_component); # выполняю действия в компоненте например формирую список заказов
include ("shablon.php");
чем тебе так хуже?

хм яб сказал наоборот, в zend к примеру любой вывод в controller будет показан после view
Вот я не могу понять как например все действия которые делает компонент сохранить в переменную. Например в $rezult у меня отображается то, что выводится в body шаблона.
 

alex_0086

Новичок
не нужно так далать, или пиши просто, или пиши правильно!
В $component->show ($show_component); там просто происходит include ($show_component); Но если сделать так то если в компоненте например есть строке echo $client_name; то она сразу выведится в самом начале шаблона.
 

scb

Новичок
В $component->show ($show_component); там просто происходит include ($show_component); Но если сделать так то если в компоненте например есть строке echo $client_name; то она сразу выведится в самом начале шаблона.
Ну так Вам же подсказывают, что в компоненте не должно быть:
PHP:
echo $client_name;
 

WMix

герр M:)ller
Партнер клуба
если слово компонетн подразумевает view то без вопросов, собрал в буфер выкинул когда нужно... если твоя вью это шаблон, то ты будешь str_replace длинного стринга шаблона сразу запоминать в переменной
PHP:
$template = file_get_contents("template.tpl");
$template = str_replace("[key]",$val);
...
echo $template;
 

WMix

герр M:)ller
Партнер клуба
В $component->show ($show_component); там просто происходит include ($show_component); Но если сделать так то если в компоненте например есть строке echo $client_name; то она сразу выведится в самом начале шаблона.
это делать не нужно!
 

WMix

герр M:)ller
Партнер клуба
ну если тебе легче, зачем ты нас спрашиваешь? мне лично так тяжелее!
 

scb

Новичок
Я знаю. Но это не удобно. Конкатация это хорошо. Но легче бывает если ты пишешь в компоненте как в обычном скрипте.
тогда не называйте его компонентом. Компонент в крайнем случае должен формировать html, лучше если только массив, и выкидывать все это в вид нужно в контроллере. В виде принимаете компонент и выводите на экран.
 
Сверху