前段时间,一位使用帝国CMS的朋友问我,帝国的碎片是什么意思,是做什么用的?我是这样回答的:现在很多门户网站的首页的信息大部分不是自动读取的,而是编辑手动添加或推荐的,每个编辑负责一个区块,手动推荐热点信息,分工负责,现在的CMS中的所说有碎片即是这样的区块片段,每个编辑负责一块碎片手动的更新。
那么碎片应该具备哪些功能呢?落叶认为应该具备如下功能:
1) 能够选择手动格式化添加文章标题及文章链接、摘要等信息(静态碎片)
2) 能够选择使用标签自动调用数据或者供推送数据(动态碎片)
3) 能够直接使用HTML添加数据(代码碎片)
4) 碎片具有权限设置功能,不同的编辑只能修改具有权限的碎片(碎片编辑权限)
5) 碎片更新后能够做到页面不重新生成,内容自动更新(碎片更新)
6) 碎片信息调用灵活(碎片调用)
下面就逐点对比分析帝国CMS与PHPCMS的碎片功能:
1) 静态碎片
帝国CMS和PHPCMS中都具有静态碎片的功能,只是叫法不同。PHPCMS中称作“格式化碎片”,即以表单的形式添加标题、摘要、链接、缩略图等信息。
帝国CMS中称“静态碎片”,和PHPCMS不同之处在于帝国的信息数据是单条添加,较之于PHPCMS,方便性稍微差一些,PHPCMS直接一次性填写设定的N条信息后一次提交。
帝国单条信息添加的优点是可以单独设定每个标题的属性,实际门户网站的“不规则新闻”功能,PHPCMS中虽然也可以通过改下方的单条信息模板来实际,但因为是数据循环,统一操作,如果要像帝国这样实现单条信息的个性化及不规则新闻,那需要作较多的逻辑判断。
另外,帝国的单条信息的标题、链链等信息可以通过点击“通过信息ID获取”,实际使用发现,其实是个鸡肋,因为点开后是要直接填写栏目ID和文章ID来获取,去查看文章的栏目ID和文章ID再去填写的这会儿功夫,还不如直接打开文章复制粘贴下来得快来得直接。PHPCMS中支持能通过关键词搜索信息来添加,设计思路挺不错的,不过实际使用中结果不一定太理想,一般不怎么用,都是直接把要手动推荐的信息,复制标题、链接、摘要粘贴,上传下缩略图,然后保存。
2) 动态碎片
以前在使用PHPCMS的碎片功能时,落叶一直期待PHPCMS能够实现动态碎片功能,即在PHPCMS的非格式化碎片中可以直接使用PHPCMS的数据调用标签如TAG标签和GET标签,但实际由于PHPCMS的设计思路是碎片以静态方式保存后引用,没经过PHPCMS的模板引擎处理,所以一直没法实现这个期待。前段时间在测试帝国CMS的碎片功能时,发现帝国CMS提供了动态碎片功能,以为是可以在碎片中能通过内置标签调用数据,结果发现,帝国CMS的动态标签居然是通过填写栏目ID和文章ID来调用,虽然可以实现动态信息的调用,但仔细想想,这样有意义吗?还是老话,找栏目ID和文章ID这会功夫,复制粘贴下不知快多少!
如果让我来设计动态碎片,那一定想办法实现可在碎片中自由使用任何系统标签,退一步讲,按照像帝国CMS这样的思路,通过填写栏目ID和文章ID来获取,至少也加个“浏览”的按钮,让大家直接浏览或者通过关键词搜索已发布过的信息的标题,勾选后批量添加。
帝国CMS的这个动态碎片功能如果不继续改进(仿照DZX的数据推送功能、或者DEDECMS专题中添加节点数据的操作),无疑是一个败笔。
3) 代码碎片
代码碎片实际是提供一个文本域或者文本编辑器,可以让站长直接粘贴编辑好的HTML代码或者JS代码来手动添加内容。
PHPCMS和帝国CMS中都提供了代码碎片的功能,PHPCMS中称作“非格式化碎片”,两者功能一样,只是PHPCMS中做的更简洁一些,就一个FCK编辑器,然后默认编辑模式为代码模式即可,而帝国CMS中默认只是一个textarea,得点击可视化编辑才弹出编辑器界面,想不通帝国CMS为啥要这样做,直接放个编辑器默认为代码模式不是方便多了。在代码模式下添加HTML后,点到非代码模式预览下效果,然后保存不是很好?
另外,如果是代码碎片中能支持调用系统标签,那将是多么完美,我在PHPCMS论坛看过很多人期待这个需求,不过目前还没有被实现过。
4) 碎片编辑权限
门户网站首页不同区块的编辑各司其职,维护自己管理的区块的文章的推送,为了方便管理和考核,必然需要完善的编辑权限控制,这一点,帝国CMS和PHPCMS的碎片功能在添加碎片时都有考虑到,并且提供了相应的功能。
PHPCMS中则是通过角色来实现的,帝国CMS中则除了通过用户组控制外,另外可以通过“部门”来控制,甚至细化到具体会员,这一点帝国CMS做的细致一些,不过,帝国CMS中的“部门”和PHPCMS的“角色”相当,实现二者的权限功能是相当的,因为PHPCMS中只要自定义个角色,然后把需要赋予权限的用户添加到角色下,即可实现对用户的细化。从现在主流权限控制系统RBAC来看,PHPCMS的设计更主流一些。
PHPCMS的碎片权限设置如下图:
帝国CMS的碎片权限设置如下图:
5) 碎片更新
对于碎片的更新,最好的预期是,碎片信息更新后,引用碎片的文件无需重新生成,即可自动更新,不过,貌似如果生成静态的页面中调用碎片的,能实现这一需求的只有在PHPCMS中开启SHTML才能实现。
PHPCMS中开启SHTML支持,然后把文章生成.shtml扩展名的文件后,所有碎片的引用方式都直接采用SSI指令引用(PHPCMS中的碎片是以HTML文件存储的,如果不开启SHTML支持,那么碎片静态文件能过file_get_contents函数读取整合到静态文件中生成,如果开启SHTML,则使用SSI指令引用。)通过SSI指令引用的碎片HTML内容更新后,SHTML页面无需重新生成,其内容也会自动跟着更新,这点非常不错。
帝国CMS中的碎片信息是直接存储在数据库中的,使用标签读取,没有也不会有这样的功能。
另外,PHPCMS中碎片信息的更新,可以是可视化的,在后台模板可视化管理处,直接点击碎片即可进入进行编辑。帝国CMS中碎片单条信息实际仍然是单条记录,和普通文章的添加、编辑没啥区别。
6) 碎片调用
PHPCMS中的碎片的调用是非常简单的,在PHPCMS任何模板的任何位置,直接使用block函数调用即可,如<!--{block("testsp", 1)}-->即可调用名为testsp的碎片的整个信息。
至于帝国CMS中,碎片的调用,使用碎片标签〔spinfo〕碎片变量名,显示条数,标题截取数〔/spinfo〕来实际,实际和其它文章数据的调用没啥区别。