图一
注: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 删除,重新添加一个,添加方法看下图的“添加字段”
抓取了添加、修改产品库文章的图,比较大,需要新开窗口才看得清楚
添加产品库文章
修改产品库文章
联系客服