菜鸟学编程:为teamtoy添加todo任务重复设置功能

简介:

续上篇:http://lazycai.blog.51cto.com/690494/765860

其实发现做hacking这种活儿,只要思路顺了,写起来还是挺快的··

1、数据库添加一个cycle字段,类型为int,不同的数值分别代表0【不重复】1【每日重复(工作日)】2【每周重复】3【每月重复】。
默认值为0
 
2、进入 code/mod/todo.class.php 。这一次,我们不仅要修改 update (save先不改了,这个周期设置的功能无需在添加任务时设定),还要修改 check 这个功能。首先是update,思路跟之前添加due_date的思路类似,添加
$cycle = z(v('cycle'));
以及
`cycle` = '" . $cycle . "'
的字段在相应的位置。然后进入 view/layout/ajax/todo/modify.tpl.html 进行测试,添加radio buttons:
<div id="todo_cycle">
     重复周期:<input type="radio" name="cycle" value="0">不重复&nbsp;&nbsp;<input type="radio" name="cycle" value="1">每日&nbsp;&nbsp;<input type="radio" name="cycle" value="2">每周&nbsp;&nbsp;<input type="radio" name="cycle" value="3">每月
</div>
这样就可以输入了,不过这个页面现在默认打开是啥项都没选,我们需要让他默认选择了正确的项,让正确的项处于默认checked的状态。
这个可能可以用一个变量的方式来处理,不过具体怎么传值没想好,所以下面就用了一个笨办法,倒是也管用:
重复周期:<input type="radio" name="cycle" value="0" <?php if( $tinfo['cycle'] == 0 ){ echo 'checked'; } ?>>不重复&nbsp;&nbsp;<input type="radio" name="cycle" value="1" <?php if( $tinfo['cycle'] == 1 ){ echo 'checked'; } ?>>每日&nbsp;&nbsp;<input type="radio" name="cycle" value="2" <?php if( $tinfo['cycle'] == 2 ){ echo 'checked'; } ?>>每周&nbsp;&nbsp;<input type="radio" name="cycle" value="3" <?php if( $tinfo['cycle'] == 3 ){ echo 'checked'; } ?>>每月
ok,这样数值输入的部分就搞定了,接下来去修改check功能。
 
3、我们需要的修改,说穿了是在 check 这个动作的同时,将之前的todo复制一份,把一份check掉,另一份改个due_date(以及id)。那么,首先考虑复制的实现。
直接帖代码吧:
首先在check函数中添加如下代码,我直接放在$todo定义那行的后面了:
          if( $todo['cycle'] != 0 )
          {
               //如果todo设置了重复周期,则复制该todo
               $this->copy_todo($tid);
          }
(话说一开始不知道$this->的用法,函数调用折腾我半天,最后还是靠龙飞的指点~)
然后在check函数后面加一个copy_todo函数:
     public function copy_todo($tid)
     {
          if( $tid < 1 ) return ajax_box('错误的TODO ID');
         
          $todo = get_line("SELECT * FROM `todo` WHERE `id` = '" . intval( $tid ) . "' LIMIT 1");
          $name = $todo['name'];
          $link = $todo['link'];
          $desp = $todo['desp'];
          $uid = $todo['uid'];
          $creator_uid = $todo['creator_uid'];
          $pid = $todo['pid'];
          $follow_uids = $todo['follow_uids'];
          $due_date = $todo['due_date'];
          $cycle = $todo['cycle'];
          switch($cycle) {
               case 0:
                    //0的话就不该进来这里吧
                    break;
               case 1:
                    $due_date = date("Y-m-d", strtotime(date("Y-m-d", strtotime($due_date)) . " +1 day"));
                    break;
               case 2:
                    $due_date = date("Y-m-d", strtotime(date("Y-m-d", strtotime($due_date)) . " +1 week"));
                    break;
               case 3:
                    $due_date = date("Y-m-d", strtotime(date("Y-m-d", strtotime($due_date)) . " +1 month"));
                    break;
          }
         
          $sql = "INSERT INTO `todo` (  `name` , `link` , `desp`  , `uid` , `creator_uid` , `pid` , `is_done` , `follow_uids` ,  `timeline` , `check_time`, `due_date`, `cycle` ) VALUES (    '" . $name . "'  ,  '" . $link . "',  '" . $desp . "' , '" . $uid . "'  , '" . $creator_uid . "'  ,  '" . $pid . "' , '" . 0 . "'  , '" . $follow_uids . "' , NOW() , NOW() , '" . $due_date . "' , '" . $cycle . "' )";
         
          run_sql( $sql );

     }
 
这样就完成了。

 

目前的感觉是,自己对异常没做什么处理,可能有隐患,但暂时也想不到那么多,反正是内部人员使用的系统,能用就行啦。

还有个管理员更改成员密码的功能也做好了,见下篇说明。



     本文转自shenleigang 51CTO博客,原文链接:http://blog.51cto.com/lazycai/770305,如需转载请自行联系原作者


相关文章
|
6月前
|
机器学习/深度学习 编译器 C++
C++模板元模板实战书籍讲解第一章(顺序、分支与循环代码的编写)--续篇
C++模板元模板实战书籍讲解第一章(顺序、分支与循环代码的编写)--续篇
53 0
|
4月前
答网友疑问:ABAP Function Module 如何支持内表结构不确定的动态输入参数试读版
答网友疑问:ABAP Function Module 如何支持内表结构不确定的动态输入参数试读版
16 0
|
5月前
|
前端开发 数据处理
【前端学习】—多种方式实现数组拍平(十一)
【前端学习】—多种方式实现数组拍平(十一)
|
7月前
|
Java Kotlin
开心档-软件开发入门之​Kotlin 条件控制
开心档-软件开发入门之​Kotlin 条件控制
20 0
|
9月前
|
前端开发
第一个网页总结暨前端基础知识补充
一,css基本引入 二,字体引入样式 三,类名约定 四,文字相关 五,相关技巧 分竖线 六,案例遇到问题及解决方法 七,文本格式化标签 八,meta标签 九,表格 十,input表单 十 一,dl标签 十二,css相关补充 背景, 透明图像,opacity![](https://img-blog.csdnimg.cn/e6756a58e45c4b94aac154aeb76148c6.png) 在搜索框内添加图标 css3 边框-阴影,圆角 文本溢出显示,换行 css3 2D转换 transition过渡 Bootstrap4 颜色引用 Bootstrap4 进度条
62 0
第一个网页总结暨前端基础知识补充
|
12月前
|
开发工具
游戏开发实战教程(5):重复执行和逻辑循环的区别
将循环分为重复执行和逻辑循环,应该是微信小游戏开发工具中所特有的。因为之前做游戏,无论是使用哪种工具或者哪种编程语言,对于循环来说,都只有一种,不会存在歧义或者误用。但是这里将循环分为了两种,如果误用的话会导致出现一些奇怪的问题。所以需要单独拿出来区分一下,避免掉进这个“坑”。
115 0
|
12月前
|
开发工具
微信小游戏开发实战5-重复执行和逻辑循环的区别
本篇主要内容包括了解帧的概念,以及理解重复执行和逻辑循环这两种循环积木块之间的区别。 如果你没有任何的游戏开发经验,欢迎阅读我的“人人都能做游戏”系列教程,它会手把手的教你做出自己的第一个小游戏。
67 0
|
JSON 前端开发 数据格式
#yyds干货盘点 【React工作记录十二】前端对接口参数错误如何解决
#yyds干货盘点 【React工作记录十二】前端对接口参数错误如何解决
148 0
|
前端开发
前端知识学习案例9vs code-复制操作
前端知识学习案例9vs code-复制操作
46 0
前端知识学习案例9vs code-复制操作
|
前端开发
前端项目实战122-数据过滤操作额外找个参数赋值
前端项目实战122-数据过滤操作额外找个参数赋值
66 0