| 插件 | 建站系统 V3.26 |
| 应用作者 | 迅睿官方团队 |
| 发布时间 | 2022-03-01 15:30:06 |
| 更新时间 | 2025-10-09 09:03:09 |
如图,“全部项目”列表是创建项目模块后用户中心自动生成的列表,蓝色划圈的三个列表是准备新创建的。

预想的效果是:
——竞标中:竞标中的项目,发布人仍然可以修改项目字段,接受竞标,并且同意接受某个竞标;
——进行中:接受某个竞标并付款给平台后,项目状态自动或管理员手动更改为“进行中”,同时将中标人和中标金额传递到项目字段中。进行中的项目发布人和中标人双方均可以看到,项目字段发布人不得再编辑项目字段(或者仅可以更新项目状态字段),进行中的项目双方可以在项目编辑页面进行对话沟通;
——已完成:管理员或项目发布人将项目状态更改为“已完成”后,该条项目就转变为“已完成”项目,之后双方均不得再对项目进行任何编辑。
目前已经实现的:
我是通过在用户中心创建了三个数据控制器,分别对应“竞标中”“进行中”和“已完成”,然后在where_list处用项目状态字段对项目列表进行了限定,这样三个列表就能分别展现不同进度的项目列表(如下图)。同时,对生成的post页面进行了修改,基本实现了对三个状态项目的编辑或查看详情功能。

我的疑问:
——我的上述方法是否符合系统逻辑,能否基于模块自动生成的Home控制器进行加工,以达到上述效果?
——项目状态如果自动变更的话,是通过钩子还是控制器完成?在控制器里是不是也能用钩子?
// index public function index() { $tid = (int)\Phpcmf\Service::L('input')->get('tid'); $where = ['`uid`='.$this->uid]; switch ($tid) { case 1: // 收入 $where[] = '`value` > 0'; break; case -1: // 消费 $where[] = '`value` < 0'; break; default : // 全部 break; } \Phpcmf\Service::M()->set_where_list(implode(' AND ', $where)); list($tpl, $data) = $this->_List(['tid' => $tid]); // 初始化 $data['param']['tid'] = $data['param']['total'] = 0; // 列出类别 $my = []; $type = ['0' => '全部', '1' => '收入', '-1' => '消费']; foreach ($type as $i => $t) { $data['param']['tid'] = $i; $my[$i] = [ 'name' => dr_lang($t), 'url' => dr_member_url('pay/paylog/index', $data['param']) ]; } \Phpcmf\Service::V()->assign([ 'tid' => $tid, 'type' => $my, ]); \Phpcmf\Service::V()->display('paylog_index.html'); }