Open Atrium 是一套开源的团队协作和知识管理系统。它能提供团队交流、文档管理、日程安排、任务跟踪等功能。支持成员分组,支持权限划分,支持邮件提醒,支持版本控制。界面颜色和Logo可以自由更换。
作为 Drupal 针对内部网应用的一个发行版,Open Atrium 定义了一个极具扩展性的开发框架,这为企业采用 Drupal 量身定制自己的内部网提供了一个很好的范例,也为开发者打造成型的 Drupal 产品指明了方向。
下载地址:http://openatrium.com/download
在线演示地址:http://dev-open-atrium-demo.gotpantheon.com/,测试账号:demo,密码:test。
Open Atrium是Drupal的第一个发行版,它的推出开创了以Drupal为基础构建互联网软件产品的先河。后来出现的几个发行版,如:Open Publish、Open Public、Acquia Commons、Commerce Kickstart等都或多或少的受到了Open Atrium开发思路的影响。随着Open Atrium的传播,Features模块及以此为基础的代码驱动的开发方式(Code Driven Develop)也在社区里逐渐流行起来,成为多人协作开发Drupal项目的常用方法。这篇文章是对Open Atrium的一个简单介绍以及一些常见问题的总结,供大家参考。
Open Atrium 的安装和普通的 Drupal 安装类似,首先需要创建数据库,然后在 sites/default/ 目录下,复制 default.settings.php 并重命名为 settings.php ,还要确保web服务器对 sites/default/ 目录和 settings.php 文件拥有写权限。然后在浏览器地址栏中输入安装地址,按提示进行安装就可以。
需要注意的是,如果是用虚拟目录安装的话,虚拟目录后面要加斜线,如 http://localhost/alia/,否则可能无法正常访问。另外,用虚拟目录安装的时候,需要修改根目录下的 .htaccess 文件,以便使用简洁url。修改方法:找到 # RewriteBase /drupal 这一句,将最前面的注释号#去掉,然后将 drupal 改成你实际的虚拟目录名,然后保存。
本地安装,推荐使用Acquia Dev Desktop套件搭建运行环境,该套件专门针对drupal做了优化,能提供比较好的性能。下载地址: http://www.acquia.com/downloads,选择Drupal6版本下载。
Open Atrium 是以群组为核心的,主要的功能都需要在群组中运行。所以安装完成之后,需要先创建群组,然后在群组中添加成员,开启需要的功能模块。完成这几步之后就可以使用了。各功能细节可以边使用边熟悉。
确认服务器支持邮件发送,linux主机一般都默认安装了sendmail,可以直接支持邮件发送。Windows主机可以自行配置邮件服务器,比较繁琐,如果嫌麻烦的话,可以安装drupal的smtp模块,配置好之后就可以让网站支持邮件发送了。
配置notifications,在admin/messaging/notifications,将 Immediate sending 和 User name, site data (Only the user name will be used) 这两项选上。
这样就配置好了,可以在发布内容的时候选上要通知的人,就能进行邮件通知了。
- E-MAIL ADDRESS : 填写第1步准备的邮箱 - MAILBOX DOMAIN :pop.gmail.com - MAILBOX PORT:995 - MAILBOX USERNAME:邮箱用户名 - MAILBOX PASSWORD:邮箱密码 - EXTRA COMMANDS:/ssl/novalidate-cert (linux主机下这么设置,Windows主机下没研究过) - Delete messages after they are processed? 这项选中 - MESSAGE AUTHENTICATION METHOD:选择MailComment Default
- MASTER MAILCOMMENT MAILBOX:选择第4步中添加的邮箱 - MAIL COMMENT-ENABLED MAILBOXES:同上 - MAIL COMMENT CONTENT TYPES:选中Blog entry
这样就配置好了,可以发一篇博客测试一下了。
Open Atrium 默认是需要注册登陆才能访问的,可以通过更改站点设置将站点访问方式改为公共访问。方法如下:
这样匿名用户也可以访问网站内容了,不过只能访问站点空间和公共群组中发布的内容,私有群组的内容仍然需要注册、登陆、加入该群组中才能访问。
以管理员身份登陆,在站点主界面(不要进入任何一个群组)点击右上方的“配置”,在下拉菜单中点击“自定义特性” 在打开的界面中将“站点设置”下的”通知“改为“社区:用户自主选择订阅”
这样 Notifications Team UI 模块就会被禁用,同时启用 Notifications UI 模块。文章页面上就会出现订阅链接。
如果想使用和我的演示站一样的中文语言包,可以点击这里下载
# Do not pass to drupal if the file or directory exists RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] # Handle query strings on the end RewriteRule /(.*)\?(.*)$ /index.php\?q=$1&$2 [I,L] # now pass through to the generic handler RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/(.*)$ /index.php?q=$1 [I,L]
Open Atrium 在匿名访问状态下,左上角只显示一个“登陆”链接,如何在旁边再显示一个“注册”链接呢,可以通过自定义主题来实现。方法如下:
/** * Preprocessor for theme_block(). */ function YourThemeName_preprocess_block(&$vars) { global $user; if (!$user->uid) { if ($vars['block']->delta == 'account') { $item = menu_get_item('user/login'); $item2 = menu_get_item('user/register'); if ($item && $item['access']) { $vars['content'] = l($item['title'], $item['href']); $vars['content'] .= ' / '; $vars['content'] .= l('注册', $item2['href']); } } } }
可以在自定义模块或feature中应用 hook_context_load_alter() 来实现。 在.module文件中添加以下代码:
/** * Implementation of hook_context_load_alter() for remove atrium-welcom_admin block. * * Alter a context directly after it has been loaded. Allows modules to alter * a context object's reactions. While you may alter conditions, this will * generally have no effect as conditions are cached for performance and * contexts are loaded after conditions are checked, not before. * * @param &$context * The context object by reference. */ function my_module_context_load_alter(&$context) { if ($context->name === 'spaces_dashboard-custom-1' && isset($context->reactions['block'])) { unset($context->reactions['block']['blocks']['atrium-welcome_admin']); } }
然后启用自定义模块或feature就可以了。
可以在自定义模块或feature中应用hook_spaces_presets_alter()来实现。
以私有群组(private group)为例,我们在自定义模块my_module中的my_module.module文件中应用hook_spaces_presets_alter()来去掉私有群组默认首页(dashborad)上的Welcome区块
示例代码:
/** * Implementation of hook_spaces_presets_alter() */ function my_module_spaces_presets_alter(&$items) { // Store a reference to our target block section. $blocks = &$items['atrium_groups_private']->value['context']['spaces_dashboard-custom-1:reaction:block']['blocks']; // Remove "Welcome" block. unset($blocks['atrium-welcome_member']); }
若自定义模块未启用则需要启用模块,若模块已启用,如果不能看到效果,可以清一下缓存试试。
这个问题一般是因为相关内容类型设置里的 Organic group 选项没有更改配置造成的,
将 Organic groups usage: 设置为 Standard group post (typically only author may edit).
再发布新的内容就可以显示了。
在Open Atrium中,几乎所有的内容显示都是用views来实现的,最新动态区块也不例外。要调整该区块的显示条数和内容,需要在对应的view里进行修改。
首先需要在/admin/build/modules下开启views_ui模块,该模块默认是不开启的。
然后到/admin/build/views下,找到activity_listing这个view,然后点击Edit
在打开的页面上,找到 Items per page: 15 ,点击
在下方出现的编辑框中将默认值15改成你想每页想显示的条数,然后点击Update
最后别忘了点击Save保存view,否则修改不会生效。
修改显示的内容,可以通过调整Fields下的字段来实现。
$ drush vdel cron_semaphore $ drush cc all
Open Atrium里用户资料是一个单独的内容类型,所以可以在内容类型管理里面添加自定义字段,地址是:admin/content/node-type/profile/fields
比如要添加QQ字段,就可以在页面下方的New Field栏进行添加,Label里输入"QQ",Field name里输入"qq",Type of data to store 选择"Text",Form element to edit the data 选择"Text field",然后点击保存,进入字段属性设置界面,这里的属性一般保持默认的就行,点击底部的Save field settings 完成字段添加。
这样添加好了之后,用户的个人资料编辑表单上就会出现QQ一栏,但是现在填写上之后该字段并不能在用户面板上显示出来,还需要改一下views。
启用views_ui模块,然后在views列表里找到profile_display这个view,进入编辑页面,点击左侧Add display上方的Profile fields,在中间一栏最下方的fields中,加上新添加的QQ字段,然后保存,这样再到用户面板上,就可以看到QQ字段已经可以显示了。
由于Open Atrium的一个bug,用户资料上的Telephone等字段名称在显示的时候不能应用自定义翻译,这个就需要在内容类型的字段管理里面把字段名改成中文就可以了。
这个问题是prul模块对后台路径进行了转移造成的,可以通过为该模块打补丁,然后配置一下路径排除就可以。如果是用的我的中文修正版的话,补丁已经打上了,这步就可以略过,直接进行下面的配置就行。
补丁地址:https://raw.github.com/wannianchuan/open-atrium-patches/master/purl_diable_path.patch
下载之后,放到站点根目录下,然后用 git apply purl_diable_path.patch 打上就可以。
打上之后需要再清一下系统缓存。这样purl就会多了一个排除路径的功能,可以通过这个地址访问到: /admin/settings/purl/disabled
在输入框里填上 admin/* ,然后点击 Add pathset ,这样下方就会多出一行配置,在那行配置后面选中 “群组空间” , 然后保存就可以了。
这样再访问手册排序页面就不会出错了。
社区的开发文档 https://community.openatrium.com/documentation-en/node/440
nuvole团队写了一些很棒的开发心得 也很值得学习 http://nuvole.org/blog/open-atrium
api文档 http://api.acquia.com/api/open_atrium
用atrim创建对外项目站点的案例: http://www.agileapproach.com/blog-entry/creating-public-facing-program-sites-open-atrium
在代码里或者菜单管理界面将自定义的菜单指定到features菜单下,自定义菜单就可以显示在主导航里了。
是因为Open Atrium应用了og模块,如果发布的node是属于某个群组的话,在该node显示的时候调用的是:profiles/openatrium/modules/contrib/og/theme/node-og-group-post.tpl.php 这个模板。
要想在自定义主题中覆盖该模板,首先必须保证自定义主题中存在node.tpl.php,然后把node-og-group-post.tpl.php 这个模板复制到你的自定义主题目录下,然后修改它,就可以了。
在自定义模块中应用 hook_views_data 定义[table][group]
不同之处在于:站点的区块设置里设置的会对所有的页面起作用,不只是主面板,而在Spaces Dashboard里设置的只对面板起作用。
这是因为博客页面上的“最新评论”区块是在context里单独设置的,可以到context管理界面找到blog_listing这个context,看一下它的Reactions下的Blocks。
区别就是:盒子是个特别的区块,可以提供就地编辑功能,不过得在创建的时候就填上内容保存了,以后才能编辑,否则不显示。
这是因为有的区块是只能出现在群组中而不能出现在站点的主面板上,而有的区块是在没有内容的时候不显示,当拖拽这类栏目时,都会出现这个提示。
可以用任务跟踪页面右侧的搜索表单来进行搜索,搜索的时候把“显示已关闭的任务”这个选项选上就可以了。
可能是因为没有运行cron的原因,因为任务跟踪的搜索表单用的是搜索模块建立的索引来和输入的关键词进行匹配的,而搜索索引是在运行cron任务的时候建立的,如果cron没有运行过,搜索索引就没有建立,这样输入的关键词就没法被匹配到,也就搜不到结果了。
解决方法是:可以在网站状态管理页面(admin/reports/status),手动运行一下cron; 也可以配置一下cron自动运行,这个在drupal官方文档里详细的介绍,可参见cron配置说明。
一般是因为没有配置整洁链接(clean url)的缘故,配置好了就不会出现这个错误了。
Open Atrium可以和多种所见即所得编辑器集成,如CKeditor、TinyMCE等,下面以TinyMCE例,介绍一下集成方法。
1.下载并安装wysiwyg模块
2.在sites/all 目录下新建 libriaries 目录
3.从TinyMCE官方网站上下载TineMCE安装包
4.将TinyMCE安装包解压到我们第2步创建的 libriaries 目录下,并重命名为 tinymce
5.到wysiwyg配置界面(admin/settings/wysiwyg) 将Full HTML的Editor指定为Tiny MCE
6.还是在同一界面,点击Operations下面的Edit,然后在Buttons and plugins配置项里选择想要的按钮
7.到输入格式配置界面(admin/settings/filters)将Full HTML设置为默认格式
8.到性能管理界面(admin/settings/performance)清空一下缓存
有一个值得注意的地方,就是如果站点安装的模块很多的话,编辑器可能在IE8下面不能正常显示,这是因为页面加载的css数量超过31个时,超出的css不被IE识别造成的。解决这个问题,可以在性能管理界面(admin/settings/performance)启用css优化,这样css文件就被整合到一个文件中,数量限制的问题也就解决了。
1.下载最新的中文语言包
2.解压后将语言包中的所有zh-cn.js重命名为zh-hans.js,这是因为drupal能识别的中文标识为zh-hans
3.将语言包中所有文件中出现的 zh-cn 替换为 zh-hans
4.复制语言包中的所有文件到TinyMCE库所在目录,drupal6下该目录应该为 sites/all/libraries/tinymce/jscripts/tine_mce
5.如果启用了css或js优化的话,需要清空一下缓存
1.下载并安装IMCE模块,下载地址:http://drupal.org/project/imce
2.下载并安装IMCE Wysiwyg brige模块,下载地址:http://drupal.org/project/imce_wysiwyg
3.到IMCE配置界面(admin/settings/imce) ,将特定的IMCE profile 赋给需要使用图片管理的用户角色,IMCE profile 可以用默认的,也可以创建新的
4.到Wysiwyg配置界面(admin/settings/wysiwyg),编辑TinyMCE 配置,在按钮选项那里把imce选上,然后保存
5.这样再用TinyMCE编辑内容的时候,点开图片按钮,会发现图片url输入框后面多了个浏览按钮,点击这个按钮会出现一个图片管理窗口,使用户可以选择已经上传的图片也可以上传新图片,不管是选择已存在的还是上传完新的图片,完成之后,点击图片管理窗口顶部的Insert file,就可以把图片路径自动填充到TinyMCE图片url输入框中了,剩下的操作就和默认的TinyMCE编辑器图片操作一样了。
联系客服