澳门新葡萄京娱乐场帝国、PHPCMS及织梦三款CMS比较

看到论坛里很多人都在问,如果能在用户投稿的文章后显示该用户的头像,如果能在
企业用户发布的信息 后显示该企业的其他信息等

标签设置教程
我们从简单到复杂

早期的文章管理系统,数据表字段模型都会内置好,按自己的思路,把文章模型、信息模型、图片模型都内置,然后用户根据需要,在设置栏目时选择不同的模型,实现不同的需求。然而这种内置模型字段的方式,不能很好的满足站长的各种个性化需求,所以各种CMS都推出了自定义模型和自定义字段的功能。

其实这些功能可以用SQL标签来实现的,现在我们来简单的谈谈SQL多表查询:

第一种:中文标签
这种再简单不过了,就是通过后台设置标签参数调用
通过选择读取段来进行调用,这里设置都是中文字,我们都是中国人,也就不多说了。
栏目 常用变量表示 $catid
可以用这个变量调用,也可以指定到某个栏目下面,用变量调用,它会根据当前页面的栏目来获取id从而根据你的标签设置条件来进行显示
类别 常用变量表示:$typeid 也一样
地区 常用变量表示:$areaid
缩略图 常用变量表示:$thumb
这个是选择条件,你选择了就是调用图片文章,信息类的
发布人 常用变量表示:$userid
调用指定会员的,也可以在查看某个会员的东西时用到
更新时间 常用变量表示:$updatetime 发布时间 常用变量表示:$inputtime
调用指定某一天的
推荐位 常用变量表示:$posids
推荐位置,在发布文章的时候有推荐位置选择,在这里就可以调用了
排序方式
按ID,时间,浏览次数等等调用,这根据不同的位置选择不同的调用方式。如:排行,就用浏览次数,最新就按发布时间降序
分页显示 调用条数 这个不用说,看字会意就知道了
标签模板
这里是该标签你将要调用哪个标签模板,以什么样的形式调用,新加的标签模板也会显示到这里的。如:我新建的标签模板叫tag_content_w3zz.html,里面保存我要显示的样式,这里就可以选择调用这个模板了
自定义变量
这就是2008的强大之处,连变量我们都可以自己定义了。你想要哪样的变量就定义哪样的,但是你要记得这里的变量就是你标签模板里面用来判断的变量,如:字数,是否显示,链接打开方式,时间格式等等
在这里设置的自定义字段一定要记住,务必要与标签模板里面的对应,否则无显示。

对于PHP程序员来讲,自定义模型实际是在数据库中建立一个新的数据表,然后添加不同的字段来记录不同的数据,自定义字段功能,即在原有数据表中添加新的字段,或者在附加表中添加新的字段,然后根据数据模型进行数据写入、数据查询读取、数据在模板中的展示操作。而CMS的模型自定义功能,则是把这一系列操作内置,流程化,自动化,建立模型,选择不同的字段类型建立字段,根据不同字段类型,自动生成后台数据录入界面和前台数据展示页面。站长不需要编程知识即可很方便的根据自己的需求,设计不同的数据模型,更加方便站长个性化建站。同时,懂PHP编程的站长,除了能够很方便的建立各种模型外,省去了数据录入和数据查询展示的重复操作环节,专注于个性功能的开发,能够更快更好的制作各种各样的功能模块。

当然在做多表查询之间,必须要对帝国数据库中相关表的字段及其对应关系有大概的了解,不然是无法写出相应查询语句的。

第二种:通过自定义SQL调用
这种只要懂SQL的就应该完全没有问题
现在我以例子来说明怎么写这样的SQL
第一种,调用一个数据表的内容:
如:调用图片栏目的图片

前面部分说到了自定义模型的优势,那本文下部分主要从自定义模型流程对比、自定义字段字段类型对比、自定义字段选项对比(主表副表、前台投稿、设置权限等)三个方面。

废话少说,我们开始实践:

复制代码代码如下:
SELECT contentid,title,style,thumb,url FROM `phpcms_content` WHERE
`status`=99 AND `thumb`!=” ORDER BY contentid DESC”

详细对比分析下帝国CMS、PHPCMS、DEDECMS,这三款CMS的优缺点。

问题:在信息后显示发布该信息用户的 头像、QQ、MSN等相关信息

这里我查询了内容ID,标题,样式,缩略图,链接地址这里的字段可以在后台系统设置--系统工具--数据字典里面查看各个数据表的字段加以理解,这里也可以对照,通过后台设置标签参数调用的字段来写
select是PHP查询函数
contentid这些是你要查询出来的东西,如果你要全部查询就用*,把全部字段内容都查询出来
from ‘phpcms_content’
这是从数据表’phpcms_content’里面查询,你要查询哪个数据表就写哪个数据表
WHERE `澳门新葡萄京娱乐场,status`=99 AND `thumb`!=”
这个是查询条件,status是状态,如:审核通过
AND是连接多个查询条件,是并且的关系,同时满足才可以,还有一个是or是或者,满足多个条件之中的一个就可以了。
ORDER BY contentid DESC
这个是排序方式,这里也可以对照,通过后台设置标签的排序方式就可以了。desc是降序,asc是升序
第二种:查询两个数据表

  1. 自定义模型流程对比

分析:1、这样的查询应该会用到ecms_news表,和存放用户的
真实姓名、头像、QQ、MSN等信息的enewsmemberadd表,共2张2、标签模板中我们需要用的标签,一般的调用大概只需要[!—titleurl–]
[!—title–] [!—newstime–] 这些,而[!—ftitle–]
[!—smalltext–] [!—writer–] [!—befrom–]
[!—newstext–]这些基本很少用到,而系统只能允许我们调用这些内置标签,所以需要在不用的标签内选择几个来使用,选择的数量是和你要调用的信息个数成正比的。

复制代码代码如下:
SELECT
a.contentid,a.title,a.style,a.thumb,a.updatetime,b.unit,b.price,a.description,a.inputtime,b.stars,a.url
FROM `pc_content` a, `pc_c_product` b WHERE
a.contentid=b.contentid AND `status`=99 AND `thumb`!=” ORDER BY
a.contentid DESC

在CMS中自定义模型,我们一般最期望实现的两点是1)在数据库中建一个表,并且可自由设置表中有什么字段;2)建好字段后,后台数据添加表单能自动生成,前台数据展示直接能通过标签调用,而不需要自己写读取数据的PHP代码。

实例:信息后增加所投稿用户的 真实姓名 头像 信息。找到 真实姓名 头像
分别对应 enewsmemberadd表内truename和 userpic字段,我们挑选了
[!—writer–]
[!—befrom–]标签来显示它们。开始写SQL,两张表的是用USERID这个字段关联的

其实相对于第一种情况,也差不多,就是对数据表进行处理,同时查询两个表
看懂了第一种,这种也简单,就是将表`pc_content`定义成a,pc_c_product定义成
b,然后分别查询这两个表里面你所需要的字段,如a.contentid,,b.price
a.contentid=b.contentid
条件这个就是这两个表相关的字段,也就是因为这样,所以才用这样的SQL进行相关查询,最重要的也就是这点。可以说这种SQL就是一种相关查询。
标签模板教程
以我新建如图效果的标签模板为例
标签模板的代码:(分析一下标签模板)
{loop $data $n $r}
循环,很多人拿起就问 $data $n
$r这三个参数是什么意义,因为他没有看程序,就单看这里我也不知道是什么意义。所以我看程序了。
$data就是程序通过查询,也就是标签设置里面设置出来的SQL查询出来的结果就以数组的形式保存在这个里面。
$n是列数,08是从第1条开始的,这个与07的有点不同,07的是从0开始的,所以如果下面要写关于这个的判断就得注意了。如:我要隔5条显示一条线的判断就要写成{if
$n%5==1}

那么这三款CMS中是怎样满足我们的这两点期望的呢?

select a.*,b.truename as writer,b.userpic as befrom from phome_ecms_news as a LEFT JOIN phome_enewsmemberadd as b ON a.userid=b.userid order by newstime desc limit 100

按照帝国CMS的官方提示,帝国CMS自定义模型一般步骤为1)系统分析、2)建立数据表、3)建立字段、4)建立系统模型。

红色部分定义排序方式,绿色部分定义查询记录数,自定义列表中可不定义。

{/if}.
$r就是你将循环出来的值保存的变量,这个和后面的显示就相关了,所以这里的变量一定要注意和后面的对应。

帝国自定义模型的创建步骤实际为先建立一个数据表,然后建立字段,每一个字段类据类型等作详细设置后,再整体控制各个字段的用途及前台后台数据录入界面的格式即建立系模型。建立系统模型的过程实际是对数据字段在模型中所扮演的角色和权限的分配过程,如是否作为录入项、是否作为投稿项、是否可增加、是否可修改、是否作为结合项等。

标签模板记住要放 [!—writer–] [!—befrom–] 标签,不然
真实姓名、头像 是不会显示的。

复制代码代码如下:

澳门新葡萄京娱乐场 1

如果需要可以分页的,可以用自定义列表来调用,其他的调用大家自己思考吧。

澳门新葡萄京娱乐场 2%7D)

按帝国的思维,建表和建字段只是完成了建数据库的操作,而系统模型建立的过程则为规划数据库如何使用的过程。

显示图片{thumb($r[thumb], $width,
$height)}缩略图函数,三个参数分别是,图片,宽度,高度

PHPCMS中添加自定义模型只有两步,先建立模型,然后添加字段。在添加模型的过程中不仅完成了一般意义上的建数据表的工作,同时,也完成对模型的一些初始化设置,如模型中的数据是否生成静态,栏目页、列表页、内容页的模板及URL规则等。

复制代码代码如下:
{if $r[style]}{str_cut($r[title],
$titlelen,”)}{else}{str_cut($r[title],
$titlelen,”)}{/if}

添加完模型后,会自动生成一部分字段,可对这些字段作修改或删除处理,同时可以自由增加字段。

标题显示{if
$r[style]}这个判断是判断你添加的时候是否给了样式,就是颜色和加粗,如果有给就按这个样式显示出来,否则就按CSS文件显示。{str_cut($r[title],
$titlelen,”)}截取标题,按照我们在自定义字段那里加的titlelen来截取,系统的是{str_cut($r[title],
$titlelen)}这样会显示省略号,如果你不想要省略号就用我的这里的。

PHPCMS中自定义模型建立字段时除了选择封装好的字段类型外,也整合了对字段属性的设置,如是否在前台投稿中显示、是否作为标签默认读取字段、是否作为标签调用排序字段等。

复制代码代码如下:
{if $showprice}
¥{$r[price]}元/{$r[unit]}{/if}{if $showcart}

澳门新葡萄京娱乐场 3

显示价格 {if $showprice}判断是否显示
showprice在自定义字段里面设置一个非0的值

DEDECMS中自定义模型建立亦分为两步完成,建数据表作初始化设置然后添加字段。添加模型时可选择模型是自动模型、系统模型还是独立模型。独立模型可突破原来的主表+副表的模式,方便小数据量的灵活处理。

复制代码代码如下:
澳门新葡萄京娱乐场 4%7D&price=%7B$r%5Bprice%5D%7D&url=%7B$r%5Burl%5D%7D&unit=%7Burlencode($r%5Bunit%5D)%7D&verify=%7Bmd5(AUTH_KEY.$r%5Btitle%5D.$r%5Bprice%5D.$r%5Burl%5D.$r%5Bunit%5D)%7D)澳门新葡萄京娱乐场 5{/if}

澳门新葡萄京娱乐场 6

显示购买的那两个图片,链接,这些都参照内容页的购买设置就可以了。

从三款CMS的自定义模型流程对比来看,帝国CMS的属性设置相对更为细致但似乎简洁性不够,很多描述过于专业或者不够明确,站长朋友们需要看较多帮助文档才能了解到每项的意思,而PHPCMS和DEDECMS中则相对简洁,一目了然知道每一项的涵义;PHPCMS和DEDECMS在建立模型表的同时完成了对模型的初始化设置,整个设置是针对整个模型的,与具体字段无关,属全局性设置,而帝国CMS中模型的设置则是整合了对字段的整体操作,在建好字段之后,细化到对字段的细节控制,属“微观调控”。

{/loop}
结束循环,这个不能少哟,少了就无法更新了,注意完整,在哪里都应该注意

帝国CMS中能够单独设置字段的前台后台展示模板,相对更为灵活些;
PHPCMS中则由于字段类型是以组件形式封装的,前台后台数据录入界面自动生成,简便,但在某些时候需要自定义部分字段的表单HTML时只有在模板中使用逻辑判断才能实现,灵活性稍缺乏。DEDECMS模型设置和PHPCMS类似,DEDECMS这块的优势在于可以选择数据模型是主表+副表的模式还是独立表模式,并且可以自由设定前台后台的数据处理PHP文件,方便二次开发。

复制代码代码如下:
{if $pages}

按我的经验来看,帝国CMS这块的设置虽然很细致,但实际把问题复杂化了,据观察,帝国CMS的用户自定义模型的深度用户并不多。实际按照PHPCMS和DEDECMS的思路,建模型数据表的同时,对模型作一部分全局设置,然后单个字段中根据不同字段类型及不同需求作细节设置,这样的流程更直观更方便。

{$pages}

另外,PHPCMS中自定义模型后可直接预览模型的数据录入界面,方便查看字段设置的效果,这点非常方便。

{/if}

所以,从自定义模型细节易用性对比来看:DEDECMS>PHPCMS>帝国CMS。

是否分页显示,这个在标签设置处设置
其实我就是给默认的产品标签模板加了几个判断显示而已,其它的产品标签同样也可以用我这个显示想要的内容
我的自定义字段是:
澳门新葡萄京娱乐场 7 
这样我的标签就出来了。
看起来很简单吧
但是标签模板也设计到写css,这一块就不说了,因为我对CSS也不是很了解,呵呵。略懂,再加上每个人的需求不同,就不固定人的思维了。

2.字段类型对比:

CMS中自定义字段有一个很好的优点就是都封装好了一些常见的字段类型,建立字段的同时,直接设置好了字段对应的表现形式,选择不同的字段类型,在会员中心投稿表单界面、后台数据录入界面及前台数据展示界面中都会有所不同,并且是自动呈现。举个例子,如果是PHP程序员需要实现对文章内容的存储,除了需要在数据库中添加一个字段外,还需要在数据录入表单中添加一个textarea,同时还要引用一些编辑器如fckeditor等。过程比较费事,并且存在许多重复性劳动。而如果在PHPCMS或者帝国CMS中实现这一需求,则只需要在建立字段时选择“编辑器”字段类型,在DEDECMS中也类似只需要选择“HTML文本”类型的字段即可。因为CMS的字段类型都将各种不同的字段进行了封装,添加字段时直接选择,然后自动生成的数据录入界面中和前台数据展示界面中,程序都会根据字段类型作一些处理,然后自动输出。(PHPCMS中生成表单界面时会调用input_form相关的类根据字段类型进行处理,在输出数据前,会调用output_form相关的类根据不同字段类型对数据进行处理)。

帝国CMS的字段类型
PHCMS的字段类型
DEDECMS的字段类型
单行文本框(text)
密码框(password)
下拉框(select)
单选框(radio)
复选框(checkbox)
多行文本框(textarea)
编辑器(editor)
图片(img)
FLASH文件(flash)
文件(file)
日期(date)
颜色(color)
选择外表关联字段(linkfield)
下拉外表关联字段(linkfieldselect)
单行文本
多行文本
选项
数字
编辑器
日期和时间
颜色和字型
图片
多图片
文件
镜像下载
多文件上传
栏目
类别
地区
标题
作者
来源
关键词
会员组
会员ID
推荐位
模板
转向链接
分页选择
视频
联动菜单
单行文本(varchar)
单行文本(char)
多行文本
HTML文本
文本保存HTML数据
整数类型
小数类型
时间类型
图片
图片(仅网址)
多媒体文件
附件类型
使用option下拉框
使用radio选项卡
Checkbox多选框
联动类型

从上表可见PHPCMS中字段类型的的丰富程度和实用性是明显优于帝国CMS和DEDECMS的。DEDECMS字段类型稍多于帝国CMS。

即:PHPCMS >DEDECMS>帝国CMS。

3.自定义字段属性选项对比:

有些时候设置的一些字段,我们希望只有管理员才能设置该字段的值;有些时候,添加的一些字段,我们希望能够方便和标题摘要一起在文章列表中调用;有些时候,添加的一些字段,我们希望这个字段添加后不能再被修改;有时些时候,添加的一些字段,我们希望实现只在后台数据录入界面中显示,而在前台投稿中不显示……这时候,灵活的字段属性选项,显得尤为重要。

那么这三款CMS中的字段属性有哪些差异?哪个最能满足用户的需求呢?

1)自定义字段是否可选择是否存在主表还是副表?

PHPCMS2008和DEDECMS的自定义字段只能添加到副表中,帝国CMS自定义字段则可选择是添加在主表中还是副表中,这样的好处在于,自定义字段可以方便作为数据调用条件和查询条件和在文章列表中调用,而如果单纯只加在副表中,一旦涉及到数据联合查询,效率会低很多,并且即使是简单的标题+摘要+自定义字段显示的文章列表中都非得多表联合查询,人为增加SQL查询复杂度,降低效率。很典型的问题是在涉及到联动筛选的情况时,自定义字段如果不能选择存储在主表中,会人为制造非常大的麻烦。

澳门新葡萄京娱乐场 8

如上图所示的,联动筛选字段(帝国CMS和DEDECMS中称作结合项),如果是想要用PHPCMS2008和帝国CMS来自定义,售价、面积、户型等自下义字段,只能添加在副表中,结果是非常痛苦的,每个条件的查询都要主表和副表同时查询,并且查询条件分期在主表中和副表中时,要同时满足条件,非得join查询。
如果涉及排序等,更是头痛,反正是人为自找麻烦。如果能选择直接把字段字义表主表中,这样,这类数据量存储不大的字段,不会明显增加主表的负担,但查询和读取都直接是单表操作,非常方便。帝国CMS中这点做的比较不错,并且有提供了单独的结合项功能。DEDECMS中貌似也有结合项功能,适用于多条件筛选的情况。

所以,这一点,帝国CMS>DEDECMS>PHPCMS。

2)字段的权限设置

有些字段,只希望在管理员或者编辑人员在编辑信息时才能设置,普通用户不给设置权限,这就需要给自定义字段一个完整的权限系统。这一点PHPCMS中做的非常不错,可以直接能过勾选“不允许设置该字段值的会员组”的选项来实现。帝国CMS中最后一步“系统模型建立”中“可增加”、“可修改”这几项似乎有权限设置的影子,只是实现了部分权限功能,而DEDECMS中则没有看到明确的字段权限设置选项。

所以,这一点PHPCMS>帝国CMS>DEDECMS。

3)不在前台投稿中显示

有些时候设置某些字段,虽然普通会员也可以有给他赋值的权限,但是不需要或者不想在前台投稿中显示(如摘要等,有时候想简单点,只让用户发个标题和内容),所以很需要实现某个自定义字段只在后台编辑时可以填写,而在前台投稿界面中不自动显示。关于这点,在PHPCMS中只需设置“是否在前台投稿中显示”项为否即可,DEDECMS中字段选项中“前台参数”项中的“前台投稿及采集规则禁用本字段”亦实现了这一需求,至于帝国CMS中,可以通过系统模型设置是否为录入项实现,但似乎不够直观。

有时候,在使用PHPCMS自定义字段时,不希望字段在前台投稿中显示的另一个原因是,想对添加的一部分字段的表单样式作单独的修改或者作一些JS处理,PHPCMS内置的字段样式不太够用或者不太方便,所以在设置字段时选择不在前台投稿中显示,然后在模板中按需求手动添加这个字段的表单项,这一点在DEDECMS中有自定义表单HTML项,不需要像PHPCMS中这样变相实现字段HTML项的定义,帝国CMS中添加自段时有提供定义前台后台录入数据表单HTML的设置项,但他同时写出了提示“增加字段时请留空”,这个做法不太理解,不过,他在进行系统模型定义的最后一步可以统一设置每个字段的前后台数据录入界面表单HTML。不过,DEDECMS和帝国CMS中的字两项设置对普通新手用户可能反而带来疑惑,对熟悉二次开发的倒是挺方便的。

从这个小点来看,普通用户PHPCMS>DEDECMS>帝国CMS,二次开发DEDECMS>帝国CMS>PHPCMS。

关于帝国CMS、PHPCMS、DEDECMS这三款CMS自定义模型功能,实际还有很多值得对比分析的地方,都各有优缺点,实现应用中总会有感觉很爽的地方,同时也会有很纠结的地方,在这些方面我是深有感触的。

当然,本文并不在绝对的得出哪款CMS更好,哪款CMS不好的结论,只是根据自己实际使用的感触作一些简单的对比分析,上面对比的谁优于谁也只是基于我个人的感受,具体不同层次的用户依个人习惯可能感受不同,希望能给朋友们一些参考。


发表评论

电子邮件地址不会被公开。 必填项已用*标注