顯示具有 joomla 標籤的文章。 顯示所有文章
顯示具有 joomla 標籤的文章。 顯示所有文章

2011年1月30日

Joomla 1.6 安裝注意事項 (手動編譯 Apache HTTP Server & PHP on RHEL 5)

在 2011-01-10 的時候 Joomla 推出了最新的 1.6 版,因此我也灌起來玩了一下,過程中發現由於 RHEL 5.3 (Tikanga) 內建的 PHP (5.1.6) 太老舊了,Joomla 1.6 的需求是 5.2.4 以上,因此必須要升級 PHP,也利用這個機會一併把內建的老舊 Apache HTTP Server (2.2.3) 升級 (最新版:2.2.17),以下就是升級過程中的注意事項。

安裝的過程基本上很簡單,主要參考 PHP 官網上的 online documentation -> 在 View Online 的地方選 English -> Installation on Unix systems -> Apache 2.x on Unix systems 上的步驟照做即可,重點在於步驟 5「Now, configure and build PHP」,在這個 configure 範例中只有使用最基本的「--with-mysql」來加入 MySQL 的支援,但這樣對 Joomla 的安裝來說是不夠的。

在 Joomla 的安裝過程中,會確認 PHP 有 Zlib compression 支援,否則 Joomla 會無法順利安裝。按照官網上的 configure 方式是不包含 Zlib compression 支援的,必須要在 configure 的 option 裡面加上「--with-zlib」才行,也就是:「./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql --with-zlib

那麼萬一像我一樣在 configure & make install PHP 之後,開始安裝 Joomla 時才在 check system requirement 的時候發現 PHP 缺少 Zlib compression 支援的話要怎麼辦呢?沒關係,這時候就要靠上一次執行 configure 時自動產生的 config.nice 檔了,config.nice 檔案會記錄上一次執行 configure 所使用的 options,只要編輯這個檔案,以相同的格式加入「--with-zlib」這個 option,然後執行「./config.nice」,最後再重新 make、make install 來重新安裝 PHP 就可以囉(安裝到相同的目錄,把剛剛安裝的版本蓋掉即可)!

加入「--with-zlib」的 config.nice 內容如下:


以第二次根據 config.nice 產生的 Make file 來執行 make 的時候,只會重新編譯新增的部份,因此速度很快。有了 config.nice 千萬要好好利用,不要傻傻的重新執行 configure,這樣會浪費很多時間阿!

基本上要注意的地方就只有這裡,其他的步驟都按照官網上的範例來做就可以了。Joomla 的安裝也很簡單,基本上就是先檢查執行環境是否符合最低需求,而後把 Joomla 網站複製到指定的目錄,最後產生 configuration.php 的內容就可以運作了。

可惜的是目前 Fabrik 套件的最新版 - 2.0.3 還不支援 Joomla 1.6,一整個就是裝不上去阿,只好過一陣子再測試囉!

另外順便補充IT黑傑克前陣子寫的 Joomla & Drupal 比較文:

2010年5月19日

利用 Joomla 做資產管理 (Asset Management) -4 : Fabrik 套件使用小技巧 & Joomla 客製化

在前面的文章中已經介紹完 Joomla & Fabrik 套件的安裝以及使用方式,接下來整理的是我使用 Fabrik 套件過程中發現的小技巧,以及如何客製化 Joomla。
[無痛解法] Fabrik drop down 欄位的搜尋問題
開始使用 Fabrik 套件的時候發現一個問題,若把 Form 中的 Element 設定為 drop down,在輸入資料時固然方便,但是要過濾資料時會遇到一個問題:沒有「All」這個過濾條件!以下圖為例,當我想要利用「IP」來找某台主機的資料,此時「服務類別使用狀態」條件的第一個值會生效,也就是說兩個條件都必須符合 (邏輯 AND) 才能正確找到所要的資料。這是很不方便的,因為我也沒辦法記住每台主機的「服務類別使用狀態」是什麼,若「服務類別使用狀態」的值沒有設定對,就算 IP 打對還是找不到資料。若把 Element 設定為 field,過濾條件中的預設值就是「All」,也就是沒有作用,就不會遇到這個問題了!
1
經過測試,發現一個最簡單的解法,也就是在新增資料時將 Element type 設定為「drop down」,以減少資料輸入錯誤的可能;等到資料輸入完畢後,再把 Element type 改回「field」,如此在過濾條件中該欄位的下拉式選單就會出現「All」的選項。這樣做的話,就不用擔心將 drop down 改為 field 之後,drop down 的選項會消失,所有的設定資料(drop down 的 text & value) 都會保留在 DB 裡面,未來要再輸入資料時,只要將 Element type 改回 drop down 即可繼續使用。
2
如何批次匯入資料至 Fabrik Table
經過實驗以後,整理出以下幾種批次匯入資料的方法的優劣比較:
利用 Joomla / Fabrik 來匯入 在 phpMyAdmin 介面匯入
操作介面 Joomla 網站 phpMyAdmin 網站
支援檔案格式 CSV (需要保留欄位名稱列) CSV (不可保留欄位名稱列)
支援編碼 UTF-8 UTF-8
中文亂碼問題 難處理 (匯入後要手動調整,
e.g., 101—>分機101)
沒問題
其他 fabrik_internal_id 和 time_date 欄位可空白 fabrik_internal_id 可空白time_date 欄位要有資料(改為 TIMESTAMP 也不會自動填入匯入時的時間)

需將半型逗號「,」取代為全型逗號「,」,以避免匯入資料時欄位分割錯誤
最後還是決定用 phpMyAdmin 的介面來執行批次匯入/匯出。
(匯出資料的注意事項可參考:phpMyAdmin 匯出中文資料成 utf-8 編碼的 .csv 格式之注意事項)
從 phpMyAdmin 管理後台批次匯入資料:
步驟一:先準備好要匯入的原始資料:
3
步驟二:調整原始資料,要注意:
  • 不可保留頂端列的欄位名稱
  • 欄位順序要與 MySQL 中的 Table 欄位順序一致
  • 不用新增 fabrik_internal_id 欄位,但要自己給 time_date 欄位的資料
4
Excel 預設編碼方式為 ANSI,檔案只要用 Excel 編輯過,編碼就會被改成 ANSI,要再以記事本開啟另存為 UTF-8 編碼
(以 Notepad++ 編輯則不會更改原本的檔案編碼)
5
phpMyAdmin 介面的設定參考下圖:
image
利用 CSV 批次匯入資料:
步驟一:一樣先準備好要匯入的原始資料:
3
步驟二:調整原始資料,要注意:
  • 新增 fabrik_internal_id 和 time_date 這兩個欄位 (內容可空白)
  • 要把原始資料的中文欄位翻譯成英文,欄位順序要與 MySQL 中 的 Table 欄位一致
6
Excel 預設編碼方式為 ANSI,檔案只要用 Excel 編輯過,編碼就會被改成 ANSI,要再以記事本開啟另存為 UTF-8 編碼
(以 Notepad++ 編輯則不會更改原本的檔案編碼)
5
步驟三:從 Fabrik Table 的介面中,點選「Import from CSV」功能
image
設定參考下圖:
image
Fabrik 擴充套件的程式架構
由於 Joomla 採用 Model-View-Controller (MVC) 架構,Fabrik 套件也是以 MVC 架構來開發,因此程式架構很好理解,也很容易猜測如何修改。接下來記錄我小小調整 Fabrik 套件的 PHP 程式碼的作法,包括:
  • 修改 Fabrik 套件存檔時的 time_date 欄位,以儲存資料異動當下的完整時間 (原本僅記錄日期:yyyy-mm-dd 00:00:00)
  • 在資料存入 DB 之後,把異動的 log 也寫入 DB
MVC 架構:
8
修改 Fabrik 套件存檔時的 time_date 欄位,以儲存資料異動當下的完整時間
7  10
  • 修改檔案:
    [path/to/Joomla Dir]/components/com_fabrik/models/table.php
  • 新增 function getDateTime(),利用 php 內建的 getdate 函式取得目前時間,再調整為「yyyy-mm-dd hh:mm:ss」的格式。
  • 修改 function storeRow() <負責 Insert & Update>,在適當位置加入:$oRecord->time_date=$this->getDateTime();。
image
getDateTime() 函式的內容:
12
留下資料異動記錄 (Insert、Delete、Update)
  • MySQL 內建的 bin-log 無法區別不同的 Joomla 使用者,一律會記錄為 Joomla 用來登入 MySQL 的 user (通常為 root)
  • 利用 jos_fabrik_log 這個 fabrik 內建的 table 來儲存資料異動的 log:
欄位名稱 內容
id auto_increment 的流水號,作為 PK
timedate_created 每一筆資料的異動時間,採預設值即可(CURRENT_TIMESTAMP)
referring_url 用來儲存進行此操作的 username
(e.g., user1, user2)
message_type 用來儲存該 user 進行的操作
(i.e., INSERT, DELETE, UPDATE)
Message 該 user 執行的 SQL Statement
(重要:必須將「`」和「」取代為空白)
  • 修改檔案:
    [path/to/Joomla Dir]/components/com_fabrik/models/table.php
  • 新增 function getUserName(),以取得目前登入的使用者名稱,參考 [path/to/Joomla Dir]/components/com_fabrik/models/formsession.php 中的 getUserId() function
  • 新增 function logDBOperation($SQL),取得 log 所需的資料,並存入 jos_fabrik_log。
  • 修改 storeRow <負責 Insert & Update>及 deleteRows <負責 Delete> 兩個 function,在適當位置加入:
    $this->logDBOperation 的呼叫。
成果(登入 phpMyAdmin 查看):
11
經過測試,批次匯入資料時也會留下每一筆資料的異動記錄。
getUserName() 函式的內容:
13
logDBOperation($SQL) 函式的內容:
14
設定 MySQL 排程定期備份
參考資料:MySQL備份 shell script
  • 修改以下程式,另存為 [path/to/Joomla Dir]/backup/backup.sh:
    • 設定 db_user、db_passwd 以及 db_host 變數
    • backup_dir=“[path/to/Joomla Dir]/backup“
    • # get all databases 以下的內容,改為僅備份 Joomla DB:
      $MYSQLDUMP -u $db_user -h $db_host -p$db_passwd [JoomlaDB] | $GZIP -9 > "$backup_dir/backup.0/$time.Joomla2.gz“
  • 設定 cron job 每月1日進行備份:
    • crontab -u root -e:
      0 0 1 * * sh [path/to/Joomla Dir]/backup/backup.sh
將 Joomla 從測試環境轉移到正式環境
在正式環境上最好是用 clean installation 比較保險,並且把網站名稱和 DB 名稱都設定成與測試環境相同,再用 phpMyAdmin 把資料匯出成 insert SQL,以免忘記修改到 DB 中的設定造成網站運作的異常。
其他待解問題
  • 先排序好A欄位,再排序B欄位,不要把A欄位的順序重排
  • 暫時提昇某個user的權限為可讀寫 (調整「存取」為「作者」無效)
  • Range filter 會清掉其他 filter 的設定值 (要設定兩次,多出一個Go button)
以上就是最近使用 Joomla 的一些心得分享,整理完畢之後,未來要查筆記就方便多啦 :D

本系列其他文章:

2010年4月9日

利用 Joomla 做資產管理 (Asset Management) -3 : 安裝 Fabrik 擴充套件及其使用方法

在上一篇:利用 Joomla 做資產管理 (Asset Management) -1 : 安裝過程紀要中曾經提到,這次要架站是為了記錄機器設備的基本資料,把以往用 excel 記錄的資料 web 化、集中化,只維護一個版本,可從任何有連網的裝置上存取,同時必須滿足以下六個需求:
  1. 免費!免費!免費!-> 找 Freeware / Open Source Software
  2. 簡單易用的web介面,支援 CRUD operation (增刪改查)
  3. 批次匯入現有資料
  4. 以選單的方式輸入資料
  5. 條件式的查詢、篩選資料
  6. 保留資料異動的 log
其中在權限控管上,要做到以下要求:
  • 利用 Joomla! 內建的角色:管理者/一般使用者 來實作權限控管
  • 管理者:可讀寫所有欄位
  • 一般使用者(有登入):
    • 大部分欄位可讀,不可修改
    • 有某些欄位不可讀(看不見),當然不可修改
    • 在修改的 view 中 (link to detail) 都是唯讀
  • 一般使用者(沒登入):什麼都看不到
安裝好 Joomla 之後,接下來就是要找到合用的套件來完成以上的需求啦!以下補充瀏覽 Joomla 擴充套件的注意事項,以及 Fabrik 套件的下載點。
Joomla 豐富的擴充套件 (extension) 可以在 Joomla Extensions 找到 (全都是英文的),共有 4276 個 extension,分為數十個大類別,其中在 Contacts & Feedback 中有一個 Forms 的類別,在瀏覽的時候要注意,Type 為 Commercial 的是商業軟體,要錢低;Type 為 Non-Commercial 的才是我們要找的免費擴充套件!
Joomla_extensions_types_thumb[1]
點進去這次要使用的套件:Fabrik – as joomla app builder 以後,畫面如下:
Joomla_Fabrik_IntroPage_thumb[1]
Fabrik 這個套件的官網比較複雜些,包括很多 templates、nodules 和 plug-ins,套件主程式反而放在下載頁面的最下面:
Joomla_Fabrik_DownloadPage_thumb[1]
下載好 Fabrik 擴充套件主程式後,安裝方式請參考:利用 Joomla 做資產管理 (Asset Management) -2 : 安裝過程紀要 (Linux)
接下來要介紹 Fabrik 擴充套件的設定。首先登入管理員後台,進入 Fabrik 套件的管理介面:

包括 Forms、Tables、Groups、Elements 都是需要設定的:

步驟一:新增一個 Fabrik Form
在 Forms 管理介面中,按最右邊的「新增」以新增一個 Form:
Fabrik_NewForm
Form 即為使用者在網頁中輸入資料的表單,表單中的每一項資料稱為一個 Element。設定好 Table name 後,Fabrik 會在 Joomla DB 中建立一個同名的 table,同時也會在 Groups 中新增一個同名的 Group,屬於此 Group 的 Elements (欄位)就會出現在接受使用者輸入資料的表單。
image
步驟二:新增一個 Fabrik Table
在 Table 管理介面中,按最右邊的「新增」以新增一個 Table:
Fabrik_NewTable
此時在「Data」的設定中的「Link to table」,要選擇剛剛在新增 Form 時所設定的 Table name:
Fabrik_NewTable_SelectTable
Table 用來呈現儲存於DB中的資料,並提供Advanced search功能,在過濾資料時非常方便。以下是此 Table 的存取權限設定,這裡使用的都是 Joomla 內建的角色 (role),「註冊會員」是指正確登入 Joomla 網站的人,而「管理者」則是擁有 Joomla 網站管理者權限的人。
以下圖的設定為例,必須要先登入網站才能看到 DB 中的資料,而只有管理者有權限可以新增/修改資料。
image
在過濾設定部分,建議採用以下設定:
Fabrik_NewTable_FilterSettings
進階搜尋的畫面如下,操作上很直覺:
image
Search all 的功能則是可以搜尋此 Table 內所有欄位的所有內容 (就是 LIKE 的效果啦):
Fabrik_NewTable_SearchAll
Table 還可進一步設定匯入/匯出資料的權限:
image
步驟三:開始新增 Form 中用來蒐集使用者輸入資料的欄位 - Element
以下的設定都與權限控管有關,要特別注意。以下先以 Element type = text area 為例:
image
以一般使用者身分登入是看不到 VIP 欄位的:
Fabrik_Table_UserNoVIP
一般使用者也無法修改 DB 中的資料:
 Fabrik_Table_User_CANNOT_Update
若以管理者身分登入,則可看到 VIP 欄位:
Fabrik_Table_AdminHasVIP
管理者也可以編輯 VIP 欄位:
Fabrik_Table_Admin_CAN_Update
步驟四:設定每個 Element 的 Table settings
基本上這些設定值都很好了解,若不確定作用為何,可以隨時從管理介面變更設定值,嘗試一下就知道每個設定的意義了,如下圖:
image
步驟五:若需要驗證欄位內容,則進行 Validations 設定(以驗證空白為例)
image
若使用者沒有輸入資料,會看到以下錯誤訊息,非常明確:
Fabrik_ValidationError
Fabrik 內建了很多的 validation rules,一看就知道怎麼用:
Fabrik_Element_Validation
步驟六:根據需要新增各種不同類型的輸入欄位
Field:也就是文字方塊 (textbox)
drop down:下拉式選單
image
text area:文字區域 (適合輸入大量文字)
Fabrik_text area
最後製作出來的 Form 大概就長得像下面這樣:
Fabrik_FormDemo
而呈現使用者在以上的 Form 中輸入的資料的 Table,大概長得像下面這樣:
Fabrik_TableDemo
以上就是 Fabrik 擴充套件的用法介紹,基本上都很簡單,所有的設定都存在 DB,想要深入了解網站運作方式的話可以打開 phpMyAdmin 來查看 DB 中的資料,網站原始碼 (php) 也可以好好研讀 (這就是 open source 的好處呀!)。

下一篇再來談談我對 Joomla & Fabrik 套件做的一些客製化,以及目前遇到的問題和解法。

本系列其他文章:

2010年3月5日

利用 Joomla 做資產管理 (Asset Management) -2 : 安裝過程紀要 (Linux)

上一篇文章中,我紀錄的是在 Windows 平台上的安裝過程,今天開始在我的 Red Hat Linux 測試機上安裝 Joomla,因此再來補完一下。基本上也是透過 Joomla 內建的 installer.php 進行安裝,以下記錄在 Linux (RHEL5) 上要特別注意的地方。(安裝 AMP 還在卡關中,等之後搞清楚再來補補完 … 用 RHEL 安裝預設的 AMP 套件就可以繼續往下安裝 Joomla 了。)
補充0:Joomla 的發音
前陣子看到一篇好文:網路流行新名詞 Linux, Google, Skype, …的正確念法,因此對於 Joomla 這個拼字看起來很特殊的字也找了一下正確的發音,以下是兩個比較有代表性的參考資料 (都是相同的發音):
希望大家都可以唸出正確 (比較順耳) 的發音阿 XD
補充1:在安裝 Joomla! 1.5.x 的時候,無法安裝預設範例資料的解法如同此文中所說,我在 RHEL 中如果把 configuration.php 檔案設定為可以寫入,就會遇到「ERROR: The XML response that was returned from the server cannot be processed」的錯誤訊息,按照此文中的解法即可正確安裝預設資料。
補充2:調整 Joomla 網站首頁顯示的內容
Joomla! 安裝完成後,若不安裝預設資料,也不安裝中文化支援,則網站首頁會長的像下面這樣,非常簡潔:
joomla_English_default_blog
若有安裝預設資料以及中文化支援,網站首頁就會看到很多資料:
joomla_Chinese_default
如果要讓網站首頁變得簡潔一點,有以下幾個設定可以調整。首先是模組管理:
joomla_module_management
再來是首頁管理:
joomla_homepage_menegement
補充3:手動安裝中文化支援
參考: Joomla! 123 圖解架站教學網-安裝 joomla 繁體中文化,language 檔的安裝目錄分成以下兩個層級:
  • Site (網站): [Joomla installation folder]/language
  • Administrator (管理區): [Joomla dir]/administrator/language
將從 Joomla! 123 圖解架站教學網下載的 joomla 完整安裝的主程式解壓縮以後,在相對應的 language 資料夾中,把各語系的 .ini 檔複製到 Joomla! 安裝目錄內相對應的 language 資料夾中,再到管理員後台設定預設語言即可。
.ini 檔的內容類似下圖:
joomla_i18n
補充4:查看 Joomla 的系統資訊
進入管理員後台-> 說明->系統資訊,包括 Linux、Apache、MySQL、PHP 以及 Joomla 的版本:
joomla_system_info
補充5:查看 Joomla 內建的說明文件
進入管理員後台-> 說明->Joomla!說明
joomla_builtin_help
接下來說明 Joomla 擴充套件 (extensions) 的安裝,以 Fabrik 套件為例:
步驟一:賦予 apache 對各目錄的寫入權限 (command: chmod o+w [dir])
  • [Joomla dir]/administrator/components
  • [Joomla dir]/administrator/language/en-GB
  • [Joomla dir]/components
  • [Joomla dir]/language/en-GB
  • [Joomla dir]/media
註:
  1. 由於安裝套件也是透過 joomla 的 web 介面,因此對於 OS 來講是以 apache 這個帳號存取 file system。
  2. 不用更改父目錄的存取權限! (例:不需要變更 [Joomla dir]/administrator 目錄的權限,僅需變更 administrator 下的 components 目錄權限即可)
  3. 在 WinXP SP3 上面安裝 Fabrik 的話,基本上不用擔心權限設定問題。
步驟二:進入管理員後台 –> (上方工具列) 擴充套件 –> 安裝/移除
install_component_menu
下一個畫面長這樣:
Joomla_component_installation_UI
要注意的是,把 component 解壓縮到 tmp 目錄下後,UI 上的安裝目錄路徑要寫:/var/www/html/Joomla/tmp/[component name] 才可以 ([component name]也是一個目錄)。
一切順利的話,不用幾秒鐘整個 extension 就安裝成功啦!
步驟三:手動建立以下目錄,並解壓縮相對應的 tar.gz 檔 (tar –xzvf)
  • Joomla/components/com_fabrik/libs
  • Joomla/components/com_fabrik/views
註:
  1. 不知道為什麼自動安裝檔在這個步驟都會失敗 (在 Windows 上不會有這個問題),但是手動執行以後網站都可以正常運作。
  2. Fabrik 套件的 libs.tar.gz 檔案解壓縮後不會自動產生 libs 資料夾 (同理,views.tar.gz 也不會自動產生 views 資料夾),有點麻煩。
步驟四:開始使用 Fabrik!
安裝好了以後,在管理員後台的「元件」中,就會看到 Fabrik 套件的管理 UI 了:
fabrik_admin_UI
包括 Tables、Forms、Groups、Elements 都是需要設定的:
fabrik_admin_UI_homepage
至於詳細的設定,就留待下一篇再來細談囉!

本系列其他文章:

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D