|
|
TWebTableGenerator komponens
Internet áruház 4. rész
|
|
Példaprogram letöltése
24202 bájt
|
Internet áruházunk mostani cikkében egy olyan komponenst készítünk, melynek segítségével néhány kattintással létrehozhatunk egy tetszőleges táblázatot egy-egy weblapra.
A komponens által szolgáltatott adatokat összekapcsolva a múlt héten létrehozott komponens adataival, könnyedén előállíthatunk egy web oldalon megjelenő adatbeviteli lapot táblázatos formában.
A mellékelt példaprogram megnyitása előtt a WebTableGenerator.pas-ban lévő komponenst telepítenie kell a Delphi alá. Szükség lesz még a múlt heti cikkben közölt WebFormGenerator.pas-ban lévő komponensre is. Ha múlt hét óta esetleg levette ezt a komponenst, akkor kérjük telepítse ismét.
Továbbá kérjük, hozza létre az ASWEBSHOP04 alias-t. Ez mutasson a mellékelt példaprogram Data könyvtárára, az adatbázis elérés végett.
A lefordított WS04.EXE-t helyezze a web szerver scripts könyvtárába, ahonnan az futtatható.
A HTM könyvtárban lévő Index.htm állományt pedig helyezze el a web szerveren úgy, hogy az egy böngészőn keresztül elérhető legyen. Például: C:\Inetpub\wwwroot\webshop. Ekkor a böngészőbe a www.animare.hu/webshop/ cím beírásakor meg kell hogy jelenjen az iménti web lap. Persze a web szerver neve mindenkinél más és más lesz.
A jelenlegi cikk elolvasása előtt javasoljuk a sorozat előző részeinek megismerését, mivel a mostani ismeretek csupán kiegészítői az előzőeknek, így azok ismerete nélkül e konkrét cikk tartalma sem érthető meg teljes egészében.
A múlt héten létrehoztunk egy olyan komponenst, mely képes volt a HTML-ben használt <form> kódolására, mellyel adatbeviteli lapokat készíthettünk. A mostani komponensünk egy HTML nyelv <table> parancsát valósítja meg. Ezt felhasználva egyszerűen készíthetünk tetszőleges táblázatokat.
Mostani cikkünkben össze is kapcsoljuk e két komponenst és segítségükkel néhány kattintással létrehozunk egy olyan web lapot, melyben táblázatos formában megjelenik egy adatbeviteli lap. Ennek segítségével hozunk létre új rekordot a már meglévő Product.dbf táblánkhoz.
Ahhoz hogy a dinamikus web lap generáláshoz már csak arra a néhány kattintásra legyen szükségünk, először is el kell készítenünk az új komponenst, mellyel létrehozhatjuk egyedi HTML táblázatainkat.
Bár a cikk végére a komponens már teljes mértékben használható lesz, ennek ellenére még lesznek hiányosságai, melyeket a cikksorozat következő fejezeteiben még megoldunk.
A táblázat sorokból és oszlopokból áll. Ehhez létrehozunk egy olyan property-t, melyen keresztül az egyes sorokat, illetve egy olyant, melyen keresztül az egyes oszlopokat érhetjük el.
A sorokhoz a Rows nevű TWebTableRowItems típusú property-t hozzuk létre, míg az oszlopokhoz a Cols nevű TWebTableColItems típusú property-t.
Mindkét típus a TCollection osztályból származik.
A komponens további property-einek neve és funkciója is megegyezik a HTML-ből ismert <table> parancs paramétereivel. Ugyanez igaz a Rows és Cols egyes elemeinek property-eire is, persze a soroknál a <tr> parancs paramétereit állíthatjuk be, míg az oszlopoknál a <td> parancsét.
Nézzük át gyorsan, hogy ezek a paraméterek pontosan mit is takarnak.
A TWebTableGenerator property-ei:
- Align - a táblázat igazítását írja elő vízszintesen a web lapon
- VAlign - a táblázat igazítását írja elő függőlegesen a web lapon
- BGColor - a táblázat háttérszíne
- Border - a táblázat keretének vastagsága
- CellPadding - a cellákon belüli margó mértéke
- CellSpacing - a cellák közötti távolság mértéke
- Custom - egyedileg megadható paraméter
- Height - a táblázat magassága pixelben ha számot írunk, és százalékban ha százalék jelet is használjuk
- Width - a táblázat szélessége pixelben ha számot írunk és százalékban ha százalék jelet is használjuk
- Title - az itt megadott sztring jelenik meg, amikor az egérrel a táblázatra mutatunk (Hint)
A sorok (Rows) property-ei:
- Align - az adott soron belül az összes cella tartalma az itt megadott irányba lesz igazítva vízszintesen
- VAlign - az adott soron belül az összes cella tartalma az itt megadott irányba lesz igazítva függőlegesen
- BGColor - az adott soron belül az összes cella háttérszíne
- Custom - egyedileg megadható paraméter
- Title - az itt megadott sztring jelenik meg, amikor az egérrel az adott sor celláira mutatunk (Hint)
Az oszlopok (Cols) property-ei:
- Align - az adott oszlopon belül az összes cella tartalma az itt megadott irányba lesz igazítva vízszintesen
- VAlign - az adott oszlopon belül az összes cella tartalma az itt megadott irányba lesz igazítva függőlegesen
- BGColor - az adott oszlopon belül az összes cella háttérszíne
- Custom - egyedileg megadható paraméter
- Title - az itt megadott sztring jelenik meg, amikor az egérrel az adott oszlop celláira mutatunk (Hint)
- ColSpan - cellák összevonása az oszlopban
- RowSpan - cellák összevonása a sorban
- Width - az oszlop celláinak szélessége
- Height - az oszlop celláinak magassága
- NoWrap - az adott oszlop celláinak szövege nem jelenhet meg megtörve
A táblázat HTML kódjának lekérdezéséhez létrehoztunk a komponenshez egy Content nevű függvényt, mely sztringként adja vissza a szükséges kódot.
A Content függvény működési elve a következő: kezdődik a <table> parancs összeállításával. Minden paraméterhez egy-egy függvény kerül meghívásra, melyek neve: GetxxxProperty. Ezek után két egymásba ágyazott ciklust kezdünk, melyek végigmennek a Rows-ban megadott sorokon illetve a Cols-ban megadott oszlopokon, így a táblázat minden egyes cellája külön-külön előáll.
A Rows-ban és a Cols-ban is találunk egy Content függvényt, mely nem tesz mást, mint az adott objektum paramétereit szedi össze és adja vissza sztringként. Ezeket a paramétereket is az adott property-k értéke alapján állítja össze a függvény.
A kettős ciklusnál még néhány eseményt is meghívunk az egyes műveletek előtt (OnBeforexxx) és után (OnAfterxxx), valamint van egy olyan eseményünk is, melyen keresztül értékkel tölthetjük fel a táblázat egyes celláit. Ez az esemény lesz az OnCellData.
Itt első paraméterként a komponensre utaló referenciát kapunk. A következő két szám mondja meg, hogy melyik sorban és melyik oszlopban vagyunk éppen. A végső Data nevű változóban pedig azt a sztringet kell megadnunk, amit az adott cellában szeretnénk viszontlátni.
Nézzük a komponens felhasználását.
Amikor a megjelenő kezdeti web lapon az Új termék linkre kattintunk, akkor meghívásra kerül a programunk a NewProduct paraméterrel. Ekkor a kérést a PageProducer1-ben tárolt web lappal szolgáljuk ki:
procedure TWebModule1.WebModule1WebActionItem1Action(
Sender: TObject; Request: TWebRequest; Response:
TWebResponse; var Handled: Boolean);
begin
Response.Content:=PageProducer1.Content;
end;
Ebben a web lapban azonban elhelyeztünk egy címkét TABLE névvel. Amikor a PageProducer1 komponens ehhez ér, akkor jön létre az OnHTMLTag eseménye.
Ez lesz az a pillanat, amikor a saját komponenseinkkel létre kell hoznunk az adatbeviteli lap HTML kódját.
procedure TWebModule1.PageProducer1HTMLTag(Sender:
TObject; Tag: TTag;const TagString: String;
TagParams: TStrings; var ReplaceText: String);
begin
if TagString='table' then begin
ReplaceText:=WebFormGenerator1.Content(feStart);
ReplaceText:=ReplaceText+WebTableGenerator1.
Content;
ReplaceText:=ReplaceText+WebFormGenerator1.
Content(feEnd);
end;
end;
Első lépésként a WebFormGenerator1 komponens segítségével elkészítjük a <form> parancs kezdő sorát.
Ezek után jön a táblázat készítése a WebTableGenerator1.Content; hívásával.
Végül a <form> parancsot lezáró sor következik a WebFormGenerator1 komponens által.
Amikor a táblázatot készítjük, akkor jön létre a WebTableGenerator1 komponens OnCellData eseménye minden egyes cella esetén.
Ekkor kell értéket adnunk a celláknak.
Az eseménynél kettéágaztatjuk a végrehajtást attól függően, hogy az első vagy a második oszlopról van-e szó. Az első oszlopba az adatbázis mezők nevei, míg a másodikba az adatbeviteli mezők kerülnek.
Az első oszlop esetén lekérdezzük a WebFormGenerator1 komponenstől, hogy az adott sorban melyik adatbázis mezőt kell megjeleníteni. Ezek után a TTable komponenstől megtudakoljuk az adott mező DisplayLabel értékét, és ezt írjuk a táblázat cellájába.
A második oszlop esetén a WebFormGenerator1 komponenstől lekérjük az adott sorhoz tartozó adatbeviteli eszköz HTML kódját, és ezt tesszük a cellába.
procedure TWebModule1.WebTableGenerator1CellData(
Sender: TObject; row, col: Integer; var data: String);
var
f: TField;
begin
case col of
0: begin
f:=tProduct.FindField(WebFormGenerator1.FormItems
[row].DataField);
if Assigned(f) then begin
data:=f.DisplayLabel+':';
end;
end;
1: begin
data:=WebFormGenerator1.Content(feItem, row);
end;
end;
end;
Amint látható, minimális gépeléssel és néhány property beállításával létrehoztunk egy olyan web lapot, melyen keresztül felvehetünk egy új rekordot az adatbázisunkba az Interneten keresztül.
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2000 évkönyv 208. oldal
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|