Open Atrium 是一套開源的團(tuán)隊(duì)協(xié)作和知識(shí)管理系統(tǒng)。它能提供團(tuán)隊(duì)交流、文檔管理、日程安排、任務(wù)跟蹤等功能。支持成員分組,支持權(quán)限劃分,支持郵件提醒,支持版本控制。界面顏色和Logo可以自由更換。
作為 Drupal 針對內(nèi)部網(wǎng)應(yīng)用的一個(gè)發(fā)行版,Open Atrium 定義了一個(gè)極具擴(kuò)展性的開發(fā)框架,這為企業(yè)采用 Drupal 量身定制自己的內(nèi)部網(wǎng)提供了一個(gè)很好的范例,也為開發(fā)者打造成型的 Drupal 產(chǎn)品指明了方向。
下載地址:http://openatrium.com/download
在線演示地址:http://dev-open-atrium-demo.gotpantheon.com/,測試賬號:demo,密碼:test。
Open Atrium是Drupal的第一個(gè)發(fā)行版,它的推出開創(chuàng)了以Drupal為基礎(chǔ)構(gòu)建互聯(lián)網(wǎng)軟件產(chǎn)品的先河。后來出現(xiàn)的幾個(gè)發(fā)行版,如:Open Publish、Open Public、Acquia Commons、Commerce Kickstart等都或多或少的受到了Open Atrium開發(fā)思路的影響。隨著Open Atrium的傳播,F(xiàn)eatures模塊及以此為基礎(chǔ)的代碼驅(qū)動(dòng)的開發(fā)方式(Code Driven Develop)也在社區(qū)里逐漸流行起來,成為多人協(xié)作開發(fā)Drupal項(xiàng)目的常用方法。這篇文章是對Open Atrium的一個(gè)簡單介紹以及一些常見問題的總結(jié),供大家參考。
Open Atrium 的安裝和普通的 Drupal 安裝類似,首先需要?jiǎng)?chuàng)建數(shù)據(jù)庫,然后在 sites/default/ 目錄下,復(fù)制 default.settings.php 并重命名為 settings.php ,還要確保web服務(wù)器對 sites/default/ 目錄和 settings.php 文件擁有寫權(quán)限。然后在瀏覽器地址欄中輸入安裝地址,按提示進(jìn)行安裝就可以。
需要注意的是,如果是用虛擬目錄安裝的話,虛擬目錄后面要加斜線,如 http://localhost/alia/,否則可能無法正常訪問。另外,用虛擬目錄安裝的時(shí)候,需要修改根目錄下的 .htaccess 文件,以便使用簡潔url。修改方法:找到 # RewriteBase /drupal 這一句,將最前面的注釋號#去掉,然后將 drupal 改成你實(shí)際的虛擬目錄名,然后保存。
本地安裝,推薦使用Acquia Dev Desktop套件搭建運(yùn)行環(huán)境,該套件專門針對drupal做了優(yōu)化,能提供比較好的性能。下載地址: http://www.acquia.com/downloads,選擇Drupal6版本下載。
Open Atrium 是以群組為核心的,主要的功能都需要在群組中運(yùn)行。所以安裝完成之后,需要先創(chuàng)建群組,然后在群組中添加成員,開啟需要的功能模塊。完成這幾步之后就可以使用了。各功能細(xì)節(jié)可以邊使用邊熟悉。
確認(rèn)服務(wù)器支持郵件發(fā)送,linux主機(jī)一般都默認(rèn)安裝了sendmail,可以直接支持郵件發(fā)送。Windows主機(jī)可以自行配置郵件服務(wù)器,比較繁瑣,如果嫌麻煩的話,可以安裝drupal的smtp模塊,配置好之后就可以讓網(wǎng)站支持郵件發(fā)送了。
配置notifications,在admin/messaging/notifications,將 Immediate sending 和 User name, site data (Only the user name will be used) 這兩項(xiàng)選上。
這樣就配置好了,可以在發(fā)布內(nèi)容的時(shí)候選上要通知的人,就能進(jìn)行郵件通知了。
- E-MAIL ADDRESS : 填寫第1步準(zhǔn)備的郵箱 - MAILBOX DOMAIN :pop.gmail.com - MAILBOX PORT:995 - MAILBOX USERNAME:郵箱用戶名 - MAILBOX PASSWORD:郵箱密碼 - EXTRA COMMANDS:/ssl/novalidate-cert (linux主機(jī)下這么設(shè)置,Windows主機(jī)下沒研究過) - Delete messages after they are processed? 這項(xiàng)選中 - MESSAGE AUTHENTICATION METHOD:選擇MailComment Default
- MASTER MAILCOMMENT MAILBOX:選擇第4步中添加的郵箱 - MAIL COMMENT-ENABLED MAILBOXES:同上 - MAIL COMMENT CONTENT TYPES:選中Blog entry
這樣就配置好了,可以發(fā)一篇博客測試一下了。
Open Atrium 默認(rèn)是需要注冊登陸才能訪問的,可以通過更改站點(diǎn)設(shè)置將站點(diǎn)訪問方式改為公共訪問。方法如下:
這樣匿名用戶也可以訪問網(wǎng)站內(nèi)容了,不過只能訪問站點(diǎn)空間和公共群組中發(fā)布的內(nèi)容,私有群組的內(nèi)容仍然需要注冊、登陸、加入該群組中才能訪問。
以管理員身份登陸,在站點(diǎn)主界面(不要進(jìn)入任何一個(gè)群組)點(diǎn)擊右上方的“配置”,在下拉菜單中點(diǎn)擊“自定義特性” 在打開的界面中將“站點(diǎn)設(shè)置”下的”通知“改為“社區(qū):用戶自主選擇訂閱”
這樣 Notifications Team UI 模塊就會(huì)被禁用,同時(shí)啟用 Notifications UI 模塊。文章頁面上就會(huì)出現(xiàn)訂閱鏈接。
如果想使用和我的演示站一樣的中文語言包,可以點(diǎn)擊這里下載
# 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 在匿名訪問狀態(tài)下,左上角只顯示一個(gè)“登陸”鏈接,如何在旁邊再顯示一個(gè)“注冊”鏈接呢,可以通過自定義主題來實(shí)現(xiàn)。方法如下:
/** * 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中應(yīng)用 hook_context_load_alter() 來實(shí)現(xiàn)。 在.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中應(yīng)用hook_spaces_presets_alter()來實(shí)現(xiàn)。
以私有群組(private group)為例,我們在自定義模塊my_module中的my_module.module文件中應(yīng)用hook_spaces_presets_alter()來去掉私有群組默認(rèn)首頁(dashborad)上的Welcome區(qū)塊
示例代碼:
/** * 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']); }
若自定義模塊未啟用則需要啟用模塊,若模塊已啟用,如果不能看到效果,可以清一下緩存試試。
這個(gè)問題一般是因?yàn)橄嚓P(guān)內(nèi)容類型設(shè)置里的 Organic group 選項(xiàng)沒有更改配置造成的,
將 Organic groups usage: 設(shè)置為 Standard group post (typically only author may edit).
再發(fā)布新的內(nèi)容就可以顯示了。
在Open Atrium中,幾乎所有的內(nèi)容顯示都是用views來實(shí)現(xiàn)的,最新動(dòng)態(tài)區(qū)塊也不例外。要調(diào)整該區(qū)塊的顯示條數(shù)和內(nèi)容,需要在對應(yīng)的view里進(jìn)行修改。
首先需要在/admin/build/modules下開啟views_ui模塊,該模塊默認(rèn)是不開啟的。
然后到/admin/build/views下,找到activity_listing這個(gè)view,然后點(diǎn)擊Edit
在打開的頁面上,找到 Items per page: 15 ,點(diǎn)擊
在下方出現(xiàn)的編輯框中將默認(rèn)值15改成你想每頁想顯示的條數(shù),然后點(diǎn)擊Update
最后別忘了點(diǎn)擊Save保存view,否則修改不會(huì)生效。
修改顯示的內(nèi)容,可以通過調(diào)整Fields下的字段來實(shí)現(xiàn)。
$ drush vdel cron_semaphore $ drush cc all
Open Atrium里用戶資料是一個(gè)單獨(dú)的內(nèi)容類型,所以可以在內(nèi)容類型管理里面添加自定義字段,地址是:admin/content/node-type/profile/fields
比如要添加QQ字段,就可以在頁面下方的New Field欄進(jìn)行添加,Label里輸入"QQ",F(xiàn)ield name里輸入"qq",Type of data to store 選擇"Text",F(xiàn)orm element to edit the data 選擇"Text field",然后點(diǎn)擊保存,進(jìn)入字段屬性設(shè)置界面,這里的屬性一般保持默認(rèn)的就行,點(diǎn)擊底部的Save field settings 完成字段添加。
這樣添加好了之后,用戶的個(gè)人資料編輯表單上就會(huì)出現(xiàn)QQ一欄,但是現(xiàn)在填寫上之后該字段并不能在用戶面板上顯示出來,還需要改一下views。
啟用views_ui模塊,然后在views列表里找到profile_display這個(gè)view,進(jìn)入編輯頁面,點(diǎn)擊左側(cè)Add display上方的Profile fields,在中間一欄最下方的fields中,加上新添加的QQ字段,然后保存,這樣再到用戶面板上,就可以看到QQ字段已經(jīng)可以顯示了。
由于Open Atrium的一個(gè)bug,用戶資料上的Telephone等字段名稱在顯示的時(shí)候不能應(yīng)用自定義翻譯,這個(gè)就需要在內(nèi)容類型的字段管理里面把字段名改成中文就可以了。
這個(gè)問題是prul模塊對后臺(tái)路徑進(jìn)行了轉(zhuǎn)移造成的,可以通過為該模塊打補(bǔ)丁,然后配置一下路徑排除就可以。如果是用的我的中文修正版的話,補(bǔ)丁已經(jīng)打上了,這步就可以略過,直接進(jìn)行下面的配置就行。
補(bǔ)丁地址:https://raw.github.com/wannianchuan/open-atrium-patches/master/purl_diable_path.patch
下載之后,放到站點(diǎn)根目錄下,然后用 git apply purl_diable_path.patch 打上就可以。
打上之后需要再清一下系統(tǒng)緩存。這樣purl就會(huì)多了一個(gè)排除路徑的功能,可以通過這個(gè)地址訪問到: /admin/settings/purl/disabled
在輸入框里填上 admin/* ,然后點(diǎn)擊 Add pathset ,這樣下方就會(huì)多出一行配置,在那行配置后面選中 “群組空間” , 然后保存就可以了。
這樣再訪問手冊排序頁面就不會(huì)出錯(cuò)了。
社區(qū)的開發(fā)文檔 https://community.openatrium.com/documentation-en/node/440
nuvole團(tuán)隊(duì)寫了一些很棒的開發(fā)心得 也很值得學(xué)習(xí) http://nuvole.org/blog/open-atrium
api文檔 http://api.acquia.com/api/open_atrium
用atrim創(chuàng)建對外項(xiàng)目站點(diǎn)的案例: http://www.agileapproach.com/blog-entry/creating-public-facing-program-sites-open-atrium
在代碼里或者菜單管理界面將自定義的菜單指定到features菜單下,自定義菜單就可以顯示在主導(dǎo)航里了。
是因?yàn)镺pen Atrium應(yīng)用了og模塊,如果發(fā)布的node是屬于某個(gè)群組的話,在該node顯示的時(shí)候調(diào)用的是:profiles/openatrium/modules/contrib/og/theme/node-og-group-post.tpl.php 這個(gè)模板。
要想在自定義主題中覆蓋該模板,首先必須保證自定義主題中存在node.tpl.php,然后把node-og-group-post.tpl.php 這個(gè)模板復(fù)制到你的自定義主題目錄下,然后修改它,就可以了。
在自定義模塊中應(yīng)用 hook_views_data 定義[table][group]
不同之處在于:站點(diǎn)的區(qū)塊設(shè)置里設(shè)置的會(huì)對所有的頁面起作用,不只是主面板,而在Spaces Dashboard里設(shè)置的只對面板起作用。
這是因?yàn)椴┛晚撁嫔系摹白钚略u論”區(qū)塊是在context里單獨(dú)設(shè)置的,可以到context管理界面找到blog_listing這個(gè)context,看一下它的Reactions下的Blocks。
區(qū)別就是:盒子是個(gè)特別的區(qū)塊,可以提供就地編輯功能,不過得在創(chuàng)建的時(shí)候就填上內(nèi)容保存了,以后才能編輯,否則不顯示。
這是因?yàn)橛械膮^(qū)塊是只能出現(xiàn)在群組中而不能出現(xiàn)在站點(diǎn)的主面板上,而有的區(qū)塊是在沒有內(nèi)容的時(shí)候不顯示,當(dāng)拖拽這類欄目時(shí),都會(huì)出現(xiàn)這個(gè)提示。
可以用任務(wù)跟蹤頁面右側(cè)的搜索表單來進(jìn)行搜索,搜索的時(shí)候把“顯示已關(guān)閉的任務(wù)”這個(gè)選項(xiàng)選上就可以了。
可能是因?yàn)闆]有運(yùn)行cron的原因,因?yàn)槿蝿?wù)跟蹤的搜索表單用的是搜索模塊建立的索引來和輸入的關(guān)鍵詞進(jìn)行匹配的,而搜索索引是在運(yùn)行cron任務(wù)的時(shí)候建立的,如果cron沒有運(yùn)行過,搜索索引就沒有建立,這樣輸入的關(guān)鍵詞就沒法被匹配到,也就搜不到結(jié)果了。
解決方法是:可以在網(wǎng)站狀態(tài)管理頁面(admin/reports/status),手動(dòng)運(yùn)行一下cron; 也可以配置一下cron自動(dòng)運(yùn)行,這個(gè)在drupal官方文檔里詳細(xì)的介紹,可參見cron配置說明。
一般是因?yàn)闆]有配置整潔鏈接(clean url)的緣故,配置好了就不會(huì)出現(xiàn)這個(gè)錯(cuò)誤了。
Open Atrium可以和多種所見即所得編輯器集成,如CKeditor、TinyMCE等,下面以TinyMCE例,介紹一下集成方法。
1.下載并安裝wysiwyg模塊
2.在sites/all 目錄下新建 libriaries 目錄
3.從TinyMCE官方網(wǎng)站上下載TineMCE安裝包
4.將TinyMCE安裝包解壓到我們第2步創(chuàng)建的 libriaries 目錄下,并重命名為 tinymce
5.到wysiwyg配置界面(admin/settings/wysiwyg) 將Full HTML的Editor指定為Tiny MCE
6.還是在同一界面,點(diǎn)擊Operations下面的Edit,然后在Buttons and plugins配置項(xiàng)里選擇想要的按鈕
7.到輸入格式配置界面(admin/settings/filters)將Full HTML設(shè)置為默認(rèn)格式
8.到性能管理界面(admin/settings/performance)清空一下緩存
有一個(gè)值得注意的地方,就是如果站點(diǎn)安裝的模塊很多的話,編輯器可能在IE8下面不能正常顯示,這是因?yàn)轫撁婕虞d的css數(shù)量超過31個(gè)時(shí),超出的css不被IE識(shí)別造成的。解決這個(gè)問題,可以在性能管理界面(admin/settings/performance)啟用css優(yōu)化,這樣css文件就被整合到一個(gè)文件中,數(shù)量限制的問題也就解決了。
1.下載最新的中文語言包
2.解壓后將語言包中的所有zh-cn.js重命名為zh-hans.js,這是因?yàn)閐rupal能識(shí)別的中文標(biāo)識(shí)為zh-hans
3.將語言包中所有文件中出現(xiàn)的 zh-cn 替換為 zh-hans
4.復(fù)制語言包中的所有文件到TinyMCE庫所在目錄,drupal6下該目錄應(yīng)該為 sites/all/libraries/tinymce/jscripts/tine_mce
5.如果啟用了css或js優(yōu)化的話,需要清空一下緩存
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 可以用默認(rèn)的,也可以創(chuàng)建新的
4.到Wysiwyg配置界面(admin/settings/wysiwyg),編輯TinyMCE 配置,在按鈕選項(xiàng)那里把imce選上,然后保存
5.這樣再用TinyMCE編輯內(nèi)容的時(shí)候,點(diǎn)開圖片按鈕,會(huì)發(fā)現(xiàn)圖片url輸入框后面多了個(gè)瀏覽按鈕,點(diǎn)擊這個(gè)按鈕會(huì)出現(xiàn)一個(gè)圖片管理窗口,使用戶可以選擇已經(jīng)上傳的圖片也可以上傳新圖片,不管是選擇已存在的還是上傳完新的圖片,完成之后,點(diǎn)擊圖片管理窗口頂部的Insert file,就可以把圖片路徑自動(dòng)填充到TinyMCE圖片url輸入框中了,剩下的操作就和默認(rèn)的TinyMCE編輯器圖片操作一樣了。