Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi CSS mit Webbroker (https://www.delphipraxis.net/179942-css-mit-webbroker.html)

Delbor 12. Apr 2014 10:53

CSS mit Webbroker
 
Hi zusammen

Zur Zeit arbeite ich mich in die Webbroker-Technologie ein. Dabei ist es ja möglich, einer TPageProducer-Komponente entweder einen TString in HTMLDoc oder ein File in HTMLFile zu übergeben. Nun muss ich ja ausser den HTML-Anweisungen auch CSS-Formatierungen und - wie mir gerade einfällt - allenfalls auch Javascript übergeben. Solches sollte, denke ich, als File nicht möglich sein; ich nehme an, dass das Property HTMLFile auch eine HTML-Datei erwartet und also weder eine *.css- noch eine *.js-Datei akzeptieren würde.

Aktuell habe ich CSS-Anweisungen per Stringeditor in HTMLDoc eingelesen. Das gefällt mir aber deswegen nicht, weil allfällige Änderungen ein Neukompilieren erfordern.
Wie gesagt, bin ich daran, mich einzuarbeiten. Das heisst, ich gehe zurzeit den Weg über vorliegende Dateien (im Falle von HTMLFile), in der Endgültigen Version sollen diese Inhalte aber per Stream aus einer DB kommen.

Irgendwie denk ich, stehe ich mit wohl mehr als beiden Beinen auf dem Schlauch. Um mal die Help zu zitieren:
Zitat:

Weisen Sie HTMLDoc die Strings für die HTML-Vorlage zu. Jeder String besteht aus einer Folge von HTML-Befehlen und HTML-transparenten Tags. Diese speziellen Tags haben folgendes Format:

<#TagName Param1=Value1 Param2=Value2 ...>
Abgesehen davon, dass ich bislang nirgends etwas darüber gefunden habe, was man mit parametrisierten Tagnamen alles anstellen kann, glaube ich mich zu erinnern, irgendwo in dem Zusammenhang mal etwas von 'TStrings-Objekt' gelesen zu haben - also einer Zuweisung zur Laufzeit.

Gruss
Delbor

Sir Rufo 12. Apr 2014 11:39

AW: CSS mit Webbroker
 
Dieser ominöse Delphi-Referenz durchsuchenTPageProducer hat ein Event Delphi-Referenz durchsuchenTPageProcuer.OnHTMLTag.

Dieses Event wird aufgerufen, wenn beim Parsen einer dieser transparenten Html-Tags gefunden wird.
Im Event bekommst du den Tag-Namen und die Parameter geliefert und kannst dafür einen passenden Inhalt ausliefern.
Code:
<b>Firstname:</b>&nbsp;<#Firstname>
Delphi-Quellcode:
if TagName = 'Firstname' then
  ReplaceText := 'Walter';
Code:
<b>Firstname:</b>&nbsp;Walter
Die *.css und *.js speicherst und lieferst du aus wie *.png oder *.jpg, denn die hast du auch nicht im Programm gespeichert ;)

Delbor 12. Apr 2014 12:56

AW: CSS mit Webbroker
 
Hi Sir Rufo

Danke für deine schnelle Antwort!
[QUOTE=Sir Rufo;1255414]Dieser ominöse Delphi-Referenz durchsuchenTPageProducer hat ein Event Delphi-Referenz durchsuchenTPageProcuer.OnHTMLTag.

Danke, das hab ich soweit begriffen:
Delphi-Quellcode:
procedure TWebModule1.PageproducerImageHTMLTag(Sender: TObject; Tag: TTag;
  const TagString: string; TagParams: TStrings; var ReplaceText: string);
begin
  if TagString = 'UserName' then ReplaceText := 'Herr Braun';
  if Tagstring = 'Herkunft' then ReplaceText := Self.Request.UserAgent;

end;

procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  Response.Content := '<html><heading/><body>Webserver-Anwendung</body></html>' + '<P>' + PageproducerImage.Content ;
end;
Zitat:

Zitat von Sir Rufo (Beitrag 1255414)
Die *.css und *.js speicherst und lieferst du aus wie *.png oder *.jpg, denn die hast du auch nicht im Programm gespeichert ;)

Sorry, wenn ich da nochmal nachhake, aber je länger desto mehr habe ich das Gefühl, dieOnline-Help hat mir etwas die Sinne vernebelt. Irgendwo steht da was, man müsse die Anwendung neu kompilieren, wenn man das Propety HTMLDoc ändert. Nun erwartet HTMLDoc ja einen String, der die (Html-)Vorlage enthält, ist also selbst ein TStrings-Objekt. Und einem solchen kann zur Laufzeit ein beliebiger String zugewiesen werden.
Das mit dem Neukompilieren stimmt nur dann, wenn zur Designzeit eine Zuweisung mit dem Stringlisteneditor erfolgt.

Ich muss da nochmal über die Bücher, aber soweit ich das bis jetzt verstanden habe, akzeptiert 'src' nur gerade einen Dateipfad.
Erstmal das, was zu ersetzen wäre - erstellt werden sollen diverse Seiten einer Fotogallerie:
Delphi-Quellcode:
      <div id="img1">&nbsp;<img alt="DelborPunktCH" src="./Images/jpeg150/DSC_5751.jpg"/></div>
      <div id="img2">&nbsp;<img alt="DelborPunktCH" src="./Images/jpeg150/DSC_5752.jpg"/></div>
      <div id="img3">&nbsp;<img alt="DelborPunktCH" src="./Images/jpeg150/DSC_5753.jpg"/></div>
      <div id="img4">&nbsp;<img alt="DelborPunktCH" src="./Images/jpeg150/DSC_5754.jpg"/></div>
      <div id="img5">&nbsp;<img alt="DelborPunktCH" src="./Images/jpeg150/DSC_5755.jpg"/></div>
      <div id="img6">&nbsp;<img alt="DelborPunktCH" src="./Images/jpeg150/DSC_5756.jpg"/></div>
      <div id="img7">&nbsp;<img alt="DelborPunktCH" src="./Images/jpeg150/DSC_5757.jpg"/></div>
      <div id="img8">&nbsp;<img alt="DelborPunktCH" src="./Images/jpeg150/DSC_5758.jpg"/></div>
      <div id="img9">&nbsp;<img alt="DelborPunktCH" src="./Images/jpeg150/DSC_5759.jpg"/></div>
      <div id="img10">&nbsp;<img alt="DelborPunktCH" src="./Images/jpeg150/DSC_5760.jpg"/></div>
      <div id="img11">&nbsp;<img alt="DelborPunktCH" src="./Images/jpeg150/DSC_5761.jpg"/></div>
      <div id="img12">&nbsp;<img alt="DelborPunktCH" src="./Images/jpeg150/DSC_5762.jpg"/></div>
Nach deiner Aussage bleibt mir also nichts anderes übrig, als die *.jpgs, *.css etc auf der Platte zu speichern (per Filestream aus der DB geholt) und obigen HTML-Code dynamisch (mit anderen Pfaden) zu ersetzen.
Obiger Code ist übrigens überholt; er stammt aus meinen allerersten CSS-Versuche. Neu wirds wohl eine CSS-Klasse geben, die an die 'div's zugewiesen wird.

Sir Rufo 12. Apr 2014 13:13

AW: CSS mit Webbroker
 
Du bekommst für jede Datei eine Anforderung.

Die erste Anforderung ist eine *.html Datei.
Dazu lädst du das passende Template, jagst es durch den PageProducernd lieferst das Resultat aus.
Die nächsten Anforderungen sind dann *.css, *.js, *.jpg, ...

Die Daten/Dateien werden als Stream übertragen, ob du also erst eine Datei erzeugst und diese dann als FileStream auslieferst, oder einen MemoryStream, who cares, dem Empfänger ist es wurscht, den bekommt einen Stream und fertig.

siehe http://docwiki.embarcadero.com/Libra....ContentStream

Natürlich kannst du die Templates fest einkompilieren, aber wenn du das nicht willst, dann eben nicht einkompilieren.

Delbor 17. Apr 2014 10:30

AW: CSS mit Webbroker
 
Hi zusammen

@Sir Rufo: Etwas spät zwar, aber trotzdem Danke für deine Antwort! Ich hab mir seither noch etwas Theorie um die Ohren geschlagen und bin dabei auf einen Widerspruch gestossen:
  1. Zum einen heeisst es, eine Webanwendung könne nur ein einziges Webmodul gleichzeitig besitzen/verwalten.
  2. Zum andern verfügt TWebApplication über Propertys, um mehrere Webverbindungen-/Anfragen zu verwalten.
Dabei bin ich auch auf CacheConnections gestossen, was meine Frage schonmal zu beantworten scheint.
Nur "scheint", weil ich im Wesentlichen auch danach suche, wie unter Webbroker Sessions verwaltet werden. Irgendwie hab ich im Hinterkopf, ich hätt bei Embarcadero mal was von einer Sessionlist im Zusammenhang mit Webbroker gelesen, aber ich kann die Seite nicht mehr finden.
Es gibt zwar ein Objekt TSession, aber das ist offensichtlich die gleichnamige BDE-Komponente...
So ist denn meine Frage: wie verwaltet Webbroker Websessions?

Gruss
Delbor

Delbor 27. Apr 2014 19:00

AW: CSS mit Webbroker
 
Hi Sir Rufo
Zitat:

Zitat von Sir Rufo (Beitrag 1255420)
Du bekommst für jede Datei eine Anforderung.

Die erste Anforderung ist eine *.html Datei.
Dazu lädst du das passende Template, jagst es durch den PageProducernd lieferst das Resultat aus.
Die nächsten Anforderungen sind dann *.css, *.js, *.jpg, ...

Kann es sein, dass hier der erste Satz die Lösung enthält, die ich auch hier schon suche?

Bislang bin ich immer davon ausgegangen, dass eine Anforderung die komplette Webseite betrifft. Desshalb hab ich diesen Satz auch als nicht wirklich verstanden immmer wieder überlesen. Interpretiere ich den aber neu, so bedeutet das, dass ein Verweis in einer HTML-Seite (src=...) eine neue Anforderung des Clients (Browsers) auslöst. Ist diese Interpretation richtig?

Ausserdem würde dies bedeuten, dass ich für jedes Bild (oder Audiodatei etc.) eine neue Anforderung losgeschickt wird. Und das erhöht den Traffic...

Gruss
Delbor

Sir Rufo 27. Apr 2014 19:12

AW: CSS mit Webbroker
 
:thumb: Ich hätte es nicht schöner ausdrücken können ;)

Und ist ja auch (irgendwie) logisch. Die erste Anfrage ist ja z.B. nach der "/index.html" und genau die (also der Inhalt - der nur aus text besteht) wird übertragen. Dort befindet sich die Beschreibung, wie die Seite anzuzeigen ist, teilweise durch Bilder, die als Link dort hinterlegt sind ... ja, und dann lädt der Browser die (wenn er die nicht schon im Cache hat).

Delbor 27. Apr 2014 19:32

AW: CSS mit Webbroker
 
Hi Sir Rufo

Ich sage ja: wer (richtig) lesen kann, ist klar im Vorteil 8-)
Zitat:

Und ist ja auch (irgendwie) logisch.
Ja - wobei ich den Fehler gemacht habe, mir das irgendwie so vorzustellen, wie das abläuft, wenn ich auf Reisen gehe:
  1. Ich nehm den Koffer (die Index)
  2. packe Schuhe und
  3. Zahnbürste und erst
  4. dann gehts los
Ich hab einfach nicht daran gedacht, dass zwischen meiner Logik und der des Computers ein riesen Unterschied besteht:-D


Gruss
Delbor


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 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