建立新模型不仅在织梦二次开发中常用到,有时候在仿站时也用到,虽然,建立模型比较简单,但是模型里面的那十多项表单内容确不好理解,今天就通过建立模型相关程序和数据库知识详细分析一下,以便给大家一个系统的了解,以后,我们建立新模型的时候就可以大胆的做了。
网上有很多关于建立新模型的教程,一般都是直接告诉我们怎么做,但是为什么这样做?确没有这样的教程,本站建立的主要原因也是在此,通过分析程序来讲解一些织梦功操作原理,这一点是与其它教程根本区别。在建立新模型前我们要对里面的每一项进行分析。
进入网站后台,用箭头表示下一步:核心→内容模型→内容模型管理→点增加新模型→进入创建模型界面,如下图所示,
图1
接下来我们就详细分析这一界面每一项功能作用。
这个“新增内容模型”界面用到的文件是http://www.dedebase.com/dede/mychannel_add.php,即根目录下面dede(如果后台路径没有改的话)文件夹下面的mychannel_add.php,这个php程序,对应的模板文件是mychannel_add.htm,用到的数据库表是dede_channeltype。
现在回到新增内容模型界面:
第一项是:频道ID,这个“频道ID”并不是指这个模型id,它只是一个id号,这个频道ID对应的数据库表字段是“id”,而模型id对应的数据库表字段是“nid”,这二个id是非常容易混淆的。为了区别这二个id,我们看一下内容模型管理界面、数据库表dede_channeltype(只截取表中有用的部分,其它忽略)和新增内容模型部分截图三张图对比如下。
图21
图22
图23
在图21中的“id号”、“识别id”分别与图22中的字段“id”、“nid”对应,即id号和表中字段id同一个id,识别id和表中字段nid(nid是模型id)是一个id。上面提到的“频道ID”就是id号,也就是图22中字段“id”,而图23中第二项“名字标识”才是模型id,即对应表字段nid。这二者非常容易混淆。
我是如何分清的呢?我们这样来分析图21和图23,只不过都是数据库表字段,在模板里的不同的叫法吧了,这二张图里面的名字在图22对应表里都有,这些对应我们通过模板mychannel_add.htm来找。打开这个模板,找到从61行开始向下看,我截取一部分图如下所示。
我们找到:name="id",value="<?php echo $newid; ?>" 这个name="id"就是数据库表dede_channeltype里面对应的id,后面value 里面的变量$newid就是你在后台填写的唯一数字,也就是图23第一项,你在后面那个方框里写的数字。
我们再看:name="nid" type="text" id="nid" value="ch<?php echo $newid; ?>" 这个name="nid"就是数据库表dede_channeltype里面对应的模型id,即nid,后面value 里面的变量$newid就是你在后台填写的唯一数字,也就是图23
第二项名字标识,你在后面那个方框里写的数字。只不过在$newid前面强制加上了ch。
以下各项与数据库表dede_channeltype一一对应。与上面二个的分析完全一样,这里些对应不一一分析了,留给大家作练习用,希望大家自己分析一下,这样可以学习不少东西。
我们再回到第一项,下面有段说明是“数字,创建后不可更改,并具有唯一性。”,这里讲的唯一性,指的是你写的这个数值不能与其它模型重复,如文章的id号是1,商品的id号是6,分类信息的id号-8,在这里填写的频道id不能与这些id号重复,必须保持唯一性。
像id,nid都是通过模板mychannel_add.htm,收集数据,然后,通过这些字段,把收集到的数据插入到数据库,这一过程如何实现的呢?
当用户(或管理员或信息发布员)填写好数据后,当点击保存后,模板里面的这些字段如id,nid等,收集value后面的数据库,然后,通过<form>里面的action="mychannel_add.php",这个mychannel_add.php文件,把数据插入到数据库里面的。
在mychannel_add.php这个文件中,首先初始化一下,然后,检查收集到的数据如第一项id的数据是不是数字,不是就退出;第二项nid是不是“英文字母或与数字混合字符串”,不是就退出;第三项附加表addtable,是不是空,是空就退出程序,否则程序就向下运行,程序运行到$trueTable2 = str_replace("dede_",$cfg_dbprefix,$addtable);这一句,意思就是用用户填写的前缀即$cfg_dbprefix($cfg_dbprefix是用来收集用户填写的前缀)替换附加表$addtable里面的dede_这个前缀。
程序接着向下运行,走到38行,这一行用来判断,如果你选的模型是独立模型,那么,id就变成负数了,这一行就是用来实现这一功能的。接下来41行就是用来检查你的频道id,频道名称标识,附加表是不是已经存在于数据库,也就是检查唯一性。
接下来程序,继续向下运行,创建附加表,在创建附加表前,先判断一下是不是在数据库里已经存在,若表不存在或删除了表,就创建附加表,接着判断一下,这个表是不是独立模型,若是就创建附加表,否则就创建独立模型表。到目前程序已经运行到第104行。
接下来程序判断是否为系统模型,如果不是系统模型,就设置一下字段,接下来用mysql语言insert into 把收集到的数据插入到数据库中,程序结束,模型建好了。以下分析程序过程就是新增模型的建立过程。
我们回到图1找到第四项“附加表”,在这一行最后,有一个复选框,当我们选中的时候,点击存在完后,这个mychannel_add.php文件中程序运行到53行,即if(!$istb || $isdel==1)这一句后面的$isdel==1这句,这句的作用就是当我们选中后,这个判断就起作用了,如果你先中,当数据库中已经存在表了,那么,程序就会删除原来的表再重新建一个表,若在图1中没有选中,则$isdel==1不起来用。
第五项“模型性质”:这个你选择的是什么模型,程序会通过变量$issystem来判断,例如我们分析程序创建附加表时,有一句判断if($issystem != -1),这句用来判断你选中的不是独立模型,接着向下创建附加表。注意:独立模型和系统模型,自动模型区别是,独立模型不使用主表dede_archives,但系统强制创建字段aid,typeid,senddate,title, mid, channel,为什么会这样强制创建这些字段呢,大家想一下,不管什么表,你发布一篇内容,这篇内容必须有标题吧,必须有栏目吧,这个栏目肯定属于某一模型吧所以程序会强制创建必须要的字段,至于像发布时间要不要无所谓,对,但是我们往往会需要发布时间,所以,也在强制创建立的字段。
我们在建立织梦模型时,到底用自动模型还是系统模型,还是独立模型?这个具体问题,具体分析,系统模型建立了就不能删除了,是固定死的,而自己模型可以删除,这二个的话我建立用自动模型,对于独立模型,如果你站很小直内容不多的话,独立的可以选择因为,其它二个模型要分表有一些不必要的操作,小站用不了白白浪费,但是如果大站,建议一定要分表,而且这样可以减少服务器负担。总之,一般网站直接用织梦默认的自动模型,对于其它地方的东西如果没有原则问题,那么直接用织梦默认的就行。
剩下的都是与会员有关的选项,这些选择今天不作分析,这些会在分析会员模块的时候详细分析或者在作织梦二次开发的时候,详细分析。
总结:对于以上分析,您需要最基本的html和php程序知识。这个教程用到的表有:主表dede_archives,模型表dede_channeltype;用到的文件有:mychannel_add.php,mychannel_add.htm,还用到一些数据库知识,大家可以细细的研究一下这二个文件,特别是他们的对应关系,以及通过模板文件收集到的数据是如何插入到数据库里面的等。多分析一些你会发现不知不觉进步神速。