dedeCMS 3.1L 自定义模型step by step
时间:2007-04-23 来源:w3g8
知道dedeCMS有一年多的时间了,但真正用于研究它的时间半个月不到,在这过程中,更多的时间花在设计DIV格式模板上。
说这话并不是摆显自己,只是说出自己学习dedeCMS的过程,让更多希望做网站的朋友了解dedeCMS的易用性,减轻大家对CMS系统的恐惧心理。
下面以制作一个简单的产品库为例,一步步地陈述自定义模型的过程,初学者和感兴趣的朋友不妨看看:
一、模型设计(自定义模型:有两点)
1、确定前台需要表现的内容
dedeCMS没有产品库模型,如果网站涉及到产品展示,那么先考虑这个展示需要显示哪些内容,我们的例子涉及四个内容:
QUOTE:
(1)产品名称
(2)产品价格
(3)产品缩略图
(4)产品介绍
图一
根据上述需求,确定了数据库表的设计目标,接下来看第二点
2、建立数据库表、字段
2、建立数据库表、字段
注意:目前发布的3.1Lit及以下版本在自定义模型时,建立的数据库表缺省为innoDB类型,重装安装系统时容易出错。建议使用phpmyadmin创建表,并使用myISAM引擎,或者重装mysql前一定要把整个“data”目录备份,安装好之后覆盖到新的“data”目录。
建立数据库表product,表将会有四个字段与第一点需要显示的内容对应,如下:
==================================
QUOTE:
(1)产品名称 直接引用dedeCMS系统的文章 title
(2)产品价格 price
(3)产品缩略图 直接引用dedeCMS系统的文章缩略图 litpic
(4)产品介绍 pinfo
注:dedeCMS有一个公共表“archives”,各个模型都共用其中的字段,新建立的模型也是,也就是说,实际上只需要建立两个字段:price、pinfo
确定目标后,进入dedeCMS“频道模型管理”。
==================================
作为初学者,模仿是事半功倍的最佳方法。在学习过程中,研究了系统缺省的四个模型,发现“软件模型”是最方便最容易上手的模仿模型。
贪图方便,我喜欢用多窗口浏览器GB打开后台,按住shif点击“更改”在新标签打开“软件模型”;
界面里就简单的几行填写表单,里面“附加表”、“列表附加字段:”分别是CMS系统自动创建的“数据库表”、表里的“字段”(注意:dedeCMS有一个共用的表“archives”,各个模型都共用其中的好些字段,所以“软件模型”里的字段并不多):
图二
接着在管理后台原标签点击[增加新模型],打开新建“模型”界面,把“软件模型”地内容对应地复制过来,然后根据前面设计的表名、字段进行修改,按下图修改好之后点击“确定”,“产品库模型”建立了。
dedeCMS缺省创建的字段用了“latin1_swedish_ci”编码,需要进入到phpMyAdmin把它修改成CMS统一的“gbk_chinese_ci”编码,否则中文字会出现显示乱码现象。
(补充:下图中有“字段添加向导”,这里可以对创建的字段进行定义)
图三
附:phpMyAdmin修改“gbk_chinese_ci”编码图
==================================
图四
图五
二、程序代码修改
二、程序代码修改->这里需要具备HTML知识,尤其要了解HTML的表单参数设置与更改
1、自定义模型需要添加修改的系统文件:product_add.php product_add_action.php product_edit.php product_edit_action.php
按“自定义模型”里的文件复制系统里的相应soft_xxx.php,并改名成:product_add.php product_add_action.php product_edit.php product_edit_action.php
图六
2、product_add.php的修改
step1:用dreamweaver或者editPlus打开复制好的“product_add.php”文件,查找“soft_add.php”,替换成“product_add.php”
查找“soft_add_action.php”,替换成“product_add_action.php”
step2:查找“$channelid="3";”,替换成“$channelid="您建立模型的频道ID";”
step3:代码用不着了,可以删除
CODE:
function MakeUpload()
{
var startNum = 2;
var upfield = document.getElementById("uploadfield");
var endNum = document.form1.picnum.value;
if(endNum>9) endNum = 9;
upfield.innerHTML = "";
for(startNum;startNum ";
upfield.innerHTML += " ";
upfield.innerHTML += "服务器名称:\r\n";
}
}
[url=javascript:][Copy to clipboard][/url]
step4:查找“第291行”->“第437行”的table里,它是为“软件模型”添加信息的表单,把不要的都删除了,
留下第432行的:
CODE:
[url=javascript:][Copy to clipboard][/url]
在此前面添加一个按钮文本框input:
CODE:
[url=javascript:][Copy to clipboard][/url]
注:dedeCMS3.1X用了tab标签显示方式,添加文章修改文章非常方便,但修改相应部分的程序代码用DW无法所见即所得地修改了,3.0X可以直接在DW属性面板上修改。
两者不同的优缺点,你会选择哪个?无疑还是tab标签的方式,毕竟修改代码的情况比较少。
3、product_add_action.php的修改
step1:用dreamweaver或者editPlus打开复制好的“product_add_action.php”文件,查找“soft_add.php”,替换成“product_add.php”
查找“soft_add_action.php”,替换成“product_add_action.php”
step2:第98行,查找:
CODE:
//加入附加表
//----------------------------------
$arcID = $dsql->GetLastID();
$inQuery = "
INSERT INTO #@__addonsoft(aid,typeid,filetype,language,softtype,accredit,
os,softrank,officialUrl,officialDemo,softsize,softlinks,introduce)
VALUES ('$arcID','$typeid','$filetype','$language','$softtype','$accredit',
'$os','$softrank','$officialUrl','$officialDemo','$softsize','$urls','$body');
";
[url=javascript:][Copy to clipboard][/url]
改成:
CODE:
//加入附加表
//----------------------------------
$arcID = $dsql->GetLastID();
$inQuery = "
INSERT INTO #@__addonproduct(aid,typeid,price,pinfo)
VALUES ('$arcID','$typeid','$price','$body');
";
[url=javascript:][Copy to clipboard][/url]
注:注意 INSERT INTO 部分,代码把 VALUES 里的内容插入到 #@ 后面的数据库表 addonproduct 相应的字段中,里面就有我们添加的字段。
此注释希望能帮助初学者掌握自行修改的方法。
至此,添加产品库文章部分修改完成.
===========================
如果发现发布的文章存在问题,需要修改,CMS系统调用的不是以上两个文件,而是:product_edit.php product_edit_action.php
4、product_edit.php的修改
step1:用dreamweaver或者editPlus打开复制好的“product_add.php”文件,查找“soft_edit.php”,替换成“product_edit.php”
查找“soft_edit_action.php”,替换成“product_edit_action.php”
step2:查找“$channelid="3";”,替换成“$channelid="您建立模型的频道ID";”
step3:查找“第30行”:
CODE:
if(!is_array($addRow))
{
$addRow["filetype"] = "";
$addRow["language"] = "";
$addRow["softtype"] = "";
$addRow["accredit"] = "";
$addRow["softrank"] = 3;
$addRow["officialUrl"] = 400;
$addRow["officialDemo"] = "";
$addRow["softsize"] = 400;
$addRow["softlinks"] = "";
$addRow["introduce"] = "";
}
[url=javascript:][Copy to clipboard][/url]
改成:
CODE:
if(!is_array($addRow))
{
$addRow["price"] = "";
$addRow["pinfo"] = "";
}
[url=javascript:][Copy to clipboard][/url]
注:还记得产品库字段的设计吧,它插入的数据只是“price”和“pinfo”,所以这里的代码只需要两个字段的内容
step4:查找“第364行”->“第514行”的table代码,这些是读取数据来进行修改的部分,把不需要的删除,只留下
留下第509行的:
CODE:
[url=javascript:][Copy to clipboard][/url]
并改成:
CODE:
[url=javascript:][Copy to clipboard][/url]
注:这里代码增加了读取数据部分“$addRow["数据库表字段"]”,并且赋值给 value ,明白了这点,添加“price”内容就方便多了
在此前面添加一个按钮文本框input:
CODE:
' style="width:100">
[url=javascript:][Copy to clipboard][/url]
完成修改,还剩下
5、product_edit_action.php的修改
step1:用dreamweaver或者editPlus打开复制好的“product_edit_action.php”文件,查找“soft_edit.php”,替换成“product_edit.php”
查找“soft_edit_action.php”,替换成“product_edit_action.php”
step2:查找“第108行”:
CODE:
//更新附加表
//----------------------------------
$row = $dsql->GetOne("Select aid,typeid From #@__addonsoft where aid='$ID'");
if(!is_array($row))
{
$inQuery = "
INSERT INTO #@__addonsoft(aid,typeid,filetype,language,softtype,accredit,
os,softrank,officialUrl,officialDemo,softsize,softlinks,introduce)
VALUES ('$ID','$typeid','$filetype','$language','$softtype','$accredit',
'$os','$softrank','$officialUrl','$officialDemo','$softsize','$urls','$body');
";
[url=javascript:][Copy to clipboard][/url]
改成:
CODE:
//更新附加表
//----------------------------------
$row = $dsql->GetOne("Select aid,typeid From #@__addonproduct where aid='$ID'");
if(!is_array($row))
{
$inQuery = "
INSERT INTO #@__addonproduct(aid,typeid,price,pinfo)
VALUES ('$ID','$typeid','$price','$body');
[url=javascript:][Copy to clipboard][/url]
step3:查找“第129行”:
CODE:
update #@__addonsoft
set typeid ='$typeid',
filetype ='$filetype',
language ='$language',
softtype ='$softtype',
accredit ='$accredit',
os ='$os',
softrank ='$softrank',
officialUrl ='$officialUrl',
officialDemo ='$officialDemo',
softsize ='$softsize',
softlinks ='$urls',
introduce='$body'
where aid='$ID';";
[url=javascript:][Copy to clipboard][/url]
改成:
CODE:
update #@__addonproduct
set typeid ='$typeid',
price ='$price',
pinfo ='$body'
where aid='$ID';";
[url=javascript:][Copy to clipboard][/url]
注意:where aid='$ID'前面的一行,后面没有逗号的,因为一时粗心,这个地方查了好久才找到问题。
至此,完成所有程序文件代码修改。
三、前台模板定制
自定义模型后,需要为它定义模板文件,涉及三个文件“index_xxx.htm”、“list_xxx.htm”、“article_xxx.htm”,操作非常简单,到模板目录复制然后改名“index_product.htm”、“list_product.htm”、“article_product.htm”即可,建立新的网站频道时,CMS系统自动调用相应的模板文件
这部分主要是内容调用,只要把前面定义的“字段调用代码”放到相应的模板里即可,在此不作详细说明。
CODE:
[url=javascript:][Copy to clipboard][/url]
经过测试,新建的模型目前还没发现问题,
由于本人同是初学者,出错的话希望大家谅解,并恳请指正.
注意:关于数据库字段
用CMS自动创建的 product 表 pinfo 字段要改成 MEDIUMTEXT 类型有可能修改不了,如遇到此问题,请用 phpMyAdmin 删除,重新添加一个,添加方法看下图的“添加字段”
完成后的效果
抓取了添加、修改产品库文章的图,比较大,需要新开窗口才看得清楚
添加产品库文章
修改产品库文章
说这话并不是摆显自己,只是说出自己学习dedeCMS的过程,让更多希望做网站的朋友了解dedeCMS的易用性,减轻大家对CMS系统的恐惧心理。
下面以制作一个简单的产品库为例,一步步地陈述自定义模型的过程,初学者和感兴趣的朋友不妨看看:
一、模型设计(自定义模型:有两点)
1、确定前台需要表现的内容
dedeCMS没有产品库模型,如果网站涉及到产品展示,那么先考虑这个展示需要显示哪些内容,我们的例子涉及四个内容:
QUOTE:
(1)产品名称
(2)产品价格
(3)产品缩略图
(4)产品介绍
图一
根据上述需求,确定了数据库表的设计目标,接下来看第二点
2、建立数据库表、字段
2、建立数据库表、字段
注意:目前发布的3.1Lit及以下版本在自定义模型时,建立的数据库表缺省为innoDB类型,重装安装系统时容易出错。建议使用phpmyadmin创建表,并使用myISAM引擎,或者重装mysql前一定要把整个“data”目录备份,安装好之后覆盖到新的“data”目录。
建立数据库表product,表将会有四个字段与第一点需要显示的内容对应,如下:
==================================
QUOTE:
(1)产品名称 直接引用dedeCMS系统的文章 title
(2)产品价格 price
(3)产品缩略图 直接引用dedeCMS系统的文章缩略图 litpic
(4)产品介绍 pinfo
注:dedeCMS有一个公共表“archives”,各个模型都共用其中的字段,新建立的模型也是,也就是说,实际上只需要建立两个字段:price、pinfo
确定目标后,进入dedeCMS“频道模型管理”。
==================================
作为初学者,模仿是事半功倍的最佳方法。在学习过程中,研究了系统缺省的四个模型,发现“软件模型”是最方便最容易上手的模仿模型。
贪图方便,我喜欢用多窗口浏览器GB打开后台,按住shif点击“更改”在新标签打开“软件模型”;
界面里就简单的几行填写表单,里面“附加表”、“列表附加字段:”分别是CMS系统自动创建的“数据库表”、表里的“字段”(注意:dedeCMS有一个共用的表“archives”,各个模型都共用其中的好些字段,所以“软件模型”里的字段并不多):
图二
接着在管理后台原标签点击[增加新模型],打开新建“模型”界面,把“软件模型”地内容对应地复制过来,然后根据前面设计的表名、字段进行修改,按下图修改好之后点击“确定”,“产品库模型”建立了。
dedeCMS缺省创建的字段用了“latin1_swedish_ci”编码,需要进入到phpMyAdmin把它修改成CMS统一的“gbk_chinese_ci”编码,否则中文字会出现显示乱码现象。
(补充:下图中有“字段添加向导”,这里可以对创建的字段进行定义)
图三
附:phpMyAdmin修改“gbk_chinese_ci”编码图
==================================
图四
图五
二、程序代码修改
二、程序代码修改->这里需要具备HTML知识,尤其要了解HTML的表单参数设置与更改
1、自定义模型需要添加修改的系统文件:product_add.php product_add_action.php product_edit.php product_edit_action.php
按“自定义模型”里的文件复制系统里的相应soft_xxx.php,并改名成:product_add.php product_add_action.php product_edit.php product_edit_action.php
图六
2、product_add.php的修改
step1:用dreamweaver或者editPlus打开复制好的“product_add.php”文件,查找“soft_add.php”,替换成“product_add.php”
查找“soft_add_action.php”,替换成“product_add_action.php”
step2:查找“$channelid="3";”,替换成“$channelid="您建立模型的频道ID";”
step3:代码用不着了,可以删除
CODE:
function MakeUpload()
{
var startNum = 2;
var upfield = document.getElementById("uploadfield");
var endNum = document.form1.picnum.value;
if(endNum>9) endNum = 9;
upfield.innerHTML = "";
for(startNum;startNum ";
upfield.innerHTML += " ";
upfield.innerHTML += "服务器名称:\r\n";
}
}
[url=javascript:][Copy to clipboard][/url]
step4:查找“第291行”->“第437行”的table里,它是为“软件模型”添加信息的表单,把不要的都删除了,
留下第432行的:
CODE:
[url=javascript:][Copy to clipboard][/url]
在此前面添加一个按钮文本框input:
CODE:
[url=javascript:][Copy to clipboard][/url]
注:dedeCMS3.1X用了tab标签显示方式,添加文章修改文章非常方便,但修改相应部分的程序代码用DW无法所见即所得地修改了,3.0X可以直接在DW属性面板上修改。
两者不同的优缺点,你会选择哪个?无疑还是tab标签的方式,毕竟修改代码的情况比较少。
3、product_add_action.php的修改
step1:用dreamweaver或者editPlus打开复制好的“product_add_action.php”文件,查找“soft_add.php”,替换成“product_add.php”
查找“soft_add_action.php”,替换成“product_add_action.php”
step2:第98行,查找:
CODE:
//加入附加表
//----------------------------------
$arcID = $dsql->GetLastID();
$inQuery = "
INSERT INTO #@__addonsoft(aid,typeid,filetype,language,softtype,accredit,
os,softrank,officialUrl,officialDemo,softsize,softlinks,introduce)
VALUES ('$arcID','$typeid','$filetype','$language','$softtype','$accredit',
'$os','$softrank','$officialUrl','$officialDemo','$softsize','$urls','$body');
";
[url=javascript:][Copy to clipboard][/url]
改成:
CODE:
//加入附加表
//----------------------------------
$arcID = $dsql->GetLastID();
$inQuery = "
INSERT INTO #@__addonproduct(aid,typeid,price,pinfo)
VALUES ('$arcID','$typeid','$price','$body');
";
[url=javascript:][Copy to clipboard][/url]
注:注意 INSERT INTO 部分,代码把 VALUES 里的内容插入到 #@ 后面的数据库表 addonproduct 相应的字段中,里面就有我们添加的字段。
此注释希望能帮助初学者掌握自行修改的方法。
至此,添加产品库文章部分修改完成.
===========================
如果发现发布的文章存在问题,需要修改,CMS系统调用的不是以上两个文件,而是:product_edit.php product_edit_action.php
4、product_edit.php的修改
step1:用dreamweaver或者editPlus打开复制好的“product_add.php”文件,查找“soft_edit.php”,替换成“product_edit.php”
查找“soft_edit_action.php”,替换成“product_edit_action.php”
step2:查找“$channelid="3";”,替换成“$channelid="您建立模型的频道ID";”
step3:查找“第30行”:
CODE:
if(!is_array($addRow))
{
$addRow["filetype"] = "";
$addRow["language"] = "";
$addRow["softtype"] = "";
$addRow["accredit"] = "";
$addRow["softrank"] = 3;
$addRow["officialUrl"] = 400;
$addRow["officialDemo"] = "";
$addRow["softsize"] = 400;
$addRow["softlinks"] = "";
$addRow["introduce"] = "";
}
[url=javascript:][Copy to clipboard][/url]
改成:
CODE:
if(!is_array($addRow))
{
$addRow["price"] = "";
$addRow["pinfo"] = "";
}
[url=javascript:][Copy to clipboard][/url]
注:还记得产品库字段的设计吧,它插入的数据只是“price”和“pinfo”,所以这里的代码只需要两个字段的内容
step4:查找“第364行”->“第514行”的table代码,这些是读取数据来进行修改的部分,把不需要的删除,只留下
留下第509行的:
CODE:
[url=javascript:][Copy to clipboard][/url]
并改成:
CODE:
[url=javascript:][Copy to clipboard][/url]
注:这里代码增加了读取数据部分“$addRow["数据库表字段"]”,并且赋值给 value ,明白了这点,添加“price”内容就方便多了
在此前面添加一个按钮文本框input:
CODE:
' style="width:100">
[url=javascript:][Copy to clipboard][/url]
完成修改,还剩下
5、product_edit_action.php的修改
step1:用dreamweaver或者editPlus打开复制好的“product_edit_action.php”文件,查找“soft_edit.php”,替换成“product_edit.php”
查找“soft_edit_action.php”,替换成“product_edit_action.php”
step2:查找“第108行”:
CODE:
//更新附加表
//----------------------------------
$row = $dsql->GetOne("Select aid,typeid From #@__addonsoft where aid='$ID'");
if(!is_array($row))
{
$inQuery = "
INSERT INTO #@__addonsoft(aid,typeid,filetype,language,softtype,accredit,
os,softrank,officialUrl,officialDemo,softsize,softlinks,introduce)
VALUES ('$ID','$typeid','$filetype','$language','$softtype','$accredit',
'$os','$softrank','$officialUrl','$officialDemo','$softsize','$urls','$body');
";
[url=javascript:][Copy to clipboard][/url]
改成:
CODE:
//更新附加表
//----------------------------------
$row = $dsql->GetOne("Select aid,typeid From #@__addonproduct where aid='$ID'");
if(!is_array($row))
{
$inQuery = "
INSERT INTO #@__addonproduct(aid,typeid,price,pinfo)
VALUES ('$ID','$typeid','$price','$body');
[url=javascript:][Copy to clipboard][/url]
step3:查找“第129行”:
CODE:
update #@__addonsoft
set typeid ='$typeid',
filetype ='$filetype',
language ='$language',
softtype ='$softtype',
accredit ='$accredit',
os ='$os',
softrank ='$softrank',
officialUrl ='$officialUrl',
officialDemo ='$officialDemo',
softsize ='$softsize',
softlinks ='$urls',
introduce='$body'
where aid='$ID';";
[url=javascript:][Copy to clipboard][/url]
改成:
CODE:
update #@__addonproduct
set typeid ='$typeid',
price ='$price',
pinfo ='$body'
where aid='$ID';";
[url=javascript:][Copy to clipboard][/url]
注意:where aid='$ID'前面的一行,后面没有逗号的,因为一时粗心,这个地方查了好久才找到问题。
至此,完成所有程序文件代码修改。
三、前台模板定制
自定义模型后,需要为它定义模板文件,涉及三个文件“index_xxx.htm”、“list_xxx.htm”、“article_xxx.htm”,操作非常简单,到模板目录复制然后改名“index_product.htm”、“list_product.htm”、“article_product.htm”即可,建立新的网站频道时,CMS系统自动调用相应的模板文件
这部分主要是内容调用,只要把前面定义的“字段调用代码”放到相应的模板里即可,在此不作详细说明。
CODE:
[url=javascript:][Copy to clipboard][/url]
经过测试,新建的模型目前还没发现问题,
由于本人同是初学者,出错的话希望大家谅解,并恳请指正.
注意:关于数据库字段
用CMS自动创建的 product 表 pinfo 字段要改成 MEDIUMTEXT 类型有可能修改不了,如遇到此问题,请用 phpMyAdmin 删除,重新添加一个,添加方法看下图的“添加字段”
完成后的效果
抓取了添加、修改产品库文章的图,比较大,需要新开窗口才看得清楚
添加产品库文章
修改产品库文章
相关阅读 更多 +
排行榜 更多 +