[置顶] ajax实时任务提示功能的实现 -- vb2005xu自己动手系列(1)
发布日期:2021-11-17 11:50:33 浏览次数:1 分类:技术文章

本文共 10552 字,大约阅读时间需要 35 分钟。

本项目运用了 FLEAPHP,MYSQL,SMARTY,FCKEDItor,JSON,PROTOTYPE的技术,在这里首先要感谢这些开源项目的开发者给我们带来的好东西,其次要感谢[生气猪--让我帮她做一个这样的小东西来提醒她按时完成事情].花了一个3个小时完成.希望给大家起到抛砖引玉的作用啊....

[本帖代码均为本人原创,转帖请注明引用来路,谢谢合作,积分太低啊,想加些.(*^__^*) 嘻嘻……]

 

项目代码结构见 我之前写的[EXT/FCKEditor 集成 -- AJAX UI -- 一种web开发的新的思维,要及时转换思想]一文.

中的

├─taskofpig

│  ├─Controller
│  ├─Dao
│  ├─js
│  ├─music
│  ├─tpl
│  ├─tpl_c
│  └─_log

项目代码如下:

db.sql

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for task
-- ----------------------------
CREATE TABLE `task` (
  `id` int(11) NOT NULL,
  `title` varchar(100) collate utf8_unicode_ci NOT NULL,
  `desc` text collate utf8_unicode_ci,
  `date` datetime NOT NULL,
  `created` int(11) default NULL,
  `updated` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- ----------------------------

-- Table structure for task_seq
-- ----------------------------
CREATE TABLE `task_seq` (
  `id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 

/ucren/taskofpig/index.php

 

<?php

//设置正确的时区
date_default_timezone_set("Asia/Shanghai");

define('TASKOFPIG_DIR',dirname(__FILE__)) ;

require('../phplibs/FLEA/FLEA.php');

// 对$GLOBALS[G_FLEA_VAR]['CLASS_PATH'] 进行配置

FLEA::import(TASKOFPIG_DIR); //将当前目录加入到环境变量中

FLEA::loadAppInf('appConfig.php') ; //将配置文件单独分出来,容易维护

FLEA::init();

// 由于 FLEA_Db_TableDataGateway 并不是自动载入的,因此需要明确载入
FLEA::loadClass('FLEA_Db_TableDataGateway');

FLEA::runMVC(); 

?>

 

/ucren/taskofpig/appConfig.php

<?php

// 对 $GLOBALS[G_FLEA_VAR]['APP_INF'] 进行配置
return array(
 'dispatcher' => 'FLEA_Dispatcher_Simple' , //定制调度器 FLEA_Dispatcher_Auth
 'controllerAccessor' => 'ctl' ,
 'actionAccessor' => 'act' ,

    'view' => 'FLEA_View_Smarty', //定制视图

    'viewConfig' => array(
        'smartyDir'         => '../phplibs/Smarty',
        'template_dir'      => './tpl',
        'compile_dir'       => './tpl_c',
        'left_delimiter'    => '<%',
        'right_delimiter'   => '%>',
  'debugging'   => false
    ),
   
    'dbDSN' =>  array( //定制数据库连接参数
     'driver'        => 'mysql',
        'host'          => 'localhost',
        'login'         => 'dbuser',
        'password'      => 'dbpass',
        'database'      => 'dbname' ,
  'charset '  => 'utf8'
 ) ,
 
 'logFileDir' => './log' , //定制日志
 'logFilename' => 'task_admin.log'
 
);
?>

 

/ucren/taskofpig/Dao/Table.php

<?php

//生气猪的任务计划表
class Dao_TaskTable extends FLEA_Db_TableDataGateway
{
 // 指定数据表名称
    var $tableName = 'task';
    // 指定主键字段名
    var $primaryKey = 'id';
}

?>

 

/ucren/taskofpig/Controller/Default.php

<?php

FLEA::loadFile('Dao_Table.php',true) ;
FLEA::loadFile('FLEA_Ajax_JSON.php',true) ;
class Controller_Default extends FLEA_Controller_Action
{
 var $smarty ;
 function Controller_Default()
 {
  $this->smarty = $this->_getView(); 
  $this->smarty->assign('sitename','任务计划表 -- 生气猪') ;
  $this->smarty->assign('opname','任务列表') ;//缺省应该在子模块中更改值
 }
    function actionIndex()
    {     
  $this->toModulePage(); //缺省显示任务列表页
    }
  //定义一个函数用于调用FCKeditor
    function call_fck($input_name,$input_value,$w='800',$h='400')
    {
     include_once '../fckeditor/fckeditor.php';
  $fcked = new FCKeditor($input_name) ;
     $fcked->BasePath = '../fckeditor/';
  $fcked->ToolbarSet = 'Default' ; //工具栏设置
  $fcked->InstanceName = $input_name ;
  $fcked->Width = $w;
  $fcked->Height = $h;
  $fcked->Value = $input_value;
  
  $fck_area = $fcked->CreateHtml();  
  $this->smarty->assign('fck_area',$fck_area);
  unset($fck_area) ;
  unset($fcked) ;
    }
   
    function _showPage($tpl='taskofpig.main.html')
 {
  $this->smarty->display($tpl);
 }
 
 function actionAdd()
 {
  $this->addTask();
 }
 function actionUpdate()
 {
  $this->updateTask();
 }
 
 function deleteTask($id){
     $row = array('id'=>$id);
     $thisDao = & new Dao_TaskTable() ;
     $status = $thisDao->remove($row); //返回boolean值
     unset($thisDao);
     return $status ;
    }
 function listTask()
    {
     $thisDao = & new Dao_TaskTable() ;
     $rows = $thisDao->findAll(); //二维数组
     foreach($rows as &$row) //注意这里要传引用
     {
      $row['desc'] = mb_substr($row['desc'],0,40,'UTF-8'); 
     }
     $this->smarty->assign('rowSet',$rows);
     $this->_showPage();
    }   

    function addTask()

    {
     $thisDao = & new Dao_TaskTable() ;
     $row = array(
      'title' => $_REQUEST['title'],
      'desc' => $_REQUEST['desc'],
      'date' => $_REQUEST['date']
     );
     $commitId = $thisDao->create($row);
     unset($thisDao);
     echo "成功添加新任务";
     redirect( url("Default"),1) ;
    }
    function updateTask()
    {
     $thisDao = & new Dao_TaskTable() ;
     $row = array(
      'id' => $_REQUEST['id'],
      'title' => $_REQUEST['title'],
      'desc' => $_REQUEST['desc'],
      'date' => $_REQUEST['date']
  );
  $commitId = $thisDao->update($row);
     unset($thisDao);

     echo "成功更新任务";

     redirect( url("Default"),1) ; 
    }
 function queryTask($id){     
     $thisDao = & new Dao_TaskTable() ;     
     $row = $thisDao->find(array('id'=>$id));      
     unset($thisDao);
     return $row ;
    }
   
    function queryTaskForDate($date=null)
    {
     $thisDao = & new Dao_TaskTable() ; //'2008-08-17 07:42:29'
     $row = $thisDao->find(array('date'=>date('Y-m-d H:i:s')));      
     unset($thisDao);
     
     if (!empty($row))
     {      
      $jsonobj = new Services_JSON();
      echo $jsonobj->encode($row);
     }
     else
      die(date('Y-m-d H:i:s'));
    }
    //任务流转控制方法
 function toModulePage()
    {    
     if ($_REQUEST['op'] == 'search') {
      $this->queryTaskForDate();      
     }
     else if ($_REQUEST['op'] == 'add') {
      $this->smarty->assign('opname','添加新任务') ;
      $this->smarty->assign('taskTime',date('Y-m-d H:i:s')) ;
   $this->call_fck('desc','');
      $this->_showPage('taskofpig.add.html');
     }
     else if ($_REQUEST['op'] == 'del') {
      if ( isset($_REQUEST['id']) && is_numeric($_REQUEST['id']) )
       $status = $this->deleteTask($_REQUEST['id']) ;
      $this->listTask();
     }
     else if ($_REQUEST['op'] == 'edit') {
      if ( isset($_REQUEST['id']) && is_numeric($_REQUEST['id']) ){
       $row = $this->queryTask($_REQUEST['id']) ;
      } 
       $this->call_fck('desc',$row['desc']);
      unset($row['desc']) ;
      $this->smarty->assign('rowSet',$row);
      $this->smarty->assign('opname','修改任务') ;
      $this->_showPage('taskofpig.edit.html');
     }
     else { //列表
      $this->listTask();
     } 
    }
}

?>

 

/ucren/taskofpig/tpl/taskofpig.main.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><%$sitename%> -- <%$opname%></title>
<script type="text/javascript" src="/ucren/prototype/prototype.js"></script>
<script type="text/javascript" src="/ucren/json/json_parse.js"></script>
<script type="text/javascript" src="js/tasktip.js"></script>
</head>
<body>
<bgsound>
<div>
 <span id='task_attime'></span>
</div>
<hr>
<p>
 <span onClick="document.location='index.php?op=add'">添加</span> |
 <span onClick="document.location='index.php?op=search'">查看任务提示</span> |
</p>
<hr>

<hr>

<table width="90%" border="1" cellspacing="1" bgcolor="#cfdadc">
 <tr bgcolor="#e8edec" align="center">
  <td><b>ID</b></td>
  <td><b>主题</b></td>
  <td><b>任务内容</b></td>
  <td><b>任务提示时间</b></td>
  <td colspan="2"><b>管理</b></td>
 </tr>
 <%section name=rowIndex loop=$rowSet%>
 <tr align="center">  
  <td><%$rowSet[rowIndex].id%></td>
  <td><%$rowSet[rowIndex].title%></td>
  <td><%$rowSet[rowIndex].desc%></td>
  <td><%$rowSet[rowIndex].date%></td>
  <td onClick="document.location='index.php?op=edit&id=<%$rowSet[rowIndex].id%>'"><b>编辑</b></td>
  <td onClick="document.location='index.php?op=del&id=<%$rowSet[rowIndex].id%>'"><b>删除</b></td> 
 </tr>
 <%/section%>
</table>

</body>

</html>

 

/ucren/taskofpig/tpl/taskofpig.edit.html

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><%$sitename%> -- <%$opname%></title>
</head>

<body bgcolor="e8edec">

<div align="center">

<form method="post" action="index.php?&act=update&id=<%$rowSet.id%>">
 <table width="80%" border="1" cellspacing="1" bgcolor="#cfdadc">
      <tr bgcolor="e8edec">
        <td>任务标题: <input name="title" type="text" size="80" value="<%$rowSet.title%>"></td>       
      </tr>
      <tr bgcolor="e8edec">
        <td>提示时间: <input name="date" type="text" size="40" value="<%$rowSet.date%>"></td>       
      </tr>

      <tr bgcolor="e8edec">

        <td class="forumRow">任务内容<%$fck_area%></td>
      </tr>
     </table> 
   <input type="submit" value="提交"> &nbsp;&nbsp;&nbsp;          
  <input type="button" value="返回" οnclick="document.location='index.php'">       
</form>
</div>
</body>
</html>

/ucren/taskofpig/tpl/taskofpig.add.html

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><%$sitename%> -- <%$opname%></title>
</head>
<body bgcolor="e8edec">

<div align="center">

<form method="post" action="index.php?&act=add">
 <table width="80%" border="1" cellspacing="1" bgcolor="#cfdadc">
      <tr bgcolor="e8edec">
        <td>任务标题: <input name="title" type="text" size="80" ></td>       
      </tr>
      <tr bgcolor="e8edec">
        <td>提示时间: <input name="date" type="text" size="40" value="<%$taskTime%>"></td>       
      </tr>

      <tr bgcolor="e8edec">

        <td class="forumRow">任务内容<%$fck_area%></td>
      </tr>
     </table> 
  <input type="submit" name="Submit" value="提交"> &nbsp;&nbsp;&nbsp;          
  <input type="reset" name="Submit3" value="重设">
</form>
</div>
</body>
</html>

 

/ucren/taskofpig/js/tasktip.js

//任务提示脚本实现,依赖于/ucren/prototype/prototype.js

var TaskTipAjax = function (){
 this.desc = '按一定的时间间隔查询数据库中到期的事件信息,并给出提示[打开新窗口,播放一段音乐]' ;
}

//通过Ajax按时查询和提示

TaskTipAjax.prototype.doAction = function(obj)
{
 var myAjax = new Ajax.Request(
  'index.php?op=search' ,
  {
   method: 'get' ,asynchronous: true ,
   onComplete: obj.showResponse
  }
 ) ;
}
TaskTipAjax.prototype.showResponse = function (response)
{
 if (response.responseText != '')
 {
  //此方法在/ucren/json/json_parse.js中定义
  //task_obj是一个对象
  //task_obj.id task_obj.title task_obj.desc task_obj.date
  var task_obj = json_parse(response.responseText);
  
  var newwin=window.open('','任务报时器','height=200, width=600,toolbar=0,menubar=0,location=0, status=0');
     newwin.opener = null // 防止代码对论谈页面修改
     //防止页面内容重复
     if( typeof(newwin.document.body) != "undefined")
        newwin.document.body.innerHTML = "";   
     newwin.document.write("<html><body><bgsound src='music/moonlight.mp3' autostart=true loop=infinite>");
     newwin.document.write('<h1>任务报时器</h1><br/>');

     newwin.document.write('<table border="1">');

    
     newwin.document.write('<tr>');
     newwin.document.write('<td width="33" bgcolor="#E8E8E8">ID</td>');
     newwin.document.write('<td width="33" bgcolor="#E8E8E8">标题</td>');
     newwin.document.write('<td width="33" bgcolor="#E8E8E8">描述</td>');
     newwin.document.write('<td width="33" bgcolor="#E8E8E8">时间</td>');    
     newwin.document.write('</tr>');
    
     newwin.document.write('<tr>');
     newwin.document.write('<td>'+ task_obj.id +'</td>');
     newwin.document.write('<td>'+ task_obj.title +'</td>');
     newwin.document.write('<td>'+ task_obj.desc +'</td>');
     newwin.document.write('<td>'+ task_obj.date +'</td>');    
     newwin.document.write('</tr>');    
    
     newwin.document.write('</table>');
    
     newwin.document.write("</body></html>");
     //置顶
     newwin.focus();
    
 }
}
 
var obj = new TaskTipAjax();
setInterval("obj.doAction(obj)",1000) ;

 

/ucren/taskofpig/music/moonlight.mp3

这个音乐 可以自己改

 

上面的代码熟悉JAVA的应该都可以看懂,这里只是要阐述一个简单的设计方案,希望大家予以增加扩展功能,谢谢,发我邮件,或者留言.

 

我觉得软件开发最重要的是开发思路,至于用什么语言实现倒是其次了,(*^__^*) 嘻嘻…… 

 

  • (216.8 KB)
  • 描述: 程序截图
  • 下载次数: 75
  • (450.3 KB)
  • 下载次数: 22

转载地址:https://blog.csdn.net/vb2005xu/article/details/52539660 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:[置顶] 网站浏览统计功能的简单实现-- vb2005xu自己动手系列(2)
下一篇:[置顶] EXT/FCKEditor 集成 -- AJAX UI -- 一种web开发的新的思维

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月06日 19时57分43秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

弘辽科技:做母亲、还是创业?我做了一个双项选择题 2019-04-30
弘辽科技:夜经济 偷偷长成36万亿! 2019-04-30
弘辽科技:从导购、电商到直播社区,蘑菇街为何做不好电商生意? 2019-04-30
弘辽科技:淘宝开店后就可以直播吗?淘宝直播技巧是什么? 2019-04-30
弘辽科技:淘宝开店后不卖东西可以吗? 2019-04-30
弘辽科技:下沉市场的数字化渗透与割裂 2019-04-30
弘辽科技:拼多多什么时候有活动?参加活动有哪些好处? 2019-04-30
弘辽科技:扶持100个新品牌销量过亿投资人在抖音看到哪些机会? 2019-04-30
弘辽科技:2021开网店还赚钱吗? 2019-04-30
弘辽科技:抖音电商,一场标准的「字节」式战役 2019-04-30
弘辽科技:小伙开网店创业,为卖货反串美妆女主播,只为给父母买房 2019-04-30
弘辽科技:小伙退伍网上创业卖特产,教你免费如何开淘宝网店 2019-04-30
弘辽科技:80后女大学生开网店创业 年销售额达100万元 2019-04-30
弘辽科技:从开网店,到拥有自己的公司、厂房、基地。 2019-04-30
弘辽科技:淘宝开店后怎么建群?手机端怎么建群? 2019-04-30
弘辽科技:新电商掌门人:陈磊、蒋凡、徐雷「掰手腕」 2019-04-30
弘辽科技:新手前期如何开网店? 2019-04-30
弘辽科技:一件代发什么商品最容易赚钱?怎么做优化? 2019-04-30
弘辽科技:新手前期如何开网店? 2019-04-30
弘辽科技:市值仅次京东、直追百度,这家韩国巨头什么来头? 2019-04-30