Drupal 6多國語言網站設定-使用i18n模組支援多國語系切換

i18n 多國語系切換
因為Drupal的設定很繁雜,所以很容易有見樹不見林或迷路的感覺,甚至突然不知道自己現在在設定什麼東西XD,或者不知道設定的意義在哪。本文除了作為筆記之用,也順帶註記一些個人覺得也許有用的說明,希望看倌們能比較容易理解。
預設的Drupal網站,有提供基本的「語系」設定及「語系翻譯」功能,可以讓有權限的使用者進入後台,進行設定網站的語系(新增語系、設定本站預設語系…等),另外也可以匯入/匯出特定語系的翻譯檔,或針對未翻譯完整的語系進行翻譯。預設的語系功能,都是躲在後台玩的,如果要讓一般訪客都能在前台切換語系呢?安裝及設定相關模組就能達成。 閱讀全文
相關文章
Drupal 7版型開發(theming)與Drupal 6的不同(下)
所有模版的標題都具有前置字與後置字變數
Drupal 7樣版都具備兩個新的標準變數:$title_prefix 及 $title_suffix。
這兩個變數內放的是想要被呈現在個別的標題前或後的輸出內容,可作為contextual links之用,像是讓具有某種權限的使用者可以看到一些特別的連結出現在標題上面或下面。
在node.tpl.php內局部的(Granular)展示$content 資訊
現在不需要像使用Drupal 6的$content時,要先做處理才能分隔$content的輸出。在Drupal 7使用 print render($content) 等同於在 Drupal 6的 print $content,不過當您想輸出部份的內容,像是link,在Drupal 7可以用 print render(content['links'])取得。
使用方式可以參考一下 node.tpl.php內的程式碼: 閱讀全文
相關文章
Drupal 7版型開發(theming)與Drupal 6的不同(上)
Drupal 7預計將在今年中發佈正式版,在版型開發上有什麼不同之處需要注意的呢?
版型(Theme)無法向下相容
一直以來新版的Drupal發佈後,舊版的模組(module) 都無法向下相容於舊版的Drupal (指主要版號發佈),這樣的情況也同樣發生在版型上,即是指舊的版型要經過修正才能套用至新版Drupal。針對此情況,Drupal.org提出了一份「Drupal 6轉換到Drupal 7的變更清單」,這份清單目前有49個項目,但實際上這些項目存在著一些待修正的部份,另外也有尚未列入清單的項目正在討論中 (講白一點就是這份清單有一點點過時XD)。但無論如何,這份清單還是能給Drupal 6的版型師(Themer)很不錯的參考,並決定思考如何升級版型去支援Drupal 7。
有一點可以確定的是,比起 Drupal 6,Drupal 7的模型開發比較複雜一點點,但這不表示比較難學習。我想合理的複雜化,是為了更容易理解及擴充。複雜的原因可能在於,Drupal 7 想盡辦法的將版型解構成合理的項目,並且另方面還要維持概念上的一致性,如此Drupal 6的版型師在轉換上才不會太痛苦。
我們先從Drupal 7的版型架構來看看有什麼新玩意。

drupal 7 版型架構 (pingv.com)
相關文章
Drupal 7 – 內容管理系統(CMS)開發框架

Drupal
Drupal 是什麼?
Drupal是一個PHP based的內容管理系統(CMS)開發框架(framework,也有人稱它是一種平台),但其實安裝Drupal之後,也會得到一個只有「半成品」程度的CMS,需要管理者「用力的」客製化後才能見到比較漂亮及完整的成品。因為Drupal也算是個CMS,因此常常被拿來跟Joomla、WordPress、Plone等CMS相比較,當然Joomla及WordPress安裝完後也需要User客製化一番,只是Drupal想要變的把戲比較多,所以比較麻煩一點,所以沒辦法定型的發展成針對某種應用的CMS,所以大部份新手使用Drupal的感覺是-Drupal很陽春或者很醜,至少不像Joomla,安裝完就有個漂亮的網站及後台。 閱讀全文
相關文章
Wordpress CMS外掛-Pods CMS:簡單客製化企業網站(下)
上回我們談到Pods後台能設定pods,templates,pages,就好比MVC架構的三個特性。在pods頁面,我們先選state這個pod來看一下設定畫面:

左上角的name是預設的第一個欄位,每個pods都會有一個name。而下一個欄位abbrev就是自訂出來的,所以這個pod有兩個欄位。如果需要自訂pod,就新增一個,再看自己需要什麼樣的欄位,一一設定進去就行了。設定好pod的欄位,就能到後台選單裡的Pods發現多了一個 Add xxx的選項,以state來說就是Add state,這邊就能新增pod的內容,而wp後台pods選單還有browse content選項,可以看到所有設定好的pod及其內容。 閱讀全文
相關文章
Wordpress CMS外掛-Pods CMS:簡單客製化企業網站(上)

Wordpress是一款開放原始碼(open source)的部落格架站軟體,自從2003年問世後,就逐漸成為自架部落格的指標性軟體。也因為它開放性的外掛(Plug-in)機制,讓許多國內外的好手都加入撰寫外掛行列,成千上萬的外掛給了Wordpress無限的想像空間。 閱讀全文
相關文章
利用CodeIgniter建立簡單的MVC架構範例

[圖片來源: CodeIgniter.com]
CodeIgniter是一套簡單、快速的PHP Framework,因為採用MVC的概念,所以能讓中、大型網站專案的架構變得漂亮乾淨許多,最近有空又開始試玩它,建議剛入門的同學可以先到官網跟著教學影片run幾次,尤其是20分鐘建立Blog的例子,實際跑過幾次流程,認識一下Controller跟View之間的互動方式。
耶,為什麼只提到Controller跟View呢?Model呢?是的,那個範例並沒有使用到Model,它是將取得資料的動作,直接寫在Controller了。其實寫CodeIgniter,並不用強制一定要M、V、C都使用,如果網站很單純,只要有C (只要有心…),V跟M都能被實作在C裡。跑過教學影片的同學一定有印象,Controller就是一堆PHP的Class,一個繼承Controller類別的Class,本身就像是一頁網頁,使用echo的方式就能達到View的效果,而在Controller直接呼叫像是 $this->db->get(’db_table_name’)的語法就能取得資料庫的資料了,就像範例那樣。
雖說Controller似乎能控制一切,但使用MVC架構的目的本來就是不想全部的code都搞成一沱,所以我們先來看看一個簡單的MVC例子,M,V,C都用。現在請先確定已經把CodeIgniter抓下來,並且放在Server目錄內了。
好的,首先我們先建立資料庫的資料,一切從簡,以下是SQL script,我建了一個名為test的資料庫,執行以下SQL會建立一個名為entries的資料表,欄位有id, title, body,再建立兩筆記錄:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
---- database: `test`--
-- --------------------------------------------------------
---- table: `entries`--
CREATE TABLE IF NOT EXISTS `entries` (
`id` int(16) NOT NULL,
`title` varchar(64) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`body` varchar(128) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
---- data: `entries`--
INSERT INTO `entries` (`id`, `title`, `body`)
VALUES(1, 'mrmu1', 'HiHi!~'),(2, 'mrmu2', 'HIHIHI~');
再來準備Controller的部份,請在system/application/controllers目錄下建立blog.php,內容如下:
class Blog extends Controller {
function __construct() {
parent::Controller();
}
function index() {
$data['title'] = "TitleT";
$data['heading'] = "My PageT";
//$data['query'] = $this->db->get('entries'); // A
$this->load->model('blog_model'); // B
$data['query'] = $this->blog_model->getdata(); // C
$this->load->view('blog_view', $data);
}
}
其中標示A的那行,就是官網的教學影片使用的方式,直接在Controller取得資料庫的資料,我們先把它註解掉,以B,C行來取代它,即是使用load->model的方式,把載入資料的事交給blog_model這個類別,而接著再使用blog_model裡的getdata()來取得資料。
對了,要記得載入database函式庫,讓我們能使用db相關的函式。要載入database這個函式庫您可以在Controller裡面加上這行 $this->load->database();,可以加在呼叫$this->db->get(’entries’);之前,最好是放在建構子中,這樣可叫用的範圍比較廣,不過您也可以像這個範例一樣,直接到system/application/config/autoload.php 找到 $autoload['libraries'] = array();,改成$autoload['libraries'] = array(’database’); 這樣一來,它就會自動載入,您也就不用在Controller裡面額外加上load database的指令了。
接下來我們就來看看blog_model這個類別要怎麼寫。
請在system/application/models目錄下建立blog_model.php,因為我們只是要驗證一下,所以內容非常簡潔,如下:
class Blog_model extends Model {
function Blog_model() {
parent::Model();
}
function getdata() {
$query = $this->db->get('entries');
return $query;
}
}
很簡潔吧,好,接下來就是把View的部份也建立起來,請到system/application/views目錄建立blog_view.php,內容如下:
// 從Controller傳來的heading變數 <h1><?php echo $heading; ?></h1> <?php foreach($query->result() as $row): ?>// 一筆一筆讀出資料 <h3><?php echo $row->title ?></h3> // 讀出title欄位的資料 <? php echo $row->body ?> // 讀出body欄位的資料 <hr />//分隔線 <? php endforeach; ?>
基本上,View就是一堆Html語法加上輸出一些PHP的變數,如此就完成了我們的MVC架構簡單範例了。
輸出結果:
My PageT
mrmu1
HiHi!~
mrmu2
HIHIHI~
*注意,如果出現了 Message: Undefined property: Blog_model::$db 就表示您沒有載入database這個函式庫,請參考上述作法加載。
CodeIgniter官網:http://codeigniter.com/
CodeIgniter官方教學影片:http://codeigniter.com/tutorials/
相關文章
CodeIgniter-簡單快速易上手的PHP Framework

圖片來源: http://blog.ekofedriyanto.co.cc/
最近空閒的時候會看看PHP相關的東西,雖然我接觸的時間不長,不過因為一時興起寫了一個widget貼紙之後,就一發不可收拾了…XD
慢慢的這個貼紙從一個php檔,變五、六個,也算是像個網站了,用戶也逐漸增加…我知道除了簡單的功能外,簡單的視覺設計也是需要的,所以連同css也開始接觸…
慢慢的,這些php檔變成了一盤盤惱人的義大利麵,我知道基本又隨性的php語法已不能支撐住整個網站的發展,該是理性面對程式碼架構的時候了…XD (雖然心裡想著「我不要重寫呀!」)
年假大概花了三天重寫了,參考了一些framework的寫法,但還是不滿意…今天看到一些大大介紹的CakePHP,感覺好像不錯,但我似乎比較喜歡輕型一點的framework,於是找到了CodeIgniter這個東西…
所謂framework的東西,感覺上就有點像是整理原本的語言後再多包一層邏輯讓programmer比較容易使用。所謂”整理原本的語言”,即是指把常用的操作分類包裝;而多包一層邏輯,事實上就是各別framework的賣點(他們自認為最好理解且最易用的方式),也能說是每個開發團隊的創意,而programmer主要就是學習這層邏輯。
CodeIgniter使用MVC的Pattern概念,把Model (可視為資料層)、View (網頁的外觀)、Control (邏輯控制) 區分開來,讓code脫離義大利麵的苦海。如果有練習過php連結資料庫的經驗,只要稍微看一下它提供的tutorials影片,就大概能感覺到它的好處了。
雖然我大言不慚一直說它好,其實目前我也只是練習了它的一些小範例而已…XD
相關文章請參考:CodeIgniter。

