Главная страница
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.62 MB
Время: 0.05 c
15-1266561272
Kerk
2010-02-19 09:34
2010.08.27
Глобальное потепление


11-1221682651
siealex
2008-09-18 00:17
2010.08.27
KOL и Windows Mobile


2-1267853680
Дмитрий С
2010-03-06 08:34
2010.08.27
Ограничение TControl.Top.


15-1268379319
DevilDevil
2010-03-12 10:35
2010.08.27
XML Schema. Существует ли библиотека ?


2-1266004276
Дмитрий
2010-02-12 22:51
2010.08.27
Формат rtf