Index: bknr/web/src/web/handlers.lisp =================================================================== --- bknr/web/src/web/handlers.lisp (Revision 4409) +++ bknr/web/src/web/handlers.lisp (Arbeitskopie) @@ -717,7 +717,12 @@ (ensure-directories-exist spool-dir) spool-dir))
-(defmethod website-show-page ((website website) fn title) +(defmethod website-show-page ((website website) fn title) + "Method for generating the code for a normal website page. +This gets called by with-bknr-page, whereas FN is a function with zero parameters +containing the body of a with-bknr-page call. TITLE is the title as specified by a +with-bknr-page call. +Redefine to add your own behavior." (html (:html (:head @@ -733,6 +738,12 @@ (session-info)))))
(defmethod website-show-error-page ((website website) error) + "Method for generating the code for an error page. +This gets called by an error handler in case something goes wrong on the server side. +ERROR is a string describing the error which happened. + +Redefine to add your own behavior." (if (and (website-template-handler website) (error-template-pathname (website-template-handler website))) (send-error-response (website-template-handler website) (princ-to-string error)) @@ -747,12 +758,22 @@ (:princ-safe error)))))))
(defun show-page-with-error-handlers (fn &key (response +http-ok+) title) + "Sets up the http-response RESPONSE, content-type "text/html; charset=UTF8" and the xhtml stream which is used to send +html to the clients. Then calls website-show-page for the current website with the given FN and TITLE." (setf (return-code*) response) (with-http-response (:content-type "text/html; charset=UTF-8" :response response) (with-http-body () (website-show-page *website* fn title))))
(defmacro with-bknr-page ((&rest args) &body body) + "Macro which sets up everything so you can directly write your html code. +ARGS is a property list and can be any of the KEYWORD arguments which can also be given to +show-page-with-error-handlers. Noteworthy in particular are :title and :response. +The BODY will be given to website-show-page as a lambda function. + +Example: + * (with-bknr-page (:title "Random Page") + (:p (:princ-safe "Randomness"))) " `(show-page-with-error-handlers (lambda () (html ,@body)) ,@args))
#+(or) @@ -765,5 +786,6 @@ ,@body))))))
(defun unpublish () + "Unpublish a website by removing the BKNR dispatcher from the global *dispatch-table*" (setf *dispatch-table* (remove 'bknr-dispatch *dispatch-table*) *handlers* nil))