Saturday, June 24, 2006

Erlang + Yaws 101 ตอน 2

วันนี้ลองพูดถึงการ render output ของ yaws บ้าง
นามสกุลของ file ที่ yaws มองว่าเป็น dynamic script
ก็คือ .yaws

หน้าตาก็ประมาณนี้
<html>
<h1>Test</h1>
<erl>
out(A) ->
{html, "helloworld"}.
</erl>
</html>

โดยข้อกำหนดของ Yaws ก็คือ ภายใน tag erl
จะต้องมี function ที่ชื่อ out/1 ประกาศอยู่
หลายคนคงจะสงสัย ทำไมที่ท้ายชื่อมีเลข 1 แปะอยู่ด้วย
เนื่องจาก function ของ erlang ใช้กลวิธี pattern matching
ในการเลือก function ขึ้นมาทำงาน
ดังนั้น signature ของ function ก็เลยใช้ตัวเลขบอกจำนวน argument มาใช้

จะเห็นว่าหน้าตามันก็คือ template language ที่เราเขียนกันอยู่นี่แหล่ะ
ไม่่ว่าจะเป็น jsp, php, rhtml, ...

แต่บางคนไม่นิยมเขียนแบบนั้น
Style แบบนี้บางทีก็ดูถูกใจพวก hardcore มากกว่า
<html>
<erl>
out(A) ->
{ehtml, {table, [{bgcolor, grey}],
[
{tr, [],
[
{td, [], "1"},
{td, [], "2"}
]}]}}.
</erl>
</html>


ถ้าอยากได้ content-type แบบอื่นๆ ก็ให้ return แบบนี้แทน
<erl>
out(A) ->
{content, "text/json", "{name: 'hello'}"}.
</erl>


ในกรณีที่แปลงเป็น json ก็สามารถ download library ejson มาใช้ได้
<erl>
out(A) ->
{content, "text/json", json:encode(json:obj_from_list([{"foo", "bar"}]))}.
</erl>


ถ้าจะ redirect ก็ return แบบนี้
<erl>
out(A) ->
{redirect, "http://localhost"}.
</erl>

Related link from Roti

No comments: