一、引言
深入理解通达OA的目录结构是进行二次开发的基础。通达OA采用了清晰的模块化设计,将服务程序、应用程序、Web页面巧妙整合与组织,便于理解和扩充。本文将详细解析OA的目录层次结构,并深入探讨核心文件的作用和使用方法。
二、目录结构总览
通达OA的根目录为 MYOA,其下包含多个功能明确的子目录:
MYOA
├── attach # OA附件文件存放目录
├── bak # 数据库默认备份目录
├── bin # PHP、Zend等主程序及配置文件
├── data5 # MySQL数据库文件目录
├── logs # OA服务等的日志文件目录
├── MyAdmin # MySQL管理工具
├── mysql5 # MySQL主程序文件
├── nginx # Nginx Web应用服务
├── tmp # 临时文件目录
└── webroot # WEB根目录(PHP程序目录)
2.1 关键目录说明
1. attach目录
- 存放OA系统的附件文件
- 所有模块上传的附件默认存储于此
- 备份时必须包含此目录
2. bak目录
- 数据库默认备份目录
- 系统自动备份的SQL文件存放于此
- 可配置自动备份策略
3. bin目录
- 存放PHP、Zend等核心程序
- 包含服务配置文件
service.ini - 包含PHP配置文件
php.ini
4. data5目录
- MySQL数据库文件目录
- 包含多个数据库:
TD_OA:通达OA主数据库TD_OA_ARCHIVE:归档数据库BUS:公交线路查询数据库crscell:报表数据库
5. webroot目录
- WEB根目录,所有PHP程序存放于此
- 是二次开发的主要工作目录
三、webroot目录详解
webroot 是二次开发最常接触的目录,其结构如下:
webroot
├── attachment # 头像、模块配置文件目录
├── general # 主要模块目录
│ ├── ipanel # 主控面板
│ ├── mytable # 桌面模块程序
│ ├── system # 系统功能模块
│ └── ... # 其他业务模块
├── inc # 系统通用程序及函数目录
├── ispirit # OA精灵页面
├── mobile # OA移动界面
├── module # 系统组件
│ ├── dept_select # 部门选择组件
│ ├── editor # HTML编辑器组件
│ ├── OC # Office文档在线编辑
│ ├── user_select # 用户多选组件
│ └── ... # 其他组件
├── portal # 门户界面
├── static # 静态文件目录
│ ├── common # 通用CSS和图片
│ ├── images # 标签引用的图片
│ ├── js # JavaScript文件
│ └── theme # 界面主题
├── templates # 登录界面模版
└── webservice # WebService接口(不建议使用)
3.1 general目录
general 目录是存放所有应用模块的地方,每个模块拥有独立的子目录。开发新模块时,需要在此目录下创建新文件夹。
常见模块示例:
ipanel:主控面板,集成菜单、短信箱等mytable:桌面模块system:系统管理功能workflow:工作流模块meeting:会议管理模块
3.2 inc目录
inc 目录存放系统通用程序及函数,是OA的核心目录之一。所有二次开发都需要频繁引用此目录下的文件。
3.3 module目录
module 目录存放系统公用组件,如人员选择、部门选择、编辑器等。开发时可以直接调用这些组件,无需重复开发。
四、核心文件解析
通达OA的核心文件位于 webroot\inc 目录下,主要包括以下四个文件:
4.1 auth.inc.php
作用:权限验证程序
功能特点:
- Session合法性验证
- 访问路径授权验证
- 用户身份认证
使用方法:
include_once("inc/auth.inc.php");
使用场景:
- 所有需要权限控制的页面
- 包含敏感数据的页面
- 需要用户登录才能访问的页面
注意事项:
- 必须在页面开头包含
- 包含后会自动进行权限检查
- 如果未登录会自动跳转登录页
4.2 header.inc.php
作用:页面渲染头部
功能特点:
- 设置HTML标准和字符集
- 加载标准样式表(style.css)
- 设置页面标题
- 渲染页面头部导航
使用方法:
$HTML_PAGE_TITLE = _("页面标题");
include_once("inc/header.inc.php");
使用场景:
- 所有包含HTML输出的页面
- 需要使用OA标准界面的页面
注意事项:
- 使用前需设置
$HTML_PAGE_TITLE变量 - 支持国际化,使用
_()函数包裹标题
4.3 common.inc.php
作用:通用功能和安全过滤
功能特点:
- 用户输入数据过滤(
$_GET、$_POST、$_COOKIE) - 安全校验
- 通用工具函数
使用方法:
include_once("inc/common.inc.php");
使用场景:
- 处理用户输入的页面
- 需要数据安全校验的页面
注意事项:
- 如果已包含
auth.inc.php或header.inc.php,无需重复包含 - 自动对全局变量进行安全过滤
4.4 td.class.php
作用:数据库操作类
功能特点:
- 数据库连接管理
- SQL语句安全验证
- 提供常用数据库操作方法
使用方法:
include_once("inc/td.class.php");
使用场景:
- 所有需要数据库操作的页面
注意事项:
- 如果已包含
auth.inc.php,无需重复包含 - 自动处理数据库连接和关闭
- 提供SQL注入防护
五、核心文件引用关系
四个核心文件之间存在引用关系,了解这些关系可以避免重复包含:
auth.inc.php
├── common.inc.php (已包含)
└── td.class.php (已包含)
header.inc.php
└── common.inc.php (已包含)
td.class.php
└── db_config.php (数据库配置)
推荐引用策略:
| 页面类型 | 推荐包含 |
|---|---|
| 需要权限验证的页面 | auth.inc.php |
| 公开页面但需要标准界面 | header.inc.php |
| 仅需数据库操作 | td.class.php |
| 仅需安全过滤 | common.inc.php |
六、国际化支持
通达OA采用PHP的gettext扩展实现国际化(i18n)。所有中文字符串需要使用 _() 函数包裹:
$HTML_PAGE_TITLE = _("新闻");
echo _("欢迎使用通达OA");
国际化目录结构:
webroot\static\lang
├── zh_CN # 简体中文
│ └── LC_MESSAGES
│ └── oa.mo
├── en_US # 英文
│ └── LC_MESSAGES
│ └── oa.mo
└── ... # 其他语言
七、备份策略
根据官方文档,以下目录在备份时必须包含:
MYOA\attach:附件文件MYOA\data5:数据库文件MYOA\webroot\attachment:头像和配置文件
建议定期备份以上目录,确保数据安全。