Ищу шаблонизатор, умеющий работать с мастер-детейл данными

oracloid

совсем кукус
Ищу шаблонизатор, умеющий работать с мастер-детейл данными

Хай.
Решил переводить отчетность на PHP, и думаю как бы это получше сделать.
Отчеты большие, многоуровневые мастер-детейл, сотни тысяч записей.

Для начала мне нужно определиться с шаблонизатором, потому что наши разработчики отчетов не знают и не должны знать PHP, и вообще хочется разделить sql и шаблон. В идеале я вижу это так: разработчик подключает в свой файл модуль с объектом-движком, и вызывает несколько его методов, в которых передает параметры, пишет селекты, задает связи между рекордсетами, и регистрирует функции событий и вычисляемых полей (ну тут уж базовые знания пхп, конечно, понадобятся).

Я кроме Смарти ничем не пользовался.
Там мы сначала выбираем все нужные данные из базы в массивы, биндим их на внутренние переменные Смарти, и затем вызываем метод, который запускает скомпилированный шаблон, и все эти данные из массивов вставляет в нужные места.

Такой способ с массивами мне не подходит. Нужно чтобы:
1) при каждой итерации по записям мастер-блоков делались селекты в детейл-блоках;
2) данные фетчились в том месте, где они реально используются, чтобы не захламлять память;
3) была возможность регистрации пользовательских callback-функций (при проходе по данным).

Посоветуйте, пожалуйста, шаблонизатор, который поможет организовать такую схему!
Вообще, буду благодарен за любые полезные мысли по теме.

З.Ы.
Сейчас это делаем на JSP, с подключением движка Oracle Reports. Кодировать почти не нужно, отчеты разрабатываются легко и быстро, и все было зашибись, пока не появились мега-отчеты. Памяти стало реально не хватать. Выделили уже кучу, все равно мало. Больше просто нет, сервер очень нагруженный.
Код оракловой библиотеки закрыт, отладки нет, тормозит, память жрет до двух гиг на процесс и все равно падает.
Короче, достала меня эта джава!!!
 

StUV

Rotaredom
Короче, достала меня эта джава!!!
кто вам сказал, что у пхп нет проблем с памятью ?

я бы порекомендовал забить на пхп и оптимизировать ваш java-код

-~{}~ 13.12.07 19:07:

зы:
лечить утечки памяти увеличением оперативки сервера это конечно тоже метод, но очень недальновидный... ;)
 

Alexandre

PHPПенсионер
кажется мне, что всю память сжирает Oracle Reports.
Нужно чтобы:
1) при каждой итерации по записям мастер-блоков делались селекты в детейл-блоках;
2) данные фетчились в том месте, где они реально используются, чтобы не захламлять память;
3) была возможность регистрации пользовательских callback-функций (при проходе по данным).

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

в настоящее время я работаю над DataAccessLevel. Этот модуль частично реализует функции логики БД. Но есть пока черновые наработки.
 

Alexandre

PHPПенсионер
есть, осталось только доработать DataSet'ы и DataGrid'ы "да времени на все проекты не хватает"
ну и еще протестировать и пропиарить его надо, чтоб в следующий раз на форуме был бы ответ "Да есть такое решение..."
 

oracloid

совсем кукус
Автор оригинала: WP
Покури компоненты.
А нельзя ли чуть конкретней? Хотя бы пару слов, которые можно использовать в поисковом запросе?

Автор оригинала: StUV
кто вам сказал, что у пхп нет проблем с памятью ?

я бы порекомендовал забить на пхп и оптимизировать ваш java-код

-~{}~ 13.12.07 19:07:

зы:
лечить утечки памяти увеличением оперативки сервера это конечно тоже метод, но очень недальновидный... ;)
Может в ПХП и есть утечки, но таких огромных я не встречал.
Для того и нужен свой движок, чтобы контролировать этот процесс.

А оптимизировать код я не могу, потому что использую оракловую библиотеку тегов, которая идет без исходников в составе апликейшн сервера, причем практически без докуметации.
Только кратенькое описание тегов и пример использования.
У меня нет никакого "своего" джава-кода.

Память джава-машине выделяли админы, в попытке хоть как-то решить проблему. Помогает, но не надолго. После рестарта системы все хорошо, а потом заходит толпа пользователей и все....

Но два гига на процесс, по моему неплохо, не так ли? ПХП, думаю, этого хватило бы на что угодно!
Причем Репортс как раз не пихает все в массив, он честно делает вложенные подзапросы и фетчит курсор построчно в месте вызова. И куда у него только все уходит?

Автор оригинала: Alexandre
кажется мне, что всю память сжирает Oracle Reports.
Он самый.
JSP-отчет представляет собой файл с заголовком, в котором инклюдится *.jar Oracle Reports, затем идет секция xml с селектами и pl/sql, и затем уже html с репортсовыми тегами.
Нет возможности подебажить или как-то повлиять на процесс построения отчета.
Просто видишь на экране OutOfMemory и все...


Благодарю всех за ответы.
Чувствую, придется брать что-то не шибко навороченое за основу, и курочить.
 

fixxxer

К.О.
Партнер клуба
может, я чего-то не понял, но в принципе все это делается даже на голом php :)
ну или на смарти, никто не мешает использовать свои компоненты которые будут дергать какие угодно коллбэки
 

WP

^_^
Поюзай Quicky, там можно общаться с объектами аля PHP т.е. делаешь делаешь класс который всю работу с БД делает (заточенный ORM), и assign'ишь в шаблон, а далее любые операции производишь. В Смарти с этим проблемы, т.к. компилятор г.
Либо сделай компонентами, но это по сути те же яйца только сбоку (в варианте с компонентами меньше гибкости).
 

oracloid

совсем кукус
Автор оригинала: fixxxer
может, я чего-то не понял, но в принципе все это делается даже на голом php :)
голый ПХП это хорошо, но наши разработчики отчетов его не знают.
им нужно дать что-то предельно простое в использовании.

Автор оригинала: fixxxer
ну или на смарти, никто не мешает использовать свои компоненты которые будут дергать какие угодно коллбэки
насколько я понимаю, если выполнить требование 1) из первого поста, то дальше все будет уже проще.
и колбэки, и фетч в месте вызова прикрутить уже проще.
не подскажете как это реализовать в смарти: чтобы селекты выполнялись каждый раз, в начале очередной итерации секции, используя в качестве условий значения из внешних секций и т.п.?
 

fixxxer

К.О.
Партнер клуба
смысл в целом такой
http://smarty.php.net/manual/en/tips.componentized.templates.php

далее читать http://smarty.php.net/manual/en/plugins.php

-~{}~ 14.12.07 13:31:

но кстати правильная реализация purephp-шаблона будет ничуть не хуже по читабельности. а то и лучше. грубо говоря что-то в этом роде - есть некий класс, который инициализирует все что надо и в методе инклюдит "шаблон", там делаем что-то вроде
PHP:
заголовок
<? foreach ($this->getOuterData() as $outer) { extract($outer) ?>
ID=<?=$id?>
Title=<?=$title?>
   <? foreach($this->getInnerData() as $inner) { extract($inner) ?>
       Subtitle=<?=$subtitle?>
       Price=<?=$price?>
   <? } ?>
<? } ?>
методы get* возвращают ArrayIterator-ы, в которых и предусмотрена последовательная обработка итераций.
 

oracloid

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

purephp-шаблон - неплохо, конечно, но нужно будет потом обучать людей.

подпишу ка я лучше Smarty_Compiler.class.php, добавив свои теги.
будет специальный тег для секции, и пусть там генерится сразу все, что нужно.
место врезки - function _compile_tag($template_tag).
вроде там все просто на первый взгляд, и подводных камней пока не вижу.
 

StUV

Rotaredom
но нужно будет потом обучать людей
просто поверте, что синтаксис смарти ничем не проще синтаксиса пхп

ПХП, думаю, этого хватило бы на что угодно!
странное заблуждение - какая разница на чем написан софт?
утечки памяти могут быть в пхп-коде и 2Г - не так много =)

но... отсутствие исходников - веский аргумент

зы
в начале решил, что у вас есть нормальные java-разработчики - поэтому "непонялюмора" в том, что вы заставляете их писать на пхп =)))
 

oracloid

совсем кукус
WP
обоснуй.

версии я в дальнейшем обновлять не собираюсь.

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

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

StUV

Rotaredom
oracloid
по поводу утечек памяти... у меня в одном проекте был пхп-демон, который вываливается через 3-4 часа работы из-за нехватки гига памяти
пофиксить утечки так и не удалось - сделали "систему флагов" для переобработки "недовыполненных" заданий, скрипт запускается под supervise и при падении просто рестартуется и продолжает работу с того места где выпал, заново "пожирая" оперативку.... так что советую на пхп особо не надеяться и заложить в планы/архитектуру возможность утечек памяти и необходимость оптимизации скриптов в конце разработки
 

oracloid

совсем кукус
StUV
ок, учту.
но понадеяться мне все равно больше не на что :)
 

Alexandre

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

-~{}~ 14.12.07 16:05:

по поводу утечек памяти... у меня в одном проекте был пхп-демон, который вываливается через 3-4 часа работы из-за нехватки гига памяти
пхп не предназначен для демонов

-~{}~ 14.12.07 16:07:

пофиксить утечки так и не удалось
StUVа как их вычисляли? valgrind использовали?

-~{}~ 14.12.07 16:08:

любой демон надо проверять на утечки памяти, а то никакой оперативки не хватит.

-~{}~ 14.12.07 16:10:

Сейчас это делаем на JSP, с подключением движка Oracle Reports. Кодировать почти не нужно, отчеты разрабатываются легко и быстро, и все было зашибись, пока не появились мега-отчеты. Памяти стало реально не хватать. Выделили уже кучу, все равно мало. Больше просто нет, сервер очень нагруженный.
Код оракловой библиотеки закрыт, отладки нет, тормозит, память жрет до двух гиг на процесс и все равно падает.
Короче, достала меня эта джава!!!
думаю, найти замену Oracle Reports, что-то такоеже, но мененее ресурсоемкое.
 

oracloid

совсем кукус
Автор оригинала: Alexandre
как я понял нужен визуальный построитель отчетов типа OraReporter или фреймворк заменяющий его.
нет, большинство отчетов - сохраненные в хтмл файлы ворд, ексель.
поднимаются после построения также в ворд, ексель (при помощи content-type, content-disposition)
также немного pdf.

Автор оригинала: Alexandre
думаю, найти замену Oracle Reports, что-то такоеже, но мененее ресурсоемкое.
эти системы будут жить параллельно.
уж очень много всего на репортсе сделано.
 

StUV

Rotaredom
пхп не предназначен для демонов
это отдельная тема
по ней много споров было
есть демон, с работой справляется отлично
зачем переписывать его на чем-то другом ?

StUVа как их вычисляли? valgrind использовали?
все использовали
там нетривиальные объектные структуры и изначально много ссылочных рекурсий по графу объектных связей
часть утечек пофиксили, на остальное времени просто нет (задачу отложили - как-нить я до нее все-таки доберусь =))
 
Сверху