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" ;; <page>.<action> '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.