How to write forms?

To write an HTML form towards an Eliom service

The syntax is the same as for links, for instead of the content of the form, it takes a function that will generate the content from parameter names. Example:

let create_form =
  (fun (number_name, (number2_name, string_name)) ->
    [p [pcdata "Write an int: ";
        Html5.D.int_input ~input_type:`Text ~name:number_name ();
        pcdata "Write another int: ";
        Html5.D.int_input ~input_type:`Text ~name:number2_name ();
        pcdata "Write a string: ";
        Html5.D.string_input ~input_type:`Text ~name:string_name ();
        Html5.D.string_input ~input_type:`Submit ~value:"Click" ()]])

let form = register_service ["form"] unit
  (fun () () ->
     let f = Html5.D.get_form coucou_params create_form in
     return
       (html
         (head (title (pcdata "")) [])
         (body [f])))

POST forms may also take get parameters, as last argument of function post_form:

Eliom_content.Html5.D.post_form
  my_service_with_get_and_post
  (fun chaine ->
    p [pcdata "Write a string: ";
       string_input ~input_type:`Text ~name:chaine ()])
  222

Raw forms

There is also a raw interface to write basic forms without Eliom, using standard tyxml constructors.

Use module Eliom_content_core.Html5.D.Raw.

Links