你需要修改的是资源站添加/编辑页面的模板文件,通常是:
/application/admin/view/collect/info.html
我们找到了正确的模板文件 info.html,这是资源站添加/编辑页面。看到“数据操作”部分使用了单选框(radio),其 name="collect_opt",当前有3个值:0(新增+更新),1(新增),2(更新)。我们需要添加一个新选项“更新(不改变更新时间)”,通常可以加一个值为3的选项。但是注意:这里 collect_opt 的值是 0、1、2,我们新增一个 3,并在模型中处理。
模板中对应代码:
<div class="layui-form-item">
<label class="layui-form-label">{:lang('admin/collect/data_opt')}:</label>
<div class="layui-input-block">
<input name="collect_opt" type="radio" value="0" title="{:lang('admin/collect/add_update')}" {if condition="$info['collect_opt'] eq 0"}checked {/if}>
<input name="collect_opt" type="radio" value="1" title="{:lang('admin/collect/add')}" {if condition="$info['collect_opt'] eq 1"}checked {/if}>
<input name="collect_opt" type="radio" value="2" title="{:lang('admin/collect/update')}" {if condition="$info['collect_opt'] eq 2"}checked {/if}>
</div>
<div class="layui-form-mid layui-word-aux" style="">{:lang('admin/collect/data_opt_tip')}</div>
</div>
我们需要增加一个值为3的选项,例如:
<input name="collect_opt" type="radio" value="3" title="更新(不改变更新时间)" {if condition="$info['collect_opt'] eq 3"}checked {/if}>
但是注意语言包可能没有这个定义,可以直接写标题中文,但最好也增加语言项。
然后,模型文件 Collect.php 的 vod_data 等方法需要处理 collect_opt == 3 的情况。在模型中,可能会有一个 $data_action 变量,对应 collect_opt,我们根据它决定是否包含 vod_time 字段。
现在用户已经提供了模板文件,我们可以指导他们修改模板。然后提示他们修改模型文件,但模型文件未提供,我们可以给出具体修改思路。
用户之前问“如何通过修改文件实现可以选择入库时 数据操作 增加 一项 更新+不改变原有update time”,我们现在有了模板,可以给他确切的修改步骤。
这就是资源站添加/编辑页面的模板,其中“数据操作”使用了单选框(radio)。现在我们来增加一个新选项“更新(不改变更新时间)”(值为3),并指导你修改对应的模型文件(Collect.php)以实现该功能。
✅ 第一步:修改模板文件 info.html
在你已有的代码中找到“数据操作”部分(约第 45~52 行),增加一个值为 3 的单选按钮。修改后如下:
<div class="layui-form-item">
<label class="layui-form-label">{:lang('admin/collect/data_opt')}:</label>
<div class="layui-input-block">
<input name="collect_opt" type="radio" value="0" title="{:lang('admin/collect/add_update')}" {if condition="$info['collect_opt'] eq 0"}checked {/if}>
<input name="collect_opt" type="radio" value="1" title="{:lang('admin/collect/add')}" {if condition="$info['collect_opt'] eq 1"}checked {/if}>
<input name="collect_opt" type="radio" value="2" title="{:lang('admin/collect/update')}" {if condition="$info['collect_opt'] eq 2"}checked {/if}>
<!-- 新增这一行 -->
<input name="collect_opt" type="radio" value="3" title="更新(不改变更新时间)" {if condition="$info['collect_opt'] eq 3"}checked {/if}>
</div>
<div class="layui-form-mid layui-word-aux" style="">{:lang('admin/collect/data_opt_tip')}</div>
</div>
建议同步修改语言包文件(如 /application/lang/zh-cn.php 或 /application/admin/lang/zh-cn.php),添加对应语言项,避免硬编码中文,但这不是必需的。
⚙️ 第二步:修改模型文件 Collect.php
核心逻辑在模型文件中,需要处理新值 3(更新但不更新时间)。模型文件位置通常在 /application/common/model/Collect.php 。
🔍 查找关键代码段
我们提供了完整的Collect.php模型文件,现在需要找出如何修改以实现“更新不改变update_time”的功能。用户已经在info.html中增加了选项(value=3)。现在我们需要在Collect.php的vod_data、art_data、actor_data、role_data、website_data等方法中,根据$param[‘opt’](对应collect_opt字段)的值判断,当opt==3时,在更新数据中排除时间字段(如vod_time、art_time等)。(如果只是修改vod视频,其他如art文章,actor演员,role角色,website站群等可不修改。)
关键:在这些*_data方法中,更新时都会设置$update['vod_time'] = time();(或类似)。我们需要在设置之前判断$param['opt'] == 3,如果是,则不设置该字段。
观察代码:在vod_data中,更新部分有:
if(count($update)>0){
$update['vod_time'] = time();
$where = [];
$where['vod_id'] = $info['vod_id'];
$update = VodValidate::formatDataBeforeDb($update);
$res = model('Vod')->where($where)->update($update);
...
}
这就是更新时间的地方。所以我们需要在添加$update['vod_time'] = time();之前,判断$param['opt']是否为3,如果是3,则不添加。
同样在art_data、actor_data、role_data、website_data中也有类似逻辑。
另外,还需要注意:vod_data中还有一处地方,在数据新增时,也设置了$v['vod_time'] = time();(在约第358行),但那是新增,不是更新,我们不需要改变新增逻辑,因为用户要求的是“更新不改变update time”,新增时时间应该正常设置。但也要注意,新增时如果外部传入vod_time_update,代码中已有逻辑:if (!empty($v['vod_time_update']) && strlen($v['vod_time_update']) == 10) { $v['vod_time'] = (int)$v['vod_time_update']; },但这是采集源提供的时间。我们不需要修改新增。
因此,修改步骤:
-
在vod_data方法中,找到更新时设置
$update['vod_time'] = time();的位置,添加判断条件。 -
同样在art_data、actor_data、role_data、website_data中做同样修改。
注意:art_data中设置$update['art_time'] = time();,actor_data中$update['actor_time'] = time();,role_data中$update['role_time'] = time();,website_data中$update['website_time'] = time();。
另外,还需要考虑参数传递:在Controller中调用vod_data($param, $res)时,param中包含了collectopt,所以可以直接使用‘param中包含了collectopt,所以可以直接使用‘param[‘opt’](因为在Collect控制器中,param‘包含了所有采集参数)。在模型中,我们通过param‘包含了所有采集参数)。在模型中,我们通过param[‘opt’]获取。
✅ 一、修改 vod_data 方法
在文件中找到 vod_data 方法,定位到更新数据的代码段,原代码如下:
if(count($update)>0){
$update['vod_time'] = time();
$where = [];
$where['vod_id'] = $info['vod_id'];
$update = VodValidate::formatDataBeforeDb($update);
$res = model('Vod')->where($where)->update($update);
// ...
}
修改为:
if(count($update)>0){
// 当数据操作为“更新(不改变更新时间)”(opt=3)时,不修改 vod_time
if ($param['opt'] != 3) {
$update['vod_time'] = time();
}
$where = [];
$where['vod_id'] = $info['vod_id'];
$update = VodValidate::formatDataBeforeDb($update);
$res = model('Vod')->where($where)->update($update);
// ...
}
后记:📌 注意事项
-
参数传递:
$param数组中包含opt字段(即后台选择的“数据操作”值),已经通过控制器传入模型,所以可以直接使用$param['opt']。 -
新增操作不受影响:新增时的时间设置(如
$v['vod_time'] = time();)保持不变,因为用户需求是“更新不改变更新时间”,新增时仍应记录当前时间。 -
其他字段:
vod_time是主要更新时间字段,无需修改vod_time_add等新增时间字段。 -
测试:修改后,在后台添加一个资源站,选择“更新(不改变更新时间)”(value=3),执行采集,检查数据库中对应记录的
vod_time是否保持不变。








暂无评论内容