Page 1 of 2 1 2 LastLast
Results 1 to 15 of 22

Thread: Van objecten naar template kost veel code?

  1. #1

    Van objecten naar template kost veel code?

    Ik ben dus bezig met een web applicatie en loop tegen een "probleem" aan.

    Binnen de applicatie zijn een aantal data objecten te gebruiken. In mijn kleine applicatie nog maar 2, namelijk Client en Clients. Clients is een lijst van 0 of meer Client objecten.
    Nou wil ik de templates vullen met de data uit de objecten. Maar helaas mag er maar 1 data-module binnen een web applicatie. Dat betekend dat als de code om de templates te vullen in 1 web module moet. Dit wordt wat veel en dus onoverzichtelijk:
    Code:
    procedure TModuleMain.PageViewClientsHTMLTag(Sender: TObject; Tag: TTag;
      const TagString: String; TagParams: TStrings; var ReplaceText: String);
    var
      x: Integer;
    begin
      if TagString = 'list' then
      begin
        if TagParams.Values['name'] = 'clients' then
        begin
          Clients := TClientList.Create;
          try
            for x := 0 to Clients.Count - 1 do
            begin
              CurrentClientIndex := x;
              ReplaceText := ReplaceText + PageClient.Content;
            end;
          finally
            Clients.Free;
          end;
        end;
      end;
    end;
    
    procedure TModuleMain.PageClientHTMLTag(Sender: TObject; Tag: TTag;
      const TagString: String; TagParams: TStrings; var ReplaceText: String);
    var
      Client: TClient;
    begin
      Client := Clients.Items[CurrentClientIndex];
      if TagString = 'id' then
        ReplaceText := IntToStr(Client.Id);
      if TagString = 'name' then
        ReplaceText := Client.Name;
      if TagString = 'address' then
        ReplaceText := Client.Address;
      if TagString = 'city' then
        ReplaceText := Client.City;
    end;
    Binnen de web-module ook nog:
    Code:
      private
        CurrentClientIndex: Integer;
        Clients: TClientList;
    Ik zou dit graag in een class of in ieder geval een andere unit willen hebben zodat ik het overzicht niet verlies als er meer objecten/templates bij komen. Maar hoe los ik dit een beetje goed op? Wat doen jullie meestal in dit geval om het een beetje overzichtelijk te houden? Graag jullie mening + ideeen.

  2. #2
    Je mag een "onbeperkt" aantal datamodules maken, je mag er alleen niet meer dan één op AutoCreate zetten. Ik denk dat je daarmee in de war bent.
    Marcel

  3. #3
    Originally posted by Marcel
    Je mag een "onbeperkt" aantal datamodules maken, je mag er alleen niet meer dan één op AutoCreate zetten. Ik denk dat je daarmee in de war bent.
    Ah, dat zou me inderdaad kunnen helpen. Bedankt, zal morgen es even kijken of ik het dan wat beter kan krijgen allemaal.

  4. #4
    Waar maak ik deze data modules aan? En waar weer vrij te geven? En waar moet ik de variable neer zetten voor deze module aangezien het wel thread-safe moet zijn?

    Ik vraag met serieus af hoe anderen dit doen? Hebben voor alle templates of WebModule actions een PageProducer welke allemaal op 1 WebModule is plaatst waar achter alle code zit om deze templates te parsen? Als dat zo is dan zit alle code voor het koppelen van je objecten aan de templates in 1 unit, niet echt een ideale situatie toch?

  5. #5
    Ik heb in mijn home unit alleen een TMarcelDispatcher staan die aan de hand van de call de juiste datamodule aanmaakt. Dus een call naar

    http://www.nldelphi.com/cgi-bin/active.exe/links

    ...maakt de datamodule Links aan en stuurt de call door naar deze datamodule. Je kunt dat ook zien door

    http://www.nldelphi.com/cgi-bin/active.exe/rechts

    aan te roepen, je krijgt dan de nette melding "Class Trechts not found ".
    Marcel

  6. #6
    Heb je op je DataModule dan gewoon de PageProducers zitten? Zoja, hoe koppel je deze dan aan je WebActions?
    Last edited by Vos; 28-Feb-03 at 17:01.

  7. #7
    Als ik een pageprducer nodig heb wel ja, de datamodule krijgt de dispatcher als property mee.
    Marcel

  8. #8
    Heb je hier misschien een simpel voorbeeld van, of een site waar dit soort dingen goed staat uitgelegd?

  9. #9
    Nee, eigenlijk niet. Welk gedeelte is niet duidelijk dan?
    Marcel

  10. #10
    Ik wil dus een web applicatie welke veel pagina's moet kunnen bevatten, dus lijkt het me makkelijk deze op te splitsen in data modules. Bijvoorbeeld een module voor het relatie gedeelte (klanten, leveranciers, e.d.), een module voor het artikel geldeelte, enz.

    Als er dan op de web module een aanvraag binnenkomt voor /relaties/klanten bijvoorbeeld hoe zorg ik er dan voor dat hij een relatie module aanmaakt en vervolgens een lijst van klanten terug geeft (dus de content van de PageProducer welke deze lijst kan maken).

    Het probleem ligt niet zo zeer bij het parsen van de templates maar meer de verdeling van de aanvragen over de verschillende data modules.

  11. #11
    De eenvoudige versie:
    Code:
    if Request.Path = 'relaties' then
      with TRelaties.Create(self, Dispatcher) do
      try
        Response.Content := Content;
      finally
        Free;
      end;
    In een meer geavanceerde versie zou de datamodule zichzelf bij de HomeModule registreren in de initialisation en kan de HomeModule een TList van deze classes aflopen en aanmaken. Op deze manier kun je een onbeperkt aantal datamodules maken.
    Marcel

  12. #12
    Zeer goed! Ik snap niet waarom ik niet met dit idee was gekomen maar het werkt. Mag ik je hartelijk bedanken voor je hulp.

  13. #13
    Had nog een aansluitende vraag hierover: ik wil een bepaalde melding als er geen gegevens zijn om een lijst te maken bijvoorbeeld "Er zijn geen klanten gevonden".

    Maar hoe geef ik dit aan in de template, eigenlijk zou je daar toch een soort van conditie willen opstellen, maar dat kan dus niet. Hoe los ik dit op?

  14. #14
    Dan zet je een tag <#Melding>. Als er een melding te melden is doe je dat in de Melding tag, is er niets te melden verdwijnt de Melding tag vanzelf.
    Marcel

  15. #15
    Maar dan zit die melding dus "hard-coded" in je dll, en volgens mij heeft zo'n melding betrekking op de user-interface (templates) en zou je die daar ook willen vast stellen. Ik denk bijvoorbeeld aan templates voor verschillende talen.

    Doordat ik eigenlijk zelf ook geen betere oplossing weet zou ik het ook zo oplossen zoals jij hier beschrijft.


    Edit:
    Heb er nog even naar gekeken en dit lijkt me toch een prima oplossing:
    <#clientlist nodatamessage="Er zijn geen klanten gevonden">
    Last edited by Vos; 04-Mar-03 at 01:33.

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Pointer, Buffer, Pchar en conversie hiervan.
    By Richard in forum Algemeen
    Replies: 3
    Last Post: 11-Aug-01, 01:35

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •