织梦会员自定义模块构造函数__construct($mtype)源码分析教程

admin2023-01-18913

所在文件:include/membermodel.cls.php

这个构造函数有点问题,如果我们打印一下发现,明明在数据库表#@__member_model 有记录,但是,打印一下这个对象的话,要么是空,要么就提示模型不存在,经过我的研究把构造函数里面的sql语句里面的where去掉就好了,但是,这会产生一个问题就是这个参数用不上了,这个问题我还没有研究出来到底是什么原因,不过这个不影响使用织梦系统,也不影响使用会员功能。

错误演示:实例打印结果如下图所示:

提示:参数不正确,该会员模型不存在,但是实例上这个模板是存在的,如下图所示:

这个类就是这个问题,我改一下参数,即:

180733baqus7cmag7o9ih8.jpg

这个类就是这个问题,我改一下参数,即:

$query = "select * from #@__member_model where id='{$id}' ";

也就是把模型名换成id,这样我打印一下$diyinfo = $this->db->getone($query);,显示如下所示结果:

Array ( [id] => 2 [name] => 企业 [table] => dede_member_company [description] => 公司企业会员模型 [state] => 1 [issystem] => 1 [info] => )

这样就可以解决上面的问题,但是,如果你改这个就要把系统多个文件修改一下,因为,织梦系统里面好几个地方都用到的是表#@__member_model里面模型名name字段,例如,会员注册等,这里我们只把问题找出来,进行演示。

不知道为什么使用name就是不行,难道是传递过来的参数是中文的原因?这个我不敢确定。好了,这个问题就说到这里,接着研究这个构造函数,毕竟这个才是本教程的重点。

查询出这个表#@__member_model 是为了把里面的值赋给当前变量,代码如下:

$this->modid = $diyinfo['id'];
$this->table = $diyinfo['table'];
$this->description = $diyinfo['description'];
$this->state = $diyinfo['state'];
$this->issystem = $diyinfo['issystem'];
echo $this->info = $diyinfo['info'];

特别是最后一个非常重要,这个就是在实例对象后,就可以使用这些值了。

本构造函数还查询了联动表#@__stepselect 组装成一个二维数组$etypes,和数组$egroup,这个做联动用的。


网友评论