与 Google 日历集成
(API v.2)

本文涵盖的是已废弃的 Google Calendar API v2。关于当前 Google Calendar API v3 的信息,请参考此处

入门指南

在开始同步之前,请确保已启用 php_curl.dll 扩展。

如果未启用,请在您的 Web 服务器所用的 php.ini 文件中,将以下行的分号去掉以激活该扩展:

;extension=php_curl.dll

确认扩展已启用后,即可继续进行设置。

要将 Scheduler 与 Google 日历同步,请按以下步骤操作:

  • 下载 'gCal_proxy_v2' 包。
  • 将该包解压至您的 Web 服务器根目录。

服务端操作:

  • 使用文本编辑器打开位于 [rootFolder] gCal_proxy server 下的 '01_proxy.php' 文件。该文件包含标准的代理初始化代码:
<?php
 
$email = "";
$pass = "";
$cal = "";
 
include('google_proxy.php');
$calendar = new GoogleCalendarProxy($email, $pass, $cal);
//$calendar->map("location", "details");
$calendar->connect();
 
?>
  • 为这三个变量赋值,其余代码无需更改。
    需要设置的变量有:
    • $email - 您的 Gmail 账号用户名;
    • $pass - 您的 Gmail 账号密码;
    • $cal - 您的 Google 日历名称。

请仔细核对变量值。例如,如果您的日历名称为 test@googlemail.com,但填写为 test@gmail.com,会导致出错。

  • 修改完成后保存文件。

客户端操作:

  • 打开初始化 scheduler 的 HTML 文件。如果还没有 scheduler,可在 Web 服务器根目录新建一个 HTML 文件。
  • 按常规方式初始化 scheduler(详情见 How to Start)。
  • 使用 load 方法将 Google 日历事件加载到 Scheduler。将其参数设置为刚刚更新的 '01_proxy.php' 文件路径。
scheduler.load("../gCal_proxy/server/01_proxy.php");
  • 初始化 dataProcessor 以实现双向同步。

  • 还需引入一个脚本文件。

<script src="../gCal_proxy/sample/codebase/dhtmlxdataprocessor.js"></script>
  • 将同一个 '01_proxy.php' 文件路径作为参数传递给构造函数。
var dp =  scheduler.createDataProcessor("../gCal_proxy/server/01_proxy.php");
dp.init(scheduler);//'scheduler' 是 scheduler 实例的名称。

同步设置完成。您可以在 [rootFolder] gCal_proxy sample 下的 'sample.html' 文件中找到可直接使用的示例。

导出

如需将事件从 Google 日历导出到数据库,请按以下说明操作:

  1. 用文本编辑器打开位于 [rootFolder] gCal_proxy server 下的 '03_export.php' 文件。
  2. 设置变量值,其余代码无需更改。
    需要设置的变量有:
    • $email - 您的 Gmail 账号用户名;
    • $pass - 您的 Gmail 账号密码;
    • $cal - 您的 Google 日历名称;
    • $db_host - 您的 MySQL 服务器主机名或 IP 地址;
    • $db_user - 您的 MySQL 用户名;
    • $db_pass - 您的 MySQL 密码;
    • $db_name - 您的 MySQL 数据库名;
    • $db_table - 数据库表名;
  3. 保存更改并关闭文件。
  4. 运行 '03_export.php' 脚本。
  5. 脚本执行后,Google 日历中的事件将被存储到指定的数据库表中。

'export()' 函数会返回从 Google 日历导出的记录数。

导入

如需将事件从数据库导入到 Google 日历,请按以下说明操作:

  1. 用文本编辑器打开位于 [rootFolder] gCal_proxy server 下的 '02_import.php' 文件。
  2. 设置变量值,其余代码无需更改。变量与导出时相同。
  3. 保存更改并关闭文件。
  4. 运行 '02_import.php' 脚本。
  5. 脚本执行后,数据库中的事件将被添加到 Google 日历。

'import()' 函数会返回导入到 Google 日历的记录数。

如何传递与事件相关的附加信息

Google 日历与 Scheduler 使用的字段集不同。为确保事件信息准确同步(无论导入还是导出),需要在两个日历之间进行字段映射。

默认情况下,Google 日历与 Scheduler 之间有如下字段映射:

Google Calendar -> Scheduler

  • id -> id
  • title -> text
  • startTime -> start_date
  • endTime -> end_date

您还可以包含更多 Google 日历字段:

字段 描述
canEdit 指示当前登录用户是否可以编辑该事件。可能的值:'0' 或 '1'
created 事件在 Google 日历中的创建日期
details 事件详情
updated 事件在 Google 日历中的最后更新时间
location 事件地点
status 事件当前状态:cancelled(已取消)、confirmed(已确认)、tentative(暂定)

如需包含附加信息,请按以下步骤操作:

服务端操作:

  • 根据所需操作,打开 [rootFolder] gCal_proxy server 下相应文件:同步用 '01_proxy.php',导入用 '02_import.php',导出用 '03_export.php'
  • 使用 map() 方法映射所需字段。例如,若要同步事件地点,可添加如下行:
$calendar->map("location", "place");
  • location - Google 日历字段名;
  • place - 对应的 Scheduler 字段名。可自定义。

  • 保存并关闭文件。

客户端操作:

  • 打开初始化 scheduler 的 HTML 文件。
  • 在 scheduler 的配置中添加如下内容:

在 lightbox 区域:

scheduler.config.lightbox.sections=[
    ...
    {name:"placeField", height:50, map_to:"place", type:"textarea"}
];

map_to 的值需与服务端设置的字段名一致(如上例中的 "place")。

  • 为新区域定义标签:
scheduler.locale.labels.section_placeField = 'Place';

将 "placeField" 替换为您自定义的区域名(下划线后部分)。

  • 保存并关闭文件。
返回顶部