知道dedeCMS有一年多的时间了,但真正用于研究它的时间半个月不到,在这过程中,更多的时间花在设计DIV格式模板上。 说这话并不是摆显自己,只是说出自己学习dedeCMS的过程,让更多希望做网站的朋友了解dedeCMS的易用性,减轻大家对CMS系统的恐惧心理。
下面以制作一个简单的产品库为例,一步步地陈述自定义模型的过程,初学者和感兴趣的朋友不妨看看:
一、模型设计(自定义模型:有两点) 1、确定前台需要表现的内容 dedeCMS没有产品库模型,如果网站涉及到产品展示,那么先考虑这个展示需要显示哪些内容,我们的例子涉及四个内容:
(1)产品名称 (2)产品价格 (3)产品缩略图 (4)产品介绍 图一
根据上述需求,确定了数据库表的设计目标,接下来看第二点
2、建立数据库表、字段
建立数据库表product,表将会有四个字段与第一点需要显示的内容对应,如下:
(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
图六
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<=endNum;startNum++){ upfield.innerHTML += "软件地址"+startNum+":<input type='text' name='softurl"+startNum+"' style='width:280' value='http://'> "; upfield.innerHTML += " "; upfield.innerHTML += "服务器名称:<input type='text' name='servermsg"+startNum+"' style='width:150'><br/>\r\n"; } } 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:代码用不着了,可以删除
step4:查找“第291行”->“第437行”的table里,它是为“软件模型”添加信息的表单,把不要的都删除了, 留下第432行的: <? GetEditor("body","",250,"Small"); ?> 在此前面添加一个按钮文本框input: <input type='text' name='price' id='price' style='width:100px'>
注: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行,查找: //加入附加表 //---------------------------------- $arcID = $dsql->GetLastID();
$inQuery = " INSERT INTO dede_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'); "; 改成: //加入附加表 //---------------------------------- $arcID = $dsql->GetLastID();
$inQuery = " INSERT INTO dede_addonproduct(aid,typeid,price,pinfo) VALUES ('$arcID','$typeid','$price','$body'); "; 注:注意 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”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"] = ""; } step2:查找“$channelid="3";”,替换成“$channelid="您建立模型的频道ID";” step3:查找“第30行”:
改成:
CODE: if(!is_array($addRow)) { $addRow["price"] = ""; $addRow["pinfo"] = ""; }
注:还记得产品库字段的设计吧,它插入的数据只是“price”和“pinfo”,所以这里的代码只需要两个字段的内容 step4:查找“第364行”->“第514行”的table代码,这些是读取数据来进行修改的部分,把不需要的删除,只留下
留下第509行的:
<? GetEditor("body",$addRow["introduce"],250,"Small"); ?> 并改成:
<? GetEditor("body",$addRow["pinfo"],250,"Small"); ?> 注:这里代码增加了读取数据部分“$addRow["数据库表字段"]”,并且赋值给 value ,明白了这点,添加“price”内容就方便多了
在此前面添加一个按钮文本框input:
<input name="price" id="price" value='<?=$addRow["price"]?>' style="width:100">
完成修改,还剩下 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行”:
//更新附加表 //---------------------------------- $row = $dsql->GetOne("Select aid,typeid From dede_addonsoft where aid='$ID'"); if(!is_array($row)) { $inQuery = " INSERT INTO dede_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'); ";
改成: //更新附加表 //---------------------------------- $row = $dsql->GetOne("Select aid,typeid From dede_addonproduct where aid='$ID'"); if(!is_array($row)) { $inQuery = " INSERT INTO dede_addonproduct(aid,typeid,price,pinfo) VALUES ('$ID','$typeid','$price','$body');
step3:查找“第129行”: update dede_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';"; 改成:
update dede_addonproduct set typeid ='$typeid', price ='$price', pinfo ='$body' where aid='$ID';";
注意:where aid='$ID'前面的一行,后面没有逗号的,因为一时粗心,这个地方查了好久才找到问题。 至此,完成所有程序文件代码修改。 三、前台模板定制
自定义模型后,需要为它定义模板文件,涉及三个文件“index_xxx.htm”、“list_xxx.htm”、“article_xxx.htm”,操作非常简单,到模板目录复制然后改名“index_product.htm”、“list_product.htm”、“article_product.htm”即可,建立新的网站频道时,CMS系统自动调用相应的模板文件
这部分主要是内容调用,只要把前面定义的“字段调用代码”放到相应的模板里即可,在此不作详细说明。
<field:price type='int' isnull='true' default='' rename='' />
<field:pinfo type='text' isnull='true' default='' rename='' />
经过测试,新建的模型目前还没发现问题, 由于本人同是初学者,出错的话希望大家谅解,并恳请指正. 注意:关于数据库字段 用CMS自动创建的 product 表 pinfo 字段要改成 MEDIUMTEXT 类型有可能修改不了,如遇到此问题,请用 phpMyAdmin 删除,重新添加一个,添加方法看下图的“添加字段”
完成后的效果 抓取了添加、修改产品库文章的图,比较大,需要新开窗口才看得清楚 添加产品库文章 修改产品库文章
|