Ahh. Dawn begins to break over Marblehead. Thank you all.<br><br>Bryan<br><br><div class="gmail_quote">On Wed, Jun 17, 2009 at 9:35 AM, Jens Teich <span dir="ltr"><<a href="mailto:info@jensteich.de">info@jensteich.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Bryan Emrys schrieb:<br>
<div><div></div><div class="h5">> Now I'm really confused. Ken's example does exactly what I want when I create a gridify function and call it from a page macro (defmacro templates at the bottom of the email). But if I put the function body into the page macro, (see second example), it doesn't work. Rather, it prints the entire table, complete with tr and td with no string - then drops the list of strings after the table<br>

> Both use exactly the same macros to generate the page and it is a cut and paste job. Somehow putting the function body into the macro is changing how the loops work:<br>
><br>
> WORKS<br>
> (defun gridify (x &optional (col 5))<br>
>   "given a list of strings, put them in an html table (returned as a string) with |col| columns."<br>
>   (with-html-output-to-string (var nil)<br>
>     (:table<br>
>       (loop for xp on x by (lambda (p) (nthcdr col p))<br>
>         do (htm (:tr (loop for i upto (1- col) for (id name) in xp<br>
>                        do (htm (:td (:a :href (format nil "~a~a" "countries-display?id=" id) (str name)))))))))))<br>
><br>
> (defpage-easy-slp gridify-countries "Countries Grid" "/gridify-countries" ()<br>
>   (let* ((data-query "select id,name from countries order by name ")<br>
>          (results (query data-query))<br>
>          (col 5))<br>
>     (gridify results col)))<br>
><br>
> DOESNT WORK<br>
><br>
> (defpage-easy-slp countries-grid "Countries Grid" "/countries-grid" ()<br>
>   (let* ((data-query "select id,name from countries order by name ")<br>
>        (x (query data-query))<br>
>        (col 5))<br>
>     (with-html-output-to-string (var nil)<br>
>       (:table<br>
>           (loop for xp on x by (lambda (p) (nthcdr col p))<br>
>           do (htm (:tr (loop for i upto (1- col) for (id name) in xp<br>
>                        do (htm (:td (:a :href (format nil "~a~a" "countries-display?id=" id) (str name))))))))))))<br>
><br>
> DEF MACROS<br>
><br>
> (defmacro page-template (title &body body)<br>
>     `(with-html-output-to-string (*standard-output* nil :prologue t :indent t)<br>
>     (:html<br>
>       (:head<br>
>        (:link :rel "stylesheet" :type "text/css" :href "/css/screen.css" :media "screen")<br>
>       (:title (str (format nil " ~a" ,title))))<br>
>       (:body<br>
>        (:div :class "container"<br>
>          (:div :class "column span-24"<br>
>            (str ,@body))))))))<br>
><br>
> (defmacro defpage-easy-slp (name title uri parameter-list &body body)<br>
>     `(define-easy-handler (,name :uri ,uri<br>
>                              :default-request-type :both)<br>
>        ,parameter-list<br>
>       (page-template ,title ,@body)))<br>
<br>
</div></div>see <a href="http://lisp-univ-etc.blogspot.com/2009/03/cl-who-macros.html" target="_blank">http://lisp-univ-etc.blogspot.com/2009/03/cl-who-macros.html</a><br>
<font color="#888888"><br>
Jens<br>
</font><div><div></div><div class="h5"><br>
<br>
_______________________________________________<br>
cl-who-devel site list<br>
<a href="mailto:cl-who-devel@common-lisp.net">cl-who-devel@common-lisp.net</a><br>
<a href="http://common-lisp.net/mailman/listinfo/cl-who-devel" target="_blank">http://common-lisp.net/mailman/listinfo/cl-who-devel</a><br>
</div></div></blockquote></div><br>