4、动态网页的创建和初始内容
进入创建的项目目录:
$ cd d:/erl5.6.5/lib/nitrogen/project1
创建一个新网页:
$ nitrogen page /web/blog/post
escript: Failed to open file: /usr/local/bin/nitrogen
结果失败了。原因可能是使用shell命令ln不对造成的。也不知道如何纠正。
改用命令如下:
$ escript nitrogen page /web/blog/post
Creating file: "web_blog_post.erl"
这次成功了。目录D:/erl5.6.5/lib/nitrogen/project1/src/pages中看到了这个文件:
-module (web_blog_post).
-include_lib ("nitrogen/include/wf.inc").
-compile(export_all).
main() ->
#template { file="./wwwroot/template.html"}.
title() ->
"web_blog_post".
body() ->
#label{text="web_blog_post body."}.
event(_) -> ok.
需要弄清的4个问题:
(1)函数main()的用途:
它是自动运行的,确定以静态网页file作为生成动态网页的模板。模板以记录形式表示:
#template { file="./wwwroot/template.html"}.
(2)-include_lib ("nitrogen/include/wf.inc").路径是否可以这样?
在Eshell中实验编译web_blog_post.erl:
2> c("D://erl5.6.5//lib//nitrogen//project1//src//pages//web_blog_post").
d:/erl5.6.5/lib/nitrogen/project1/src/pages/web_blog_post.erl:2: can't find include lib "nitrogen/include/wf.inc"
d:/erl5.6.5/lib/nitrogen/project1/src/pages/web_blog_post.erl:6: record template undefined
d:/erl5.6.5/lib/nitrogen/project1/src/pages/web_blog_post.erl:12: record label undefined
error
可见不行。将wf.inc所在的目录改为绝对路径:
-include_lib ("d:/erl5.6.5/lib/nitrogen/include/wf.inc")
再次在Eshell中实验编译:
3> c("D://erl5.6.5//lib//nitrogen//project1//src//pages//web_blog_post").
{ok,web_blog_post}
4>
成功了。当然这并非唯一的解决办法。
(3)wf.inc文件干什么用?
它类似C语言的.h头文件,定义一些宏、记录等数据结构。
文件的内容格式是:
-ifndef(wf_inc).
具体定义的内容……
-endif.
这个结构保证程序编译时,wf.inc不被重复包含。
这个文件很重要,Nitrogen自定义的数据结构全部在此。
(4)#label{text="web_blog_post body."}.是什么意思?
在动态网页中,它被翻译成:
<span id='temp577000' class='label '>web_index body.</span>
label是class的名字,"web_blog_post body."是显示的内容。