zenglBlog v0.6.0 - v0.6.2的版本实现了生成静态页面的功能。在后台增加了生成静态页面的菜单,在生成静态页面,默认是生成全部分类的静态页面,也就是生成全站的静态页面...

    页面导航: 项目下载地址:

    zenglBlog源代码的相关地址:https://github.com/zenglong/zenglBlog  最新版本对应的tag标签为:v0.6.2

zenglBlog v0.6.0 - v0.6.2:

    zenglBlog v0.6.0 - v0.6.2的版本实现了生成静态页面的功能。在后台增加了生成静态页面的菜单:



图1:后台生成静态页面的菜单

    在生成静态页面,默认是生成全部分类的静态页面,也就是生成全站的静态页面。也可以通过下拉菜单选择某个具体的需要生成静态页面的分类。点击开始生成按钮,可以执行生成操作:



图2:执行生成静态页面的操作

    在生成静态页面时,会依次生成各个分类的文章内容页,分类列表页,最后生成首页。和生成静态页面相关的脚本为:admin/make_html.zl,admin/make_article_html.zl,admin/make_index_html.zl,其中,make_html.zl用于生成后台界面。在点击开始生成按钮时,后台会通过异步请求的方式先请求make_article_html.zl脚本,用于生成文章内容页和分类列表页。在分类的静态页面生成完后,最后异步请求make_index_html.zl脚本用于生成首页的静态页面。make_html.zl脚本的内容如下:

inc 'common.zl';

querys = rqtGetQuery();
action = querys['act'] ? querys['act'] : 'show';
if(action == 'show')
	MakeHtml.show();
else
	print 'invalid act';
endif

class MakeHtml
	fun show()
		global menus, querys;
		data['title'] = '生成静态页面:';
		setCurMenu(menus, 'make_html.zl');
		data['menus'] = menus;
		db = MakeHtml.initDB();
		data['categories'] = Mysql.fetchAll(db, "select id,name from category order by id asc");
		print bltMustacheFileRender("tpl/make_html.tpl", data);
	endfun

	// 初始化数据库连接
	fun initDB()
		global config;
		db = bltArray();
		Mysql.init(db, config, "tpl/error.tpl");
		return db;
	endfun
endclass


    make_article_html.zl脚本的内容如下:

inc 'common.zl';
inc '../helper.zl';
inc '../article.class.zl';

// 初始化数据库连接
fun initDB()
	global config;
	db = bltArray();
	Mysql.init(db, config, "tpl/error.tpl");
	return db;
endfun

db = initDB();
querys = rqtGetQuery();
categories = Mysql.fetchAll(db, "select id,name from category where pid=0 order by id asc");

cid = bltInt(querys['cid']);
where = (cid > 0) ? ' where cid=' + cid : '';
p = bltInt(querys['p']);
p = (p > 0) ? p : 1;
limit = config['list_page_count'];
offset = (p - 1) * limit;
articles = Mysql.fetchAll(db, "select id, title, DATE_FORMAT(created_at, '%Y%m') as format_created from article "+where+" order by id desc limit " + offset + "," + limit);
bltMkdir('../a');
for(i=0;bltIterArray(articles,&i,&v);)
	querys['id'] = v['id'];
	content = Article.show(TRUE);
	dir = '../a/' + v['format_created'];
	bltMkdir(dir);
	bltWriteFile(dir  + '/' + v['id'] + '.html', content);
endfor
data['articles'] = articles;
if(bltStr(&querys['getinfo']) == 'yes')
	data['info'] = Mysql.fetchOne(db, "select count(1) as count from article where cid=" + cid);
	bltInt(&data['info', 'count'], TRUE);
endif
if(cid > 0)
	data['category'] = Mysql.fetchOne(db, "select id,name from category where id=" + cid);
	if(bltCount(data['category']) > 0)
		querys['page'] = p;
		content = Article.list(TRUE);
		bltMkdir('../c');
		dir = '../c/' + cid;
		bltMkdir(dir);
		if(p == 1)
			bltWriteFile(dir  + '/index.html', content);
		else
			bltWriteFile(dir  + '/' + p + '.html', content);
		endif
	endif
endif
rqtSetResponseHeader("Content-Type: application/json");
print bltJsonEncode(data);


    上面脚本中,文章内容页会生成到网站根目录的a目录中(会自动尝试创建该目录),并根据文章创建时间以年月格式生成子目录,最后在时间目录内根据文章的ID生成文章内容页,例如:a/201807/3.html 。对于分类列表页,会在网站根目录创建一个c目录,然后根据分类ID创建子目录,如果生成的是分类的第一页,则文件名就是index.html,例如:c/1/index.html,否则就是分页号加html,例如:c/1/2.html 。

    make_index_html.zl脚本的内容如下:

inc 'common.zl';
inc '../index.class.zl';

// 初始化数据库连接
fun initDB()
	global config;
	db = bltArray();
	Mysql.init(db, config, "tpl/error.tpl");
	return db;
endfun

db = initDB();
querys = rqtGetQuery();
categories = Mysql.fetchAll(db, "select id,name from category where pid=0 order by id asc");

content = Index.index(TRUE);
bltWriteFile('../index.html', content);
data['index'] = 'success';
rqtSetResponseHeader("Content-Type: application/json");
print bltJsonEncode(data);


    上面脚本会直接在网站根目录中生成index.html的首页静态文件。

    当前版本还在config.zl配置文件中增加了几个配置:

config['db_host'] = 'localhost';
config['db_port'] = 3306;
config['db_user'] = 'root';
config['db_passwd'] = '123456';
config['db_name'] = 'testdb';
config['version'] = '0.6.2';
config['comment'] = TRUE; // 是否开启评论
config['site_name'] = 'zenglBlog'; // 站点名称
config['site_desc'] = 'blog made by zengl language'; // 站点描述
config['list_page_count'] = 10; // 前台列表页每页显示的文章数


    新增的配置都加了注释,例如:comment表示是否在前台开启评论,如果为FALSE,就表示不开启评论。site_name表示站点名称,site_desc表示站点描述(用于SEO)。最后,list_page_count表示前台分类列表一页需要显示的文章数。

    这几个版本对zenglServer的最低版本要求是v0.13.0 。

结束语:

    人生最难学的课程,就是要认识自己

——  《学警雄心》
 
上下篇

下一篇: zenglBlog v0.7.0 增加公告功能,内容页图片自适应,首页及列表页样式调整

上一篇: zenglBlog v0.5.0 发表评论,图形验证码

相关文章

zenglBlog v0.1.0 登录和后台界面

zenglBlog v0.5.0 发表评论,图形验证码

zenglBlog v0.2.0 分类管理

zenglBlog v0.3.0 文章管理,图片上传,生成缩略图

zenglBlog v0.8.0 增加保存草稿,友情链接,内容页上下篇,手机端返回顶部图片

zenglBlog v0.4.0 前台首页,文章列表,文章内容页