这几天闲着无聊,找cms折腾一下,先是搞了大名鼎鼎的dedecms,不过那繁琐真不是盖的,想修改个模板不知从哪里动手。虽然现在工作的后台也是由dedecms改过来的,但平时也就发发文章而已。

然后就找到了这个神器:AKCMS,非常轻量,但功能强大,作者更新勤快,还很贴心的写了manual。虽然免费版只提供内核,模板和设置都需要自己弄,但咱这不正找折腾吗,一下就喜欢上了。。

(其实在找到这个之前还看上了一个“羊驼!CMS”,没错就是这个名字,可惜无论是虚拟主机还是本地的xampp都没装上,只好放弃。。)

 

这里记录一下折腾中出现的问题和解决方法。

 

1、没有安装路径,直接自动安装在根目录。

akcms自动安装在上一级的目录,所以要想安装在子目录,需要将安装文件放在二层子目录中。

 

2、自定义前台地址和后台地址。设置了二级域名绑定子目录(cpanel有这个功能),但访问不成功。

这个还是跟安装有关,akcms自动安装在上一级目录,比如\aaa\akcms,则实际安装目录是\aaa,

因此前台地址是domain.XXX\aaa,后台地址是domain.XXX\aaa\akcms。

 

3、模板设置。

一般来说,第一次安装最少需要设置这几个主模板:

page_home.htm   ------------对应首页

category_home.htm ---------对应栏目首页

category_list.htm  ------------对应栏目列表(和上一个有什么区别尚不清楚)

item_page.htm  --------------对应文章页面

以上都是akcms的默认名称,因此以后在相应设置时可以采用默认。

 

4、栏目设置。

默认栏目可以修改,最好不要删除,因为它的id是1,删掉再建就是id2了。。

栏目需要设置别名和目录,然后会在安装目录下面创建目录,如果没有设置目录就直接创建以id为名的目录。

 

5、发文章与文章页面模板的对应,目前虽然设置了模板但不能对应,点击相应的文章是空白页面。(模板里有html代码,但这个页面是完全的空白。)

唔,事实证明,item_page不是akcms的默认名称,因此需要在栏目的设置里,将内容也第一套模板指定为item_page.htm。改后正常。

 

6、在虚拟主机上建子模板header和footer,然后在主模板里引用,但<{include XXX}>函数无效。

在本机上出现一样的问题,换了模板证明include函数可用,再检查代码,发现双引号是中文的,给跪了,改成为英文后正常。

 

7、生成页面后,点击栏目进入栏目首页,发现css未加载。

原因是css使用了绝对路径,改用<{$home}>/style/……后正常。

 

8、添加内容页面太简陋,且没有作者、来源等选项。

在“系统-模块-内容”里设置。没有来源地址,可添加扩展字段,扩展字段需要排序值,否则保存不了。

 

9、文本编辑器太简陋,想换用fckeditor。

暂时解决方法:升级后台编辑器

 

10、在模板里加入评论模块后,提交评论无反应,验证码也刷不出来。

需在后台“设置-用户设置”里开启相关功能。

 

11、用akcms实现专题。

想到有两种方法,一种是在栏目下建一个子栏目,专门放专题文章,这样通过调用栏目可以很方便的调用专题页面和专题文章。另一种是利用主题,这样一篇文章可以同时属于栏目和专题,较符合一般的CMS。

后决定采用主题,不过主题在akcms 4.x中是个未完成的功能。

 

12、无法调用主题列表和主题地址。

采用getsqls,直接读取数据库内容,教程见此

ps:akcms 5.0后有getsections可调用主题相关内容。

 

13、无法调用当前时间。

采用在模板中嵌入php代码,再调用date()函数。

ps:akcms 5.0后有gettime可调用时间相关内容。

 

14、用getpaging调用分页发现奇怪的问题:参数传递不进template里,且分页地址不是后台自定义的,而是这里设置的template里的地址,而且这个地址里的变量无法变换,像我加了个参数[category],并且定义了值,但是最后分页url却还是[category]/index-2.html的形式。

搞定这个费了不少劲,仔细看了akcms的php代码才弄清楚。

现在明白这是akcms 4.2.9的一个bug,我看了下5.0的已经修复了这个bug。

bug的原因是getpaging函数使用了一个中间变量$baseurl,但这个变量与全局变量同名,结果给污染了,静态化的时候要使用这个变量,结果就产生错误了。

解决的方法只有修改源文件了,将include/getdata.func.php 里的getpaging里的nohtml下面的两处$baseurl改名,然后template里的url定为index-[page].html即可。