Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Форматирование HTML кода из Delphi   Найти похожие ветки 

 
Piter ©   (2010-03-01 15:18) [0]

Достаточно, на мой взгляд, актуальная задача. Связанная хотя бы с тем, что многие программы имеют возможность работать в качестве сервиса, а значит предполагается внешнее управление. Логично совместить с удаленным управлением. И тут возникает вопрос:

[Собственный клиент] vs [Браузер]

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

А дальше наступает проблема не очень удобных возможностей формирования и форматирования HTML-кода в Delphi подобном языке. Я вижу 2 решения:

1) связка с WEB-языком, например PHP. Дополнительная проблема в наличии интерфейса общения между PHP и Delphi. Все равно между ними будет аля какой-нибудь XML, что в совокупности снижает трудозатраты, но получается какое-то нагромождение... Сама программа - Delphi, чтобы управлять ею надо ставить Apache+PHP со своими проблемами и настройками. Не так уж и кошерно выходит.

2) какое-то расширение Delphi. Скриптовый язык, шаблонизатор. Смысл в том, чтобы удобно генерировать HTML-код, при этом доступ к объектам delphi... Или еще какой вид, не представляю пока.

Собственно, предлагаю подискутировать на эту тему. Уверен, с задачей сталкивалось множество людей. Конечно, в развитых технологиях аля Java EE, .NET и прочее наверняка есть готовые средства решения данной задачи. Но хочется именно в контексте Delphi это обсудить, кто какой путь выбирает.
Для определенности предлагаю считать, что проект маленького-среднего масштаба. Городить особый огород не хочется.


 
Kerk ©   (2010-03-01 15:35) [1]

Никто до сих пор не потрудился сделать для Delphi приличный шаблонизатор?
(я тут не в теме)


 
Palladin ©   (2010-03-01 15:42) [2]

Странно, как то. Желание - сделать удаленное управление приложением, а условия как - написать веб сервер. И причем тут расширение Делфи, что скрывается под понятием "расширение Делфи"? Эксперт? Скриптовый язык - не расширение, просто библиотека/набор библиотек...


 
DVM ©   (2010-03-01 15:45) [3]


> Piter ©   (01.03.10 15:18) 

Смешались в кучу кони, люди, форматирование (?) кода на делфи и управление сервисом через веб


 
DVM ©   (2010-03-01 15:49) [4]


> Piter ©   (01.03.10 15:18) 

Я делаю так:

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

PHP больно геморройно. Да и нафига козе баян? Delphi побыстрее PHP будет да и привычнее.


 
Плохиш ©   (2010-03-01 17:06) [5]


> Piter ©   (01.03.10 15:18)  

WebSnap, Web-Service.


 
Piter ©   (2010-03-01 17:12) [6]

DVM ©   (01.03.10 15:49) [4]
Для этого имеются шаблоны веб страниц в нужные места которых специальный класс-обработчик подставляет значения.


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

%product_name%
%device_list%

в шаблоне и подставлял туда нужные значения. Но один фиг, если тебе нужен.. Ну тот же список устройств, тебе вручную придется составлять таблицу, состояющую из <td> <tr> и прочее. Тебе вручную придется отрабатывать POST / GET запросы. Я уж не говорю про работу по полной, то есть использование всех новых фишек, JS, Ajax и прочее.

DVM ©   (01.03.10 15:49) [4]
Веб сервер может принимать команды и отдавать значения (в виде XML).


XML ты тоже ручками форматируешь по свойствам классов или как-то так?

И еще интересно - зачем нужен свой клиент при реализации WEB-клиента?


 
Piter ©   (2010-03-01 17:15) [7]

Плохиш ©   (01.03.10 17:06) [5]

насколько я помню читал про WebSnap. И сложилось впечатление полной убогости. То есть, с одной стороны, это вроде как фундаментальный механизм, но страницы, которые он генерирует ни в какие ворота не лезут. Просто с точки зрения пользователя это выглядит мега убого.


 
DVM ©   (2010-03-01 17:19) [8]


> Piter ©   (01.03.10 17:12) [6]


> Но поэтому и возникла эта тема, это очень тупой шаблонизатор.

Ну это полностью зависит от тебя. Захочешь, будет умный, захочешь не очень. На PHP шаблонизаторы тоже же людьми написаны. Здесь опыт определенный нужен, а на чем писать PHP или Delphi или C это уже вторично.


> Ну тот же список устройств, тебе вручную придется составлять
> таблицу, состояющую из <td> <tr> и прочее

Делается класс выводящий таблицу. Все оформление через CSS. Как в класс передать исходные данные - другой вопрос. То же для форм, и т.д. Тут целый API нагородить можно. Но я так не делал мне не нужно было. Но сделал бы при необходимости.


> XML ты тоже ручками форматируешь по свойствам классов или
> как-то так?

Ручками. См. выше про таблицу.


> И еще интересно - зачем нужен свой клиент при реализации
> WEB-клиента?

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


 
Медвежонок Пятачок ©   (2010-03-01 17:24) [9]

XML ты тоже ручками форматируешь по свойствам классов или как-то так?

хмл обычно дулают голым. со ссылкой на xsl который лежит соверешенно отделенным от приложения и доступен для редактирования.
плюс ксс конечно прикручивается.

на этом делается визуализация с банитиками.
управление же обычно делается html-страницами-файлами либо тоже через xml + xsl

главное чтобы встроенный веб-сервер умел отдавать дисковые файлы браузеру (xml,xsl,css,html)


 
Piter ©   (2010-03-01 17:26) [10]

DVM ©   (01.03.10 17:19) [8]

ну в общем все понятно. Ты делаешь ручками, я тоже делаю ручками.

Вопрос в том, можно ли более автоматизировать сей процесс, не разрабатывая монстроидальный THTMLGenerator и TMyTemplateParser


 
Медвежонок Пятачок ©   (2010-03-01 17:26) [11]

а форматировать хтмл в коде приложения - занятие унылое.


 
Piter ©   (2010-03-01 17:28) [12]

Медвежонок Пятачок ©   (01.03.10 17:24) [9]

спасибо за пост. Я только не понял какое он имеет отношение к решению сабжевой задачи.


 
Kerk ©   (2010-03-01 17:29) [13]


> Piter ©   (01.03.10 17:28) [12]
>
> Медвежонок Пятачок ©   (01.03.10 17:24) [9]
>
> спасибо за пост. Я только не понял какое он имеет отношение
> к решению сабжевой задачи.

XSLT решает твою задачу просто и элегантно.


 
Медвежонок Пятачок ©   (2010-03-01 17:30) [14]

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

главное как я уже сказал - не поддаться соблазну генерить html код внутри exe (пусть даже супер-шаблонизатором)

используй внешние файлы и все будет легко и приятно


 
DVM ©   (2010-03-01 17:31) [15]


> Медвежонок Пятачок ©   (01.03.10 17:26) [11]


> а форматировать хтмл в коде приложения - занятие унылое.

унылое, но иногда необходимое.


> XSLT решает твою задачу просто и элегантно.

Да, это пожалуй лучший вариант.


 
Медвежонок Пятачок ©   (2010-03-01 17:33) [16]

унылое, но иногда необходимое.

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

и то это не необходимость, а допустимое упрощение.


 
Piter ©   (2010-03-01 17:37) [17]

Медвежонок Пятачок ©   (01.03.10 17:30) [14]

а. То есть, насколько я понял твою идею - внутри exe генерировать XML данные. Их с одной стороны можно использовать для собственного клиента, а можно с помощью XSL трансформировать в HTML-код, который и выдавать браузеру?

Проблема в том, что я ни духом, ни рылом в технологиях XML/XSLT - сколько нужно времени, чтобы въехать?

Нет ли ограничений у технологии? То есть, я например знаю как красиво это написать на HTML ручками, но в XSLT нельзя/сложно написать такую трансформацию из XML, чтобы получить требуемый HTML?


 
DVM ©   (2010-03-01 17:39) [18]


> Piter ©   (01.03.10 17:37) [17]


> Их с одной стороны можно использовать для собственного клиента,
>  а можно с помощью XSL трансформировать в HTML-код, который
> и выдавать браузеру?

Более того этот XML можно трансформировать в другой, например понятный третьей программе.


> Нет ли ограничений у технологии? Т

Есть геморрой с созданием XSLT и если их много разных то большой.


 
DVM ©   (2010-03-01 17:41) [19]

При большом числе разных XSLT как бы не прийти к генерации оных из EXE :) Тогда получим то же самое, но через ж...


 
DVM ©   (2010-03-01 17:43) [20]


> DVM ©   (01.03.10 17:39) [18]


> Нет ли ограничений у технологии?

А ну и браузер должен понимать все это хозяйство.


 
Piter ©   (2010-03-01 17:45) [21]

разные XSLT в каком смысле? Для перекодирования в разные форматы или просто на каждую возможную HTML страницу нужен свой XSLT?


 
Piter ©   (2010-03-01 17:45) [22]

DVM ©   (01.03.10 17:43) [20]

какое хозяйство? Я так понял с помощью движка MSXML, XML файла и соответствующего ему XSL получается HTML файл. Который и подсовывается браузеру, иначе что это за браузер, который не понимает HTML.


 
DVM ©   (2010-03-01 17:47) [23]


> Piter ©   (01.03.10 17:45) [22]

браузеру подсовывает xml в котором есть ссылка на xslt браузер совмещает сам. А как иначе то? Клиенту чистый xml браузеру xhtml ?


 
Kerk ©   (2010-03-01 17:47) [24]


> Piter ©   (01.03.10 17:45) [21]
>
> разные XSLT в каком смысле? Для перекодирования в разные
> форматы или просто на каждую возможную HTML страницу нужен
> свой XSLT?

XSLT - это шаблон. Т.е. сколько вообще типов страниц, столько и шаблонов нужно.


 
Медвежонок Пятачок ©   (2010-03-01 17:49) [25]

въехать на первых порах достаточно всего в пару тройку конструкций

xsl:value-of
цикл foreach
и xsl:apply-templates

это часа полтора.


 
DVM ©   (2010-03-01 17:49) [26]


> Для перекодирования в разные форматы или просто на каждую
> возможную HTML страницу нужен свой XSLT?

если они разные то может и нужен, если CSS не обойтись.


 
Медвежонок Пятачок ©   (2010-03-01 17:51) [27]

А как иначе то? Клиенту чистый xml браузеру xhtml ?

Ну есть еще и серверный вариант.
xml + xml c трансформ-документом на сервере
выполняем transformnode и отдаем клиенту готовый html


 
Eraser ©   (2010-03-01 17:53) [28]

> [1] Kerk ©   (01.03.10 15:35)


> Никто до сих пор не потрудился сделать для Delphi приличный
> шаблонизатор?

тут недавно искал простенький компонент hex-редактор вроде такого, как в regedit"е.. не нашел!


 
DVM ©   (2010-03-01 17:54) [29]


> Медвежонок Пятачок ©   (01.03.10 17:51) [27]

Ну это понятно, правда приводит у необходимости как то различать клиентов на тех кому отдавать чиcтый xml и тех кому xhtml.


 
Kerk ©   (2010-03-01 17:55) [30]


> Eraser ©   (01.03.10 17:53) [28]
>
> тут недавно искал простенький компонент hex-редактор вроде
> такого, как в regedit"е.. не нашел!

TMPHexEditor


 
Piter ©   (2010-03-01 17:55) [31]

DVM ©   (01.03.10 17:47) [23]
Клиенту чистый xml браузеру xhtml ?


а что в этом такого. Клиент работает по своему порту и там выдается XML. Браузер работает на 80 порту и ему выдается XML после преобразования через xsl, это сразу дает нативную поддержку HTML кода. Имхо так.


 
Eraser ©   (2010-03-01 17:56) [32]

> [17] Piter ©   (01.03.10 17:37)


> Проблема в том, что я ни духом, ни рылом в технологиях XML/XSLT
> - сколько нужно времени, чтобы въехать?

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


 
Eraser ©   (2010-03-01 17:57) [33]

> [30] Kerk ©   (01.03.10 17:55)

да это монстр. убил около часа, переписывая его на D2010, оказалось зря.


 
Плохиш ©   (2010-03-01 17:57) [34]


> Piter ©   (01.03.10 17:15) [7]
>
> Плохиш ©   (01.03.10 17:06) [5]
>
> насколько я помню читал про WebSnap. И сложилось впечатление
> полной убогости.

Убогость заканчивается после подсовывания вму своих шаблонов. Там есть где потешить своё больное воображение :-)

PS. В VS2010 всё уже визуально делается и шаблоны и страницы. Правда ничего нового пока в идеях по сравнению с websnap не увидел...


 
DVM ©   (2010-03-01 17:58) [35]


> Piter ©   (01.03.10 17:55) [31]


> а что в этом такого.

Да ничего. Некрасиво как то имхо и двойная работа. Можно проще по User Agent например различать.


 
Плохиш ©   (2010-03-01 17:59) [36]


> в веб-студии. за день можно почти все базовые приемчики
> освоить. но конечно лучше когда есть много примеров на разные
> случаи жизни перед глазами.

в google примеров на все случаи жизни...


 
Piter ©   (2010-03-01 17:59) [37]

и ладно, это я более менее понимаю насчет ОТОБРАЖЕНИЯ информации.

А что насчет запросов, GET, POST? Допустим, запрос, который изменяет настройки какого-либо устройства в системе. Значит, нужно вручную в delphi-коде распарсивать запрос и указание на действия?


 
Медвежонок Пятачок ©   (2010-03-01 18:01) [38]

ну от разбора гет и пост все равно никуда не спрячешься


 
DVM ©   (2010-03-01 18:03) [39]


> Piter ©   (01.03.10 17:59) [37]


> Значит, нужно вручную в delphi-коде распарсивать запрос
> и указание на действия?

Ну а кто еще будет распарсивать то? Переданные значения по любому проверять надо.


 
Плохиш ©   (2010-03-01 18:13) [40]


> Piter ©   (01.03.10 17:59) [37]
>
> и ладно, это я более менее понимаю насчет ОТОБРАЖЕНИЯ информации.
>
>
> А что насчет запросов, GET, POST? Допустим, запрос, который
> изменяет настройки какого-либо устройства в системе. Значит,
>  нужно вручную в delphi-коде распарсивать запрос и указание
> на действия?

В D7 этим занимаются классы TAdapter<xxx>


 
Piter ©   (2010-03-01 18:17) [41]

вообще логика получается разбита на несколько мест. Постараюсь привести схему работы:

- есть XML файл, допустим:

<device>
 <id>4</id>
 <name>Основной принтер</name>
 <port>COM1</port>
 <protocol>hp4520</protocol>
</device>

- с помощью XSL я эту информацию пригоняю в HTML к табличному виду с настройками принтера. Соответственно, нужно сделать возможность изменения.

- веб-сервер получает POST-запрос наподобии:

id=4&action=set&name=[new_name]&port=COM3&protocol=lexmark3n

В результате какой-то разнос логики... Для отображения генерируются внутри exe"шника XML файлы, а для редактирования вручную разбираются GET/POST запросы... Так происходит?

Есть еще совокупность запросов:

1) ведь на XSL можно вынести часть логики? например, по XML списку устройств их можно упорядочивать по разнному. Вид сортировки передается браузером при запросе. Эта информация потом как-то попадает XSL движку? Или надо в XML предусмотреть место для этого параметра. Грубо говоря от браузера приходит запрос:

action=get_device&sort=alphabetic

Я в XML обязан записать тип сортировки:

<deviceList sort="alphabetic">
 <device>
   <port>...</port>
   <protocol>...</protocol>
 </device>
 ...
</deviceList>

или XSL может как-то по другому получить параметры запроса?

2) Можно ли в XSL вставлять в конечный результат HTML, допустим, JS сценарии? Да и вообще произвольный текст?

3) можно ли вставлять другие шаблоны? То есть, например имеем шапку сайта, она одинаковая для всех страничек. Могу ли я через XSL вставить начальный HTML-код из другого файла? Из другого XSL или шаблона HTML?


 
Piter ©   (2010-03-01 18:23) [42]

еще один пример задачи.

Допустим, пользователь ввел некорретную настройку. Логично заново ему выдать страничку настроек с вбитыми им неправильными значениями и сообщение с подсказкой.

Как передать выводимое сообщение об ошибке в XML-XST движок? Тоже как параметр в XML файле?


 
b z   (2010-03-01 18:24) [43]

Судя по всемму, Вы прям тут и хотите выучить xsl/xslt. :)
Скачайте редактор, их сча как грязи, и вперед, там и примеры...


 
Дмитрий С ©   (2010-03-01 18:26) [44]

как вариант предлагаю ajax на основе Xmlhttprequest.


 
Piter ©   (2010-03-01 18:26) [45]

Piter ©   (01.03.10 18:23) [42]
Логично заново ему выдать страничку настроек с вбитыми им неправильными значениями и сообщение с подсказкой.


тут, кстати, и происходит дублирование кода. С одной стороны, есть участок кода, который по значениям свойств классов генерирует XML-описание. С другой стороны, должен быть код, который по POST-данным с неверными значениями должен сгенерировать XML-описание с неправильными данными (которые в реальности не применились), чтобы пользователь не потерял введенные данные.


 
Дмитрий С ©   (2010-03-01 18:47) [46]

тут как раз аякс придет на помощь. чтобы не дублировать.


 
Медвежонок Пятачок ©   (2010-03-01 20:24) [47]

Я в XML обязан записать тип сортировки:

Сортировка очевидно заказывается клиентом из браузера.
Иными словами веб-серверу будет либо гет либо пост.
Он на основании этого уже может сформировать отсортированный xml документ и сортировка внутри xslt уже не потребуется.
Хотя можно и там отсортировать.


 
Кто б сомневался ©   (2010-03-01 21:12) [48]

С этой задаче я делал тоже через xslt + xml . Сначала делал общий шаблон xslt, потом забрасывал значения в xml


> 2) Можно ли в XSL вставлять в конечный результат HTML, допустим,
>  JS сценарии? Да и вообще произвольный текст?
>
> 3) можно ли вставлять другие шаблоны? То есть, например
> имеем шапку сайта, она одинаковая для всех страничек. Могу
> ли я через XSL вставить начальный HTML-код из другого файла?
>  

Можно. Также и css и js итд.
Просто те значения которые изменяются делаются через <xsl:value-of select="1/2/3>


 
Кто б сомневался ©   (2010-03-01 21:12) [49]

Вообще примеров много в нете, поищите.



Страницы: 1 2 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.6 MB
Время: 0.061 c
15-1266013815
Юрий
2010-02-13 01:30
2010.08.27
С днем рождения ! 13 февраля 2010 суббота


15-1267711258
xayam
2010-03-04 17:00
2010.08.27
Гений места


15-1267253714
Григорьев Антон
2010-02-27 09:55
2010.08.27
Умер Архангельский


2-1274633322
Nathan
2010-05-23 20:48
2010.08.27
Место положение .exe


3-1238562946
TheEd
2009-04-01 09:15
2010.08.27
как вычитать isert ы, произошедшие в триггере одной из таблиц





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский