webmodule.pas 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. unit webmodule;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. SysUtils, Classes, httpdefs, fpHTTP, fpWeb, fpTemplate;
  6. type
  7. { TFPWebModule1 }
  8. TFPWebModule1 = class(TFPWebModule)
  9. procedure func1callRequest(Sender: TObject; ARequest: TRequest;
  10. AResponse: TResponse; var Handled: Boolean);
  11. private
  12. { private declarations }
  13. procedure func1callReplaceTag(Sender: TObject; const TagString:String;
  14. TagParams: TStringList; Out ReplaceText: String);
  15. function UseTemplate(TemplateFile:String; TagHandler:TReplaceTagEvent):String;
  16. public
  17. { public declarations }
  18. end;
  19. var
  20. FPWebModule1: TFPWebModule1;
  21. implementation
  22. {$R *.lfm}
  23. { TFPWebModule1 }
  24. procedure TFPWebModule1.func1callRequest(Sender: TObject; ARequest: TRequest;
  25. AResponse: TResponse; var Handled: Boolean);
  26. begin
  27. //func1callReplaceTag is recursively processing the template tags for all
  28. //embedded templates (INCLUDETEMPLATE tag defines a new template to embed)
  29. AResponse.Content := UseTemplate('maintemplate', @func1callReplaceTag);
  30. Handled := true;
  31. end;
  32. function TFPWebModule1.UseTemplate(TemplateFile:String; TagHandler:TReplaceTagEvent):String;
  33. var TMPTemplate:TFPTemplate;
  34. begin
  35. TMPTemplate := TFPTemplate.Create;
  36. TMPTemplate.FileName := '/path/to/templates/' + TemplateFile + '.html';
  37. TMPTemplate.AllowTagParams := true;
  38. TMPTemplate.StartDelimiter := '{+';
  39. TMPTemplate.EndDelimiter := '+}';
  40. TMPTemplate.OnReplaceTag := TagHandler;
  41. Result := TMPTemplate.GetContent;
  42. TMPTemplate.Free;
  43. end;
  44. procedure TFPWebModule1.func1callReplaceTag(Sender: TObject; const TagString:
  45. String; TagParams: TStringList; Out ReplaceText: String);
  46. begin//HTML template tag handling for an html template file
  47. if AnsiCompareText(TagString, 'DATETIME') = 0 then
  48. begin
  49. ReplaceText := FormatDateTime(TagParams.Values['FORMAT'], Now);
  50. end else
  51. if AnsiCompareText(TagString, 'INCLUDETEMPLATE') = 0 then
  52. begin
  53. ReplaceText := UseTemplate(TagParams.Values['TEMPLATEFILE'], @func1callReplaceTag);
  54. end else begin
  55. //Not found value for tag -> TagString
  56. ReplaceText := 'Template tag {+' + TagString + '+} is not implemented yet.';
  57. end;
  58. end;
  59. initialization
  60. RegisterHTTPModule('TFPWebModule1', TFPWebModule1);
  61. end.