Gotchas! ======= 1. All items for a page *must* be part of a list! OK: (list (function1 param1)(function2 param2)) NOT OK: (begin (function1 param1)(function2 param2)) Various components ================== ====================================================================== 1. Create a link. (s:null "[" (s:a name 'href (s:link-to (string-append "location/" (string-intersperse p "/") ""))) "] "))) ====================================================================== 2. Call current page with new param In view.scm: (s:center "[" (s:a 'href (s:link-to "polls" 'id (begin (poll:poll 'fill-polls) (poll:poll 'get-next-poll))) "Go to the next poll") "]") In control.scm: (let ((poll-id (s:get-param 'id))) ;; do stuff based on poll-id ====================================================================== 3. Call an action on a specific page (s:a 'href (s:link-to "polls" 'id (poll:poll 'get 'id) 'action "poll.edit") "Suggest changes to this poll") NOT TRUE! This calls fuction poll.edit (should be in control.scm). Parameter set is 'id to a poll num. ====================================================================== 4. A complex link example (s:a "Reply" 'href (s:link-to (s:current-page) 'action "discussion.reply" ;; . 'reply_to (number->string (hash-table-ref row 'posts.id)) 'id (s:get "discussion.parent_object_id")) "reply") ;; use (s:get-param to get the 'id, or 'reply_to values ====================================================================== 5. Get and set a session var (s:session-var-get "keyname") (s:session-var-set! "keyname" "value") 5.1 Page local vars (s:set! key val) (s:get key) ====================================================================== 6. make a selection drop down In view.scm: (s:select '(("World" 0)("Country" 1)("State" 2)("Town/City" 3)) 'name 'scope) In control.scm: (let ((scope (s:get-input 'scope))) .... ====================================================================== 7. Simple error reporting In control.scm: (s:set-err "You must provide an email address") In view.scm: (s:get-err s:err-font) Or: (s:get-err (lambda (x)(s:err-font x (s:br)))) ====================================================================== 8. Misc useful stuff i. Lazy/safe string->number (s:any->number val) ii. Random string (session:make-rand-string len) iii. string to number for pgint (s:any->pgint val) ====================================================================== 9. Forms and input (s:form 'action "login.login" 'method "post" (s:input-preserve 'type "text" 'name "email-address" 'size "16" 'maxlength "30") (s:input 'type "submit" 'name "form-name" 'value "login")) (s:get-input 'email-address) To preserve the input simply do a set of the value on the 'name field: (s:set! "email-address" "matt@kiatoa.com") ====================================================================== 10.