·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

官方的这个定时发帖的时间限制能不能取消或是调整? New

155 2
发表于 2024-5-1 22:00:18 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
官方的这个定时发帖的时间限制能不能取消或是调整?
New
 定时发帖,时间限制,设置时间,技术实现
官方的这个定时发帖的时间限制能不能取消或是调整?
New
 定时发帖,时间限制,设置时间,技术实现


官方默认是只能设置每小时的半小时0、30分钟,我想能实现能随意0-59分内,请技术大神帮忙实现,谢谢。。
我知道答案 回答被采纳将会获得1 贡献 已有0人回答
我要说一句 收起回复

评论2

AI智能体Lv.7 发表于 2025-3-14 17:51:11 | 查看全部
根据Discuz定时发帖功能的实现机制,要实现分钟级自由设置需要从以下四个层面进行改造(请严格按照操作顺序执行):

一、前端交互层改造
1. 在模板文件`template/default/forum/post_editor.htm`中找到分钟选择控件
2. 将原有的`<select>`控件替换为数值输入框:
  1. <input type="number" name="cronminute" id="cronminute" min="0" max="59" class="px" value="0">
复制代码


二、数据验证层增强
在插件入口文件`source/plugin/yourplugin/yourplugin.class.php`中添加:
  1. class plugin_yourplugin {
  2.     public function common() {
  3.         if($_GET['cronminute']) {
  4.             $_GET['cronminute'] = max(0, min(59, intval($_GET['cronminute'])));
  5.         }
  6.     }
  7. }
复制代码


三、任务调度层优化
1. 修改`source/include/cron/cron_publish.php`的触发条件:
  1. // 原代码
  2. if(($minute == 0 || $minute == 30) && $cron['available']) {

  3. // 修改为
  4. if($cron['available']) {
复制代码


2. 创建自定义任务调度器(推荐新建`source/plugin/yourplugin/cron/cron_minutely.php`):
  1. <?php
  2. if(!defined('IN_DISCUZ')) exit('Access Denied');

  3. $minute = date('i', TIMESTAMP);
  4. $query = C::t('forum_cron')->fetch_all_by_minute($minute);
  5. // 自定义执行逻辑...
复制代码


四、数据库层适配
1. 执行SQL变更存储结构:
  1. ALTER TABLE `pre_forum_cron` CHANGE `minute` `minute` VARCHAR(20) NOT NULL;
复制代码


注意事项:
1. 建议通过插件机制实现修改,避免直接修改核心文件
2. 需要同步修改手机版模板文件`template/default/mobile/forum/post_editor.htm`
3. 后台需增加参数过滤规则防止非法输入
4. 定时任务执行频率建议保持默认设置(系统会自动处理分钟级校验)

改造完成后,用户可在发帖界面直接输入0-59之间的任意整数值,系统将精准执行定时发布任务。建议配合缓存机制优化高频查询,具体实现可参考DZ插件网的技术方案。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
AI智能体Lv.7 发表于 2025-3-14 18:02:16 | 查看全部
针对Discuz定时发帖时间限制调整需求,可通过以下方案实现:

1. **模板层修改方案**
需修改发帖页面的时间选择器控件:
  1. <!-- 原代码(部分) -->
  2. <select name="cronminute">
  3.     <option value="0">00</option>
  4.     <option value="30">30</option>
  5. </select>

  6. <!-- 修改为 -->
  7. <select name="cronminute">
  8.     <!--php循环生成0-59选项-->
  9.     <?php for($i=0;$i<60;$i++):?>
  10.     <option value="<?php echo $i;?>"<?php echo $i==$_GET['cronminute']?' selected':'';?>><?php echo str_pad($i,2,'0',STR_PAD_LEFT);?></option>
  11.     <?php endfor;?>
  12. </select>
复制代码


2. **逻辑层验证修改**
在`source/module/forum/forum_post.php`中定位时间验证代码段:
  1. // 原验证代码(示例)
  2. if($cronminute != 0 && $cronminute != 30) {
  3.     showmessage('cron_time_invalid');
  4. }

  5. // 修改为范围验证
  6. if($cronminute < 0 || $cronminute > 59) {
  7.     showmessage('cron_time_invalid');
  8. }
复制代码


3. **计划任务触发机制优化**
建议在`source/class/cron/cron_publish.php`中增加触发频率:
  1. // 原配置
  2. array('cron' => array('*/30 * * * *', 0))

  3. // 修改为每分钟执行
  4. array('cron' => array('* * * * *', 0))
复制代码


4. **数据库适配处理**
检查`pre_forum_post`表中`cronpublish`字段是否为datetime类型,确保存储完整时间戳

**注意事项:**
1. 需同步修改移动端模板的时间选择逻辑
2. 高频执行计划任务时建议增加服务器性能监控
3. 后台可考虑增加分钟数范围限制配置项
4. 建议保留原30分钟间隔的异步任务作为兼容方案

**扩展建议:**
可通过hook机制实现更灵活的定时策略:
  1. // 在插件中注册时间验证hook
  2. class plugin_advancedcron {
  3.     public function common() {
  4.         if($_GET['mod'] == 'post') {
  5.             HOOK::listen('cron_validate');
  6.         }
  7.     }
  8. }
复制代码


以上方案需根据实际Discuz版本进行适配调整,修改前建议做好代码备份。如需更完整的实现方案,可参考DZ插件网的定时任务增强插件开发文档。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

最新热评 加载中...
AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:216.73.216.212,GMT+8, 2025-6-14 18:57 , Processed in 0.273369 second(s), 84 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表