`
Fire.
  • 浏览: 1390 次
  • 性别: Icon_minigender_2
  • 来自: 四川成都
文章分类
社区版块
存档分类
最新评论

ThinkPHP中Full Calendar的使用

    博客分类:
  • php
阅读更多
[size=x-large]   这次所做的项目涉及到使用日历插件的问题,在朋友的推荐下使用了fullcalendar这个插件,网上的各种评价fullcalendar都还不错,但是具体的使用就有点迷茫,经过了一个多月的摸索,终于摸清了一些fullcalendar的功能,下面给大家介绍一下,有不对的地方还请多多指教。


  • 1、文件准备

我是在网上下的组件shamcey。下载好的shamcey文件,只需要calendar.html和它的一系列js文件和css文件(所包含的css文件:style.default.css。Js文件:jquery-1.9.1.min.js/jquery-migrate-1.1.1.min.js/jquery-ui-1.9.2.min.js/modernizr.min.js/bootstrap.min.js/fullcalendar.min.js/jquery.cookie.js/custom.js)我使用的是thinkPHP3.1的框架,把这些文件加入到thinkphp3.1的框架中
在calendar.html里面进行的操作,引用的文件
  <link rel="stylesheet" href="Css/style.default.css" type="text/css" />
    <script type="text/javascript" src="Js/jquery-1.9.1.min.js"></script>
    <script type="text/javascript" src="Js/jquery-migrate-1.1.1.min.js"></script>
    <script type="text/javascript" src="Js/jquery-ui-1.9.2.min.js"></script>
    <script type="text/javascript" src="Js/modernizr.min.js"></script>
    <script type="text/javascript" src="Js/bootstrap.min.js"></script>
    <script type="text/javascript" src="Js/fullcalendar.min.js"></script>
    <script type="text/javascript" src="Js/jquery.cookie.js"></script>
    <script type="text/javascript" src="Js/custom.js"></script>
    <script type="text/javascript" src="Js/moment.min.js"></script>




  • 2、调整页面

因为fullcalendar是外国人研发的,而老总需要的是中文的日期显示,所以一开始是改日期显示,改变日期显示是修改fullcalendar.min.js里面的
 monthNames: ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"],
        monthNamesShort: ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"],
        dayNames: ["日", "一", "二", "三", "四", "五", "六"],
        dayNamesShort: ["日", "一", "二", "三", "四", "五", "六
按照我们的习惯一月-十二月改成)01-12,星期从Mon-Sun改成一-日;


  • 3、添加我们想要的数据

使用Fullcalendar时主要要用的几个操作:select、eventClick、dayClick
Select:
首先是选中某一天的函数select:callback,被选中的函数回调
select: function(start, end, allDay) {
    var n1 = start.setSeconds(start.getSeconds()+1);
    var myDate1 = new Date(n1);
    var today = moment(start).format('YYYY-MM-DD');
    var nmounth = moment(start).format('YYYY-MM');//2016-04
    jQuery.ajax({
        type:"POST",
        url:"{Lanrain::U('Zhiban/checkIfHaveZb')}",
        data:"nowDate="+today+"&nmonth="+nmounth,
        success:function(data){
            alert(data);
        }
    });
    jQuery("#month").val(nmounth);
    calendar.fullCalendar('unselect');},
Start 必须,事件的开始时间。  End可选,结束时间。 allDay可选,true or false,是否是全天事件。
Start获取到选中日期的时间,这里获取到的时间是Unix时间戳,但是我们一般会转换成我们想要的时间2016-05-17这样的格式,用moment(start).format('YYYY-MM-DD')来转换,这里需要再引入一个moment.js文件,因为之前的fullcalendar不支持这样的转换了;
选中某个日期添加自己的数据,选中的时候弹出一个表单,录入自己要存储的信息。
在点击的时候就把时间赋值给这个文本框(不过还是最好存Unix时间戳,显示的时候是按照Unix时间戳来显示的)表单提交,然后在后台接收数据。
我的三个文本框的东西要生成三条数据,所以采用了数组提交的方式,循环获取添加。
表单数据:
<input type="text" name="watch[]" id="daDui"/>
<input type="text" name="watch[]" id="daDui1"/>
<input type="text" name="watch[]" id="daDui2"/>
Php接收数据并添加,存入数据库:框架的action里面建一个方法接收数据
public function newInfo(){
    $zherInfo = $_POST['watch'];
    if($zherInfo[0] == ''&& $zherInfo[1] == '' && $zherInfo[2] == ''){
        $this->error('请至少填写一个值班人',U('Qyapp/Zhiban/index'));
    }else {
        $zherInfo = $_POST['watch'];
        $zhiTime = $_POST['ZhiTime'];
        for ($i = 0; $i < count($zherInfo); $i++) {
            $UUID = new UUID();
            $addcond['id'] = $UUID->create_uuid("");
            $addcond['watch'] = $zherInfo[$i];
            $addcond['type'] = $_POST['sType'];
            $addcond['duty_time'] = $zhiTime[$i];
            $addcond['showTime'] = $_POST['showTime'];
            $info = M('wx_oa_schedule')->add($addcond);
        }
        if ($info) {
            $this->redirect("index", array('mid' => $_GET['mid']));
        } else {
            $this->redirect("index", array('mid' => $_GET['mid']));
        }

    }}



  • 4、在日历上显示我们添加的数据
events: [
				{
					title: 'All Day Event',
					start: new Date(y, m, 1)
				},
				{
					title: 'Meeting',
					start: new Date(y, m, d, 10, 30),
					allDay: false
				},
				{
					title: 'Lunch',
					start: new Date(y, m, d, 12, 0),
					end: new Date(y, m, d, 14, 0),
					allDay: false
				}
			]
这是在js里面固定的写数据在日历上显示,采用json格式的数据来显示的,有两个必须的参数就是title和start,title是在日历上面显示的文字内容,start是时间。
在数据库中提取数据在页面显示,就必须把数据转换成json格式,然后再events那里引入方法名。
在action里面建一个方法来查询显示页面上需要的数据。
public function JSONOO(){
    $Model = new Model();
    $data = $Model->query("SELECT * FROM tp_wx_oa_schedule;");
    foreach ($data as $da=>$val) {
        $duInfo[] = array(
            'id' => $val['id'],
            'title' => $val['watch'],//事件标题
            'start' => $val['duty_time'],//事件开始时间
        );
    }
    echo json_encode($duInfo);
}
这是在php的方法中查询数据转换成json格式。
在页面上我们就只需要在events那里引入这个方法名
calendar.html的js里面加入
events:"{Lanrain::U('Zhiban/JSONOO')}",
注意:这里的时间显示是Unix时间戳,存的时候要存一个Unix时间戳


  • 5、获取已经添加的事件  eventClick
当点击日历中的某一日程(事件)时,触发此操作,用法:
eventClick: function(calEvent, jsEvent, view) {
    var n1 = calEvent.start.setSeconds(calEvent.start.getSeconds()+1);
    var myDate1 = new Date(n1);
    var neee = moment(calEvent.start).format('YYYY-MM-DD');
    jQuery("#test").val(neww);
    jQuery.ajax({
        type:"POST",
        url:"{Lanrain::U('Zhiban/checkIfLessToday')}", 
        data:"nowDate="+neee,
        success:function(data){
            if(data) {
                jQuery("#insideShow").html(data);
            }
        }
    });
},
calEvent是日程(事件)对象,jsEvent是个javascript事件,view是当前视图对象。
我这里是点击的时候获取到calEvent.start事件开始的时间,根据时间从数据库查询存入的数据。

注:我这里都用的是jQuery的ajax传值获取值。


  • 6、点击某个日期时背景颜色变化

当单击日历中的某一天时,触发callback,用法:
dayClick: function(date, allDay, jsEvent, view) {
    var nmounth = moment(date).format('YYYY-MM');
    var today = moment(date).format('MM-DD');
    jQuery("#nmonth").val(nmounth);
    var str = date.toString();
    var neww = str.substr(0,10);
    jQuery.ajax({
        type:"POST",
        url:"{Lanrain::U('Zhiban/showInfo')}",
        data:"sToday="+neww+"&today="+today,
        success:function(data){
            jQuery("#hidInfo").show();
            jQuery("#hidInfo").html(data);
        }
    });
    calendar.fullCalendar('unselect');
    $(this).css('backgroundColor', 'pink');
},
date是点击的day的时间(如果在agenda view, 还包含时间),在月view下点击一天时,allDay是true,在agenda模式下,点击all-day的窄条时,allDay是true,点击其 他的agenda view下的day则为false,jsEvent就是一个普通的javascript事件,包含的是click事件的基础信息。
$(this).css('backgroundColor', 'pink');
这里是点击某一个日期时背景颜色变化。

我所运用的fullcalendar就这么多了,刚开始接触到他的时候我真的是抓狂的,到处问人查文档,慢慢的自己摸出了这些功能。他的功能可不止这么简单,大家有需要的就多多去探索吧。[/size]
分享到:
评论

相关推荐

    ThinkPHP5.0.5完整版_ThinkPHP_full_v5.0.5

    《深入理解ThinkPHP5.0.5:框架详解与实战应用》 ThinkPHP5.0.5是一款基于PHP7设计的轻量级、高性能的国产Web开发框架,它以其简洁的代码、高效的性能以及强大的功能在PHP开发领域备受青睐。本篇文章将详细解析...

    thinkphp_5.0.2_full

    《深入浅出ThinkPHP 5.0.2框架:实例...总结,"thinkphp_5.0.2_full"压缩包是学习和实践ThinkPHP 5.0.2框架的理想资源,通过深入研究其核心文件和目录结构,可以掌握框架的使用方法和设计理念,进一步提升PHP开发能力。

    ThinkPHP_full_v5.0.24_PHP开发框架_

    ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,... 使用ThinkPHP,你可以更方便和快捷的开发和部署应用。当然不仅仅是企业级应用,任何PHP应用开发都可以从ThinkPHP的简单 和快速的特性中受益。

    ThinkPHP3.1.3_Full完整版

    在使用过程中,可以根据标签“ThinkPHP Full”和“完整版”理解,这个压缩包包含了ThinkPHP框架的所有组成部分,可以直接用于开发或学习。不过,为了享受更多的功能和安全更新,建议开发者考虑升级到更高版本的...

    thinkphp_3.2.3_full

    《深入解析ThinkPHP 3.2.3框架》 ThinkPHP 3.2.3是基于PHP语言的一个轻量级的、快速的、强大的开发框架,它...在实际开发过程中,深入理解和熟练掌握ThinkPHP的这些关键点,将有助于提升开发者的专业技能和项目质量。

    ThinkPHP_3.0_Full

    在实际开发中,我们可以通过以下步骤进行ThinkPHP 3.0 的应用开发: 1. 创建项目结构,根据需求划分模块。 2. 编写配置文件,设置数据库连接、模板路径等。 3. 设计数据库模型,编写Model类,实现数据操作。 4. ...

    thinkphp中文分词

    在实际使用中,开发者可以通过实例化这个类并调用其方法,轻松地在ThinkPHP应用中集成中文分词功能。常见的分词算法有HMM( Hidden Markov Model)、BMES(Begin-Middle-End-Single)等,此文件中可能采用了其中的一...

    Thinkphp2.2 Full

    对于Thinkphp2.2初学者,"ThinkPHP_2.2_Full_0323"文件包含了完整的框架源码,便于深入理解其内部工作原理。"说明.htm"则可能提供了详细的框架介绍和使用指南,包括安装步骤、基本架构、常用功能等,是学习的良好...

    Thinkphp使用mongodb数据库实现多条件查询方法

    在Thinkphp中使用MongoDB进行多条件查询时,需要对框架提供的驱动进行一定的修改以适应MongoDB的查询方式。 在Thinkphp中实现多条件查询时,可以使用框架提供的查询构建器(Query Builder),但是当涉及到MongoDB的...

    thinkphp_3.2.3_full框架

    本文将详细解析ThinkPHP 3.2.3的核心特性、主要功能以及使用技巧。 一、核心特性 1. 快速开发:ThinkPHP 3.2.3采用MVC(Model-View-Controller)架构模式,使开发者可以专注于业务逻辑,提高开发速度。其内置的...

    thinkphp_3.2.3_full.rar

    在`thinkphp_3.2.3_full`中,我们可以看到典型的MVC(Model-View-Controller)架构。MVC模式将应用程序分为三个主要部分:模型(Model)负责处理数据和业务逻辑,视图(View)用于展示数据,控制器(Controller)则...

    Thinkphp 使用Dompdf

    Thinkphp 使用Dompdf

    thinkphp6使用workerman websocket连接

    本文将深入探讨在ThinkPHP6框架中如何使用Workerman库来实现WebSocket连接,以及相关的技术要点。 首先,`ThinkPHP6` 是一个基于 PHP7 开发的轻量级且强大的国产PHP框架,其核心设计理念是“简洁、实用、快速”。它...

    ThinkPhp2.0 框架使用中文手册

    在ThinkPHP2.0中,核心概念和关键组件包括: 1. **MVC模式**:模型(Model)负责处理数据和业务逻辑,视图(View)负责呈现用户界面,控制器(Controller)协调模型和视图,实现数据和界面的交互。这种分离提高了...

    ThinkPHP中文转拼音字母简单调用

    "ThinkPHP中文转拼音字母简单调用"这个主题,正是关于如何在ThinkPHP中轻松实现这一功能。 首先,我们要理解的是,中文转拼音主要是通过特定的算法和库来完成的,这些库能够将汉字映射到对应的汉语拼音。在这个案例...

    中小型企业使用thinkphp搭建

    【标题】"中小型企业使用ThinkPHP搭建"涉及的是在中小型企业的信息化建设中,采用ThinkPHP这一流行的PHP开发框架来构建企业系统的过程。ThinkPHP作为国内广泛使用的开源框架,以其高效、简洁、易学的特点,成为了...

    ThinkPHP3.1.3完整包

    ThinkPHP3.1.3版本相对于上一版本更加安全和易用,是一个建议升级的版本。 更新 该版本针对3.1.2进行了一些改进和完善,主要包括: 改进异常处理,支持致命错误捕获; 针对PDO驱动和Sqlsrv驱动的完善,支持参数...

    ThinkPHP多语言的使用和配置

    ### ThinkPHP多语言的使用和配置 #### 概述 ThinkPHP是一款广泛应用于Web开发的高性能PHP框架,它集成了很多实用的功能与特性,其中包括强大的多语言支持功能。多语言支持对于面向全球用户的应用尤其重要,它使得...

    ThinkPHP_2[1][1].2_Full

    在本地开发环境中,开发者可以使用Apache或Nginx作为Web服务器,配合PHP环境(如XAMPP或WAMP)运行ThinkPHP 2.1.2 CMS系统。部署时,将项目文件上传至服务器的Web根目录,配置好数据库连接,即可通过浏览器访问index...

Global site tag (gtag.js) - Google Analytics