這次接的案件算稍微大的案件,一個雙語系(中、英)的學校網站。
最大的問題是很多地方都需要依客戶需求調整,這邊紀錄一下使用到的模組。
Internationalization (i18n) 多語系套件
http://drupal.org/project/i18n
基本安裝設置可參考 Mr.Mu的 Drupal 6多國語言網站設定-使用i18n模組支援多國語系切換
比較需要注意的是設定上, 語系 / 設定,使用 僅使用路徑前導字元 才不會出錯。
我在實做時發現,若選單、內文、區塊(對,這些都可以多語系) 語系設定不正確,在該語系會無法顯示,而沒有使用路徑前導字元(\en\ \zh-hant\ ...)也容易出現相同問題。這邊測了很久,所以提醒一下。
另外提一下若要自訂出不同分類有不同的側邊攔選單,可以使用區塊方式達成。至於偵測是否為該分類,可以用底下的程式碼。
重點在底下的tid碼,也就是依照分類,若為該分類則顯示區塊。
<?php
if (arg(0)=='node' && is_numeric(arg(1)) ) {
$terms = taxonomy_node_get_terms(node_load(arg(1)));
foreach($terms as $term) {
if (in_array($term->tid, array('6', '7'))) {
return TRUE;
}
}
}
return FALSE;
?>
透過網址判斷是否位於分類頁
若網址為 taxonomy/term/1
if ( arg(0) == 'taxonomy' && arg(1) == 'term' ) {
//執行區段
}
另外若要針對不同語系設計不同的版型可以使用下列方式:
在page.tpl.php前加入,可以用這種方式自訂不同語系使用的樣板。
if (i18n_get_lang() == 'en') {
include 'page-eng.tpl.php';
return; }
些微不同可以在body使用
<body class="<?php print i18n_get_lang(); ?>">
這樣要用jquery控制也比較好篩選語系。
另外Views產生的block(news之類的)可以使用一種彈性方式做出多語系。
在過濾器部分使用
節點翻譯: 語言 = Current user's language
在篩出分類以後,用這種方式可以彈性的製作多語系的blcok區塊(要先在分類定義好對應的語系分類)
可以試試,這樣不用再額外拆出新的block用block區分語系。
Menu breadcrumb 選單麵包屑 (網站導航)
http://drupal.org/project/menu_breadcrumb
有時候沒有使用完整的分類去建立內容,或是該內容根本不是歸為該分類底下,想要自行建立麵包屑時,就可以使用這個套件。
這套件可以將子孫選單都轉為麵包屑,對於麵包屑很要求的可以使用看看。
Taxonomy Breadcrumb 分類麵包屑
http://drupal.org/project/taxonomy_breadcrumb
跟選單麵包屑是類似的功能,都是來強化預設麵包屑的模組。只要分類有建置好,使用起來就會很順暢。
此套件預設會跟i18n衝突,類似狀況可參考:http://drupal.org/node/791472
主要是因為模組的執行優先權的問題,需要去drupal資料庫底下的System資料表,找到Taxonomy Breadcrumb,將weight改為大於10(因i18n weight是9,weight低於i18n就會出現錯誤),一般是建議改為99比較保險。
改完以後清除快取就不會有錯誤訊息了。
Pathauto 自訂文章網址 readable URLs
http://drupal.org/project/pathauto
這套件很強大,也可以改為中文的網址,對於SEO很有幫助,且網站看起來不會都是?q=node/n這種格式。
執行後可以在個別文章指定該文章的url。只要是建立網站而不是部落格都推薦使用。
ThickBox 光箱效果
http://drupal.org/project/thickbox
拿來跟相簿、圖片預覽整合用
Image 圖片上傳、分類功能
http://drupal.org/project/image
可以用此套件來製作網路相簿。
Calendar 行事曆、日曆功能
http://drupal.org/project/calendar 、 http://drupal.org/project/date (Calendar需安裝date模組)
如果要讓日曆看起來是中文的,需安裝date的中文化,而不是Calendar中文化。
若訪客無法看到,記得要設置權限 content_permissions 模組 底下的cck欄位。
Backup and Migrate 資料庫備份套件
http://drupal.org/project/backup_migrate
此套件可以直接在後台將資料庫內容打包為一個檔案,且備份時不會將不必要的快取備份,備份出來的檔案很小,比自己手工將sql倒出方便又好儲存。
且此套件可設定定時自動備份,也可以在後台將備份檔案上傳恢復。若要搬移drupal也很方便,只要將檔案複製過去,安裝此套件以後恢復即可,非常實用。
這套也是只要安裝drupal必安裝的一個套件。
/*------------- 套件紀錄結束 ----------------*/
ok,接下來提一下這次案件玩出的一些資料。
業主需要將側邊欄(sidebar)的背景延伸跟內容一樣長,且內容需要有一個基本高度,但因為側邊欄是使用條件篩出是否呈現的block,所以以CSS來說不可能延展。
所以只好用jquery去抓內容高度指派側邊欄的高度。 如下
if($("#content").height()<490){$("#content").height(495)};
$("#sidebar-left").height($("#content").height());
再來是每個分類(頁面)都要有不同的背景,且又不能每頁都是用html處理,所以一樣是用jquery處理
處理方式是去抓網址,看是要抓tid(分類id)或nid(文章node id),可以抓的地方有語系切換、搜尋、麵包屑、node的分類。
這邊記錄下來,看倌可以參考處理方式。
if($("div.taxonomy li a").attr("href")!=null){
var tid = $("div.taxonomy li a").attr("href").split("/",6);
$("body").addClass("tid"+tid[(tid.length)-1]);
}
if($("#block-locale-0 a.active").attr("href")!=null){
var nl = $("#block-locale-0 a.active").attr("href").split("/",6);
var nid = nl[(nl.length)-1];
var bg_set = "url(/demo/kbs/public/bg/"+nid+".jpg) right top no-repeat #fff";
$("#content").css({ "background": bg_set }); //強制寫入背景
$("body").addClass("n"+nid);
}
另外view產生的資料要客製化,一個比較簡單的方式,進去要客製的views後,基本設定底下的版型:資訊
點顯示輸出、樣式輸出都會生成一個php頁面,另存為除了最機本以外的另一個php檔,接著按重新掃描版型檔案,掃到後以後就可以透過更改那個檔案來客製。
例如我的image-gallery views顯示輸出,預設是 views-view.tpl.php ,點選顯示輸出後產生的php code,存為views-view--image-gallery.tpl.php,可以隨便print一些資料,讓你判斷是否為正在使用。重新掃描版型檔案後就會發現views-view--image-gallery.tpl.php 變為粗體字,接著儲存以後去看網站是否有剛剛print的資料,有的話代表已經改套用views-view--image-gallery.tpl.php檔案為view的版型了,這樣就可以自行修改該檔案來客製化。
這次的這件也算大工程,客製化、調整了很多資料,所以記錄下來啦。
嗯,打個廣告,如果有需要進行drupal客製樣板,或是drupal網站整合規劃設計可以留言在底下,將依需求及規模架構報價。
以上,紀錄。