AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Inhalte einer TListView auf eine Webseite anzeigen???
Thema durchsuchen
Ansicht
Themen-Optionen

Inhalte einer TListView auf eine Webseite anzeigen???

Ein Thema von romber · begonnen am 11. Okt 2008 · letzter Beitrag vom 11. Okt 2008
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Inhalte einer TListView auf eine Webseite anzeigen???

  Alt 11. Okt 2008, 12:45
Hallo!

Ich habe in meinem Programm eine TListView, die systematisch mit Daten befüllt wird. Jedes Item verfügt unter anderem über eine ID sowie Datum und Uhrzeit der Eingabe. Diese Daten aus TListView kann ich dann in einem belibiegen Format abspeichern, z.B. als CSV oder XML.

Nun müssen die Daten auf einer Webseite angezeigt werden und zwar so, dass die Seite nicht jedesmal neu gelden wird, sondern nur die Daten dazu geladen werden, die anhand ID als neu eingestufft wurden. Da muss ich wohl Ajax benutzen und die TListView-Items als XML ausgeben. Ich habe aber keine Ahnung, wie ich jetzt vorgehen soll. Ich nehme an, das wird nicht so einfach.

Wie soll ich das alles anstellen? Habe so etwas no nie gemacht und würde gerne Eure Meinungen hören, wie ich da am besten vorgehen soll.
Vielen Dank!
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#2

Re: Inhalte einer TListView auf eine Webseite anzeigen???

  Alt 11. Okt 2008, 13:04
Hi romber,

am einfachsten wäre, das XML per XSLT in HTML auszugeben. Beschäftige Dich mal mit der XSL Transformation.

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: Inhalte einer TListView auf eine Webseite anzeigen???

  Alt 11. Okt 2008, 14:14
Danke für schnelle Antwort!

"Ausgeben" hört sich schön an. Nur habe ich keine Ahnung, wie ich überhaupt dazu komme. Mich würde die ganze Reihenfolge interessieren, wie ich das am besten (nich unbedingt am einfachsten) realisiere. Bestimmt muss ein HTTP-Server her, dazu vielleicht PHP oder so was, keine Ahnung. Ich bin jetzt wirklich auf die Tipps der erfahrenen Programmierer hier angewiesen.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: Inhalte einer TListView auf eine Webseite anzeigen???

  Alt 11. Okt 2008, 14:32
Tja .... ich würde folgendermaßen vorgehen:

Ja, du brauchst einen HTTP-Server. Ich weis nicht, ob TIdHTTPServer aus den Indys reichtt, aber n Versuch isses wert.

Dort kannst du dann in einem Event die angeforderte Seite auslesen und eine Antwort zurückgeben. Hier kannst du dann direkt das xml+xslt/html der Listview zurückschicken.

Wenn du AJAX willst, würde ich folgendermaßen vorgehen:

Im ersten Reqest gibt du sowas wie eine Grundstruktur zurück, die Javascript beinhaltet, und folgendes tut:
Enthält xslt-Verweis
Fordert per AJAX-Request Daten an.
Enthält noch keine Daten

Jetzt kannst du im AJAX-Request die Zeit mitschicken, wann die Seite das letzte mal aktualisiert wurde. Bzw. 0 wenn sie gerade geladen wurde.

Im HTTP-Server brauchst du jetzt also 3 Verzweigungen:
Es wurde die eigentliche Seite angefordert: Ne Konstante/resourcenstring/Datei ausgeben.
Es wurde das XSLT-Stylesheet angefordert ==> Ebenfalls einfach zurückgeben.
Es werden Daten angefordert. Jetzt musst du Anhand der mitgelieferten Zeit die Daten raussuchen, die seitdem dazugekommen sind.

So in etwa würde ich mir das vorstellen.

Da HTTP verbindungslos ist, musst du mit dem Javascript pollen, und kannst nicht ereignisbasiert aktualisieren.

MfG,
Julius
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#5

Re: Inhalte einer TListView auf eine Webseite anzeigen???

  Alt 11. Okt 2008, 14:40
Zitat von romber:
Ich bin jetzt wirklich auf die Tipps der erfahrenen Programmierer hier angewiesen.
Ich verwende das produktiv in einem kommerziellen Produkt. Also, verstehe ich nicht, warum ich kein "erfahrener Programmierer" sein soll

Hast Du das zu XSL-Transformation überhaupt gelesen? Du schreibst eine Beschreibungsdatei, der Client-Browser setzt dann aus dem XML zusammen mit dem XSL mittels der Transformation das Zielformat zusammen. Das geht für XML > XML, XML > HTML, XML > PDF und was auch immer. Liegt am Transformation-Processor, Parser und Deiner Beschreibungsdatei.

Zitat von romber:
Nun müssen die Daten auf einer Webseite angezeigt werden
WAS willst Du denn genau machen? Da ist noch viel Interpretationsspielraum.

Sieh Dir mal folgendes an: http://de.selfhtml.org/xml/darstellung/xsltelemente.htm.

Dort sind einfache Beispiele zu XSL.

Fakt: Du brauchst kein AJAX, kein PHP und keine Programmierung in Delphi dafür.

Genau dafür gibt es ja XSLT.

Der Ablauf wäre folgendes:
1) Datein aus ListView in XML exportieren
2) Den XML Header anpassen, damit auf Dein XSL verwiesen wird
3) Seite aufrufen

Gruß Assertor

Edit: Damit es mehr nach Programmierung aussieht kannst Du auch z.B. einen eigenen Parser in Delphi nutzen. z.B. machst Du einen Headerport von C++ des libXSLT. Dann kannst Du Dein eigenes XML in einem Memorystream z.B. ohne Abhängigkeit von MS XML (XSL Parser ist ja beim IE 4+ dabei) per libXSLT in Dein Zielformat wandeln. Das funktioniert zu 100%, ist aber unnötiger Aufwand dank der Browser-XSLT.
Frederik
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#6

Re: Inhalte einer TListView auf eine Webseite anzeigen???

  Alt 11. Okt 2008, 14:53
Nachtrag mit einem kurzen Beispiel, damit Du die Logik verstehst:

Du hast Deine XML-Datei, z.B.
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="template.xsl" ?> // dies muß in die Datei, damit der Browser es automatisch umwandelt
<test>
 <titel>Dateiendungen</titel>
 <glossar>
  <eintrag>
   <begriff>bak</begriff>
   <bedeutung>Backup-Datei</bedeutung>
  </eintrag>

  <eintrag>
   <begriff>bmp</begriff>
   <bedeutung>Bitmap-Grafik</bedeutung>
  </eintrag>
 </glossar>
</test>
und Deine template.xsl, z.B.
XML-Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
 <html>
 <head>
 </head>
 <body>
  <xsl:apply-templates />
 </body>
 </html>
</xsl:template>

<xsl:template match="titel">
 <h1><xsl:value-of select="." /></h1>
</xsl:template>

<xsl:template match="glossar/eintrag">
 <p style="font-family:Arial,Helvetica,sans-serif; font-size:16px">
  <xsl:apply-templates />
 </p>
</xsl:template>

<xsl:template match="begriff">
 <b style="color:blue"><xsl:apply-templates />: [/b]
</xsl:template>

<xsl:template match="bedeutung">
  <xsl:value-of select="." />
</xsl:template>

</xsl:stylesheet>
Wenn Du nun das XML im Browser öffnest, wird das XSL automatisch darauf angewandt. Es wird dir nun statt XML formatiertes HTML ausgegeben (weil es so in der template.xsl definiert wird).

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#7

Re: Inhalte einer TListView auf eine Webseite anzeigen???

  Alt 11. Okt 2008, 18:00
Zitat von Assertor:
Ich verwende das produktiv in einem kommerziellen Produkt. Also, verstehe ich nicht, warum ich kein "erfahrener Programmierer" sein soll
Nein, nein, natürlich! Das meinte ich gar nicht! Wirklich nicht. Ich wollte damit nur sagen, dass ich wirklich nichts davon verstehe und so viele Tipps wie möglich brauche.

Mit dem XSL ist mir schon klar. Vielleicht habe ich nicht deutlich genug beschrieben was ich da brauche. Und zwar ich möchte nicht jedes mal die ganze Liste auf einer Seite zeigen, wodurch die Seite jedes Mal neu geladen werden muss. Ich möchte so eine art Ticker-Webseite erstellen, die asynchron neue Einträge aus der TListView zieht und auf der bereits geladenen Seite anzeigt, so grob beschriebe. Natürlich verstehe ich, ohne Ensatzt weitere Hilfsmittel wie z.B. Ajax nicht geht. Aber alein die Seite mit XSL in ein darstellbares Format zu bringen reicht mir nicht aus.
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#8

Re: Inhalte einer TListView auf eine Webseite anzeigen???

  Alt 11. Okt 2008, 18:07
Zitat von jfheins:
Im ersten Reqest gibt du sowas wie eine Grundstruktur zurück, die Javascript beinhaltet, und folgendes tut:
Enthält xslt-Verweis
Fordert per AJAX-Request Daten an.
Enthält noch keine Daten

Jetzt kannst du im AJAX-Request die Zeit mitschicken, wann die Seite das letzte mal aktualisiert wurde. Bzw. 0 wenn sie gerade geladen wurde.

Im HTTP-Server brauchst du jetzt also 3 Verzweigungen:
Es wurde die eigentliche Seite angefordert: Ne Konstante/resourcenstring/Datei ausgeben.
Es wurde das XSLT-Stylesheet angefordert ==> Ebenfalls einfach zurückgeben.
Es werden Daten angefordert. Jetzt musst du Anhand der mitgelieferten Zeit die Daten raussuchen, die seitdem dazugekommen sind.
@jfheins

Kannst Du bitte ein bisschen deutlicher jedes Punkt dieser Vorgehensweise beschreiben? Ich kapiere es leider nicht ganz. Danke!
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#9

Re: Inhalte einer TListView auf eine Webseite anzeigen???

  Alt 11. Okt 2008, 18:32
Okay .... mal schauen

Du erstellst 2 Webseiten zweckmäßigerweise im Programmpfad oder so.

Die erste ist das Stylesheet. Da kannst du entweder CSS oder XSLT verwenden. Da ich mich mit XHTML+CSS besser auskenne als mit XML+XSLT werde ich das ganze mit XHTML+CSS beschreiben.

In dem Stylesheet definierst du das Aussehen, für die Funktionalität ist es erstmal unwichtig. (Können wir nachher noch dran feilen)

Die zweite ist die eigentliche Seite, die muss ein Javascript beinhalten.
XML-Code:
<evtl. Doctype und xml decl.>
<html ....>
<head>
<title>Blablabla</title>
<script type="text/javascript">

int lastrefresh = 0;

function data()
{
  daten = sende_request('http://meinserver/time=' + lastrefresh);
  werte_ergebnis_aus(daten);
  in_tabelle_einfügen(daten);
}

document.setintervall(data(), 3000);
// alle 3 Sekunden Daten holen

</script>
</head>
<body>

<table>
  <tr>
  <td>Spalte eins</td>
  <td>Spalte zwei</td>
  </tr>
</table>

</body>
</html>
Die Javascript-Funktion holt die Daten ab, und fügt sie in die Tabelle auf der Seite ein.

Jetzt dein Delphi Programm:
(Beim IdHTTPServer gibts ein Event, das aufgerufen wird, wenn ne Anfrage reinkommt. Mangels Delphi jetzt nur Pseudocode )
Delphi-Quellcode:
procedure Das_Event_das_aufgerufen_wird (Requested_Site: String)
begin
if Requested_Site == Main_Page then
  Result = Die_Datei_von_dder_Festplatte_öffnen;

else if Requested_Site == Stylesheet
  Result = Stylesheet_von_der_Festplatte_öffnen;

else // Daten
begin
  integer zeit = extracttime(Requested_Site);
  String daten = ListviewDatenSeit(zeit);
  Result = daten.AsXML();
end;
end;
Oder, um es nochmal zu erklären:

Du gibtst in deinem Delphi-Programm entweder die Seite zurück, oder den Stylesheet, oder die Daten. Die entscheidung kannst du in Abhängigkeit des angeforderten Dateinamens treffen.
Die Seite wiederum fordert die Daten an.
Das Programm muss daraufhin alle Daten raussuchen, die seid dem letzten Refresh verändert wurden. Diese werden dann XML-kodiert zuerückgesendet.

Das Script kann dann die XML-Daten verarbeiten und in die Tabelle einfügen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz