Drupal 版本資訊及選擇

常見的 Drupal 及模組版本資訊

  • Drupal 版本
    常見 Drupal 版本號為 6.x,其中 "6" 是大版本號,目前只會同時維護兩個大版本,當 Drupal 7 發佈後,再不會有 Drupal 5 的發行版及安全修正。隨後的 "x" 是更新版本,數字越大代表越新。小版本間更新多為修正 BUG 及效能改進,進行小版本更新很簡單且安全,所以沒有不更新的理由
  • 模組版本
    模組像 Drupal 一般,也分別大版本及小更新。通常大版本跳進都會帶來重要的全新功能,而小版本更新多少一些修正,但也有可能是引進小的功能,社區中並沒有一致性的規定及習慣。對於由 1.x 跳進至 2.x,要注意模組作者的提示。特別對於一些大型模組:Views、Panels 或 Ubercart,它們每次大版本升級,可能是全新的改變,要多加注意。進行更新講求是否需要的,並不必要每一個版本都進行升級,但不要忽略安全修正。
  • 版本狀態
    這說明版本現處於什麼階段。alpha 是最初進入測試階段的版本,多是不太穩定;然後會提升至 Beta;最終版本狀態會沒了,那代表是穩定版本!但我們更常見的是 Dev 狀態,這是一個很夢幻的狀態。Dev 模組有時一大堆 BUG,卻有時比穩定版本更少問題。

個人的建議及選擇

Drupal 5 已走到人生最多一個階段了,新的網站都選用 Drupal 6,至於 Drupal 7 待正式發佈後,至少要待上半年才會進入穩定期,以及各種大型模組才支援這版本。

我傾向選擇使用模組的 -dev 版本,比如說:當有一個 2.0 及 2.x-dev 版本時,我會使用後者,但假如是 3.x-dev,就真的靠經驗。你可以從發佈日期上去看,有時候 -dev 與穩定版本相差半年至一年時間,放膽嘗試使用 -dev 版本。

對於兩個差不多的模組間,該如何選擇?

你可以從模組的使用量去決擇 (View usage statistics),但多使用量並不代表一定是比其他的為好。其次可以看作者的資料。

比如此作者:merlinofchaos

  • 有參與 Drupal 各種活動
  • 有製作大網站的經驗
  • 有參與多個模組開發,而且是大型的模組

Maintainers 多與少,是否高手也值得用作參考。

整合舊網站資料至 Drupal (利用 node_save() 建立 Node)

要從舊有的網站,轉移至 Drupal,是否很頭痛?? 怎麼 Drupal 建立一個 NODE 會改動這麼多資料表啊!! 該怎麼好呢? 請永遠緊記 Drupal API 是你的朋友!

透過編寫程式建立 Drupal Node

我們的編寫步驟及方向流程:

  1. 如果你還未會建立 Drupal 模組或要從外部執行,可使用 bootstrap 將它們連結起來。
  2. 從其他程式的資料庫或任何途徑取得你想要的資料 (PHP 你不會? 那請關閉此網頁)
  3. 透過 Drupal API node_save() 儲存到 Drupal 資料庫中
  4. 上 Youtube 看一會短片,讓程式自己運行

簡單示範程式碼:



// 打開 Drupal index.php,將前面兩行複製一下就可以
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$node = new stdClass(); // 建立 Node Object.

module_load_include('inc', 'node', 'node.pages');

/**
 * 自動準備好一些該有的參數
 * 因此在下面只需填上你要修改的內容便可
 * 如缺乏這一步,你需要獨一編寫。
 */
node_object_prepare($node); 

/**
 * 好戲現在開始
 * 從其他資料庫或程式中取得數據,然後再寫入
 * 使用 print_r($node) 或 Devel dsm($node) 了解有什麼可用
 */
 
$node->type = 'story';
$node->title = "Node 標題";
$node->body = "Node 內容";

$new_node = node_submit($node); // 準備儲存前的一些資料
node_save($new_node); // 最重要是這一步 !! 

就是這麼簡單。

透過現有模組

當然,如果你真是不會 PHP,而又沒有好好聽我上面所說而關閉此頁面的話,可以考慮使用現有的 Drupal 模組來達成。

到 Drupal.org 搜尋 csv import, node import, X improt 就有一大堆,我也不知那個好,跟我分享哦 🙂

從移除、修改 Drupal Rss icon 看 Drupal API 之優及版型修改

安裝好 Drupal 後,預設就有提供 RSS 的服務,但不想要該如何 ? 很有趣的是,即使到了最新的 Drupal 7 也沒有提供關閉功能,你可以靠模組來解決 (RSS Permissions)。算了算,我不太想安裝模組,就是要隱藏起來就好….

Rss icon 是來自版型中的,要隱藏的方法的確多,但既然使用了 Drupal,就好好學一下 Drupal 能如何去做。

利用 CSS 隱藏

對於新手來說,第一個想法必定是 CSS,真的太簡單


.feed-icon { display: none }

但你或許會說:我雖不懂 Drupal ,可是一名 HTML & CSS 的高手,無謂的輸出這些 HTML 程式碼,有點兒… (是的,這是最糟糕的方法,窮途未路時才好使用)

從 Page.tpl.php 中移除

對了,這次對了!找到以下這句,刪了就可以


print $feed_icons

可是,$feed_icons未必只在一個版型檔案中,要獨一修改也太麻煩。某天,老闆想法不同,不是又要花大量時間去修改回來嗎 ? 一些模組亦可能會輸出啊!

透過 Drupal API theme_feed_icon 移除

這是終極武器,既不會輸出無謂的 HTML,也不用大量修改版型,某天後悔了,也只是註釋掉就可以。模組做壞事嗎 ?? 也會殺掉它!

參考:http://api.drupal.org/api/function/theme_feed_icon/6

直接複製程式碼到版型下的 template.php 檔案,並做小修改。


function phptemplate_feed_icon($url, $title) {
     return '';
 }

** 緊記到管理界面清除快取,否則沒效果不要說我的方法失敗。

Drupal 7 中 "phptemplate_" 已失效,請使用你的版型名代替,事實上 Drupal 6 中也應該這樣做。

要修改圖片 ?

Drupal 6


function theme_feed_icon($url, $title) {
  if ($image = theme('image', path_to_theme() . '/images/feed.png', t('Syndicate content'), $title)) {
    return '<a href="'. check_url($url) .'" class="feed-icon">'. $image .'</a>';
  }
}

Drupal 7 API 變了,做法沒差別,你可以使用新的 API


function theme_feed_icon($variables) {
  $text = t('Subscribe to @feed-title', array('@feed-title' => $variables['title']));
  if ($image = theme('image', array('path' => path_to_theme() . '/images/feed.png', 'alt' => $text))) {
    return '<a href="' . check_url($variables['url']) . '" title="' . $text . '" class="feed-icon">' . $image . '</a>';
  }
}

複製了,出錯啊 ! 剛才說過,你要修改 theme_ 為你的版型名。
修改了,變了沒東西 ? 別忘記清除快取及在你指定的位置放上圖片。
只出文字該如何做 ?? 我不太懂, LOL
 

(這是 Drupal 小技巧系列,專門分享微不足道,但實用的修改技巧。)

移除 Drupal 回應中的未驗證使用者字串 (not verified)

在 Drupal 中,經常性地看見一個很不討好的字串:(not verified)。當匿名或未驗證使用者發佈內容時,必會看到!很討厭,將它移除吧:

Drupal 7 移除的超簡單

只要在管理後台 Appearance 中,選擇你的版型 (或者是 Gobal Settings),然後取消 "User verification status in comments" (使用者在回應中的驗證狀態) 便可。

Drupal 6 或以下版本需要修改版型檔案

參考 http://api.drupal.org/api/function/theme_username/6

直接複製程式碼到版型下的 template.php 檔案,並做小修改。


function phptemplate_username($object) {

  if ($object->uid && $object->name) {
    // Shorten the name when it is too long or it will break many tables.
    if (drupal_strlen($object->name) > 20) {
      $name = drupal_substr($object->name, 0, 15) .'...';
    }
    else {
      $name = $object->name;
    }

    if (user_access('access user profiles')) {
      $output = l($name, 'user/'. $object->uid, array('attributes' => array('title' => t('View user profile.'))));
    }
    else {
      $output = check_plain($name);
    }
  }
  else if ($object->name) {
    // Sometimes modules display content composed by people who are
    // not registered members of the site (e.g. mailing list or news
    // aggregator modules). This clause enables modules to display
    // the true author of the content.
    if (!empty($object->homepage)) {
      $output = l($object->name, $object->homepage, array('attributes' => array('rel' => 'nofollow')));
    }
    else {
      $output = check_plain($object->name);
    }

   // $output .= ' ('. t('not verified') .')'; 將這一行註釋了就可以 !!
  }
  else {
    $output = check_plain(variable_get('anonymous', t('Anonymous')));
  }

  return $output;
}

覺得太長的話,直接使用 str_replace 也可以


function phptemplate_username($object) {
  return str_replace(' ('. t('not verified') .')', '', theme_username($object));
}

兩者效能相差並不大,各取其好。

若 Drupal 7 也想使用修改程式碼方式,可以修改 template_process_username()

(這是 Drupal 小技巧系列,專門分享微不足道,但實用的修改技巧。)

Drupal 7 大不同:BLOCK 變很大,親和性增強

Region & Block (區域及區塊) 在 Drupal 中佔了很重要的位置,Drupal 7 進一步將 Content (內容) & Help (幫助訊息) 變成了 Block,增加了彈性。

Drupal 6 中的 BLOCK (區塊)

在 Drupal 6 或更舊版本中編輯 Block,介面都會隨時現使用的版型而改變,遇上版型不完整時,就亂掉了,甚至沒法正常顯示出 BLOCK 編輯畫面,真痛苦

Drupal 7 的改善

Drupal 7 的首要任務是增強 UI,當然不會忘記 BLOCK 這個重要的構件。 現在 BLOCK 編輯界面會固定使用管理員版型,要看看效果?請按下 Demonstrate block regions 連結。

正如上面所說,現在的內容都是一個 BLOCK 了,想擺到那裏去都行。

除此以外,還能在同一畫面為所有已啟用的 Theme (版型) 進行設定

可以向 Block Node Visibility 模組說再見,Drupal 7 內置能控制 BLOCK 在那一些 Content type (內容類型) 才顯示

看不到的效能提升

在 Drupal 6 或以前版本中,當有大量的 BLOCK ,即使不顯示在目前頁面中,也是會被執行的,這對效能有極大的影響,現在 Drupal 7 解決了這些問題,只會在需要執行的時候,才執行。(不需要額外設定)

Drupal 6 或以前版本,可以使用以下模組解決:

Block Page Visibility

可參考文章:
Improve Drupal’s performance by not executing block logic on page templates with no regions
Part 1 Part 2

Drupal Performance Tip: Block Visibility

 

 

Drupal 7 大不同:將 Taxonomy 增加到內容類型

Drupal 7 不但後台有一個全新的介面,某些管理的選項及設定流程也不同。自 Drupal 7 開始,將 CCK 引入核心,命名為 Fields。現在要增加 Taxonomy 都要跟 Fields 拉上關係。

Drupal 6 增加 Taxonomy 到內容類型的方式

以往在 Drupal 6 中,我們可以在 Taxonomy 中增加 Vocabulary,當中有選項,將該 Vocabulary 配給不同的 Content types (內容類型)。 

 

Drupal 7 中增加 Taxonomy 方法

Drupal 7 中有所不同:

  1. 先在 Taxonomy 管理頁面增加新的 Vocabulary
    位置:『admin/structure/taxonomy』
  2. 再到內容類型管理頁面,選項你的內容類型,點選旁邊的 Manage fields
    位置:『admin/structure/types』 -> 『admin/structure/types/manage/article/fields 』


留意紅色箭頭選項

如果要增加到不同的內容類型呢 ??

這下子比 Drupal 6 麻煩了,你是需要不斷重做上述步驟。不過剛才新增的可以重覆使用,而且可以給上不同的標籤 (Label)

結語

自始以後,彈性增加了,但設定的流程就比以往曲拆。即使是 Drupal 的經驗開發者,也可能要花點時間才知道新的方式。對於新人,這完全跟其他 CMS 有別,是需要學習及習慣這種不便。希望很快有相關模組推出,改善增加流程的麻煩之處。

Drupal 7 大不同:內置自動執行 CRON

在 Drupal 當中,一些見常功能如搜尋索引、處理 Watchdog 記錄或是檢查更新內容都是要透過 CRON 執行。

Drupal 7 內置自動執行 CRON

不幸的是,遇上一個伺服機並沒有 CRON 功能提供,即使是有也不會設定就是了。為了解決這問題,在 Drupal 6 中我們都使用 Poormanscron,簡單易用,使 Drupal 內部功能保持正常運作。很明顯 Drupal 社區意識到 CRON 對 Drupal 的重要性,Drupal 7 中這將是一個內置的核心功能。

設定位置:admin/config/system/site-information

快慢頻率由你,怎然之不是 Never 就行了。

Drupal 7 CRON 更安全

Drupal 6 以前版本的 cron 都是任由執行,並不用什麼特定帳戶。現在終於解決了這個問題,不再讓人任由魚肉囉!以後在外部執行 cron,緊記需要不同的 URL。

透過外部工具執行 Drupal CRON

Drupal 7 內置 CRON 是當有人瀏覽網站時,才會觸發,如果架設的是定期發送 EMAIL 這類網站,就無法達到目的。

Linux CRON 設定

  1. 開啟 『crontab -e』
  2. 輸入 
  3. 45 * * * * /usr/bin/wget -O -q -t 1 http://www.example.com/cron.php?cron_key=XXXXXXX > /dev/null

    意思是在每小時的 45 分執行。更詳細解釋可看烏哥 CRON 教學

其他有用資源

Drupal 程式員不可不看的模組 – Example

CCK 及 Views 是 Drupal 開發者不可缺少的模組,幫助你完成各種任務。不過獨特有個性的網站,難免要親自操刀寫模組。於是熟讀書籍 『Pro Drupal Development』,書內的範例也熟了,還是什麼不懂。尋遍 Drupal.org,想找一個簡單的模組作範例,可是一無所獲。這時候遇上它真是要感恩!

Examples 模組是什麼?

正如其名,Examples 模組是一個範例模組,包含十數個不同示範,展示常用功能的編寫方法,程式碼簡潔,以實現功能為主,多餘的都不寫,絕對是一個值得學習參考的模組。以正規模組身份發佈在 Drupal.org 上,高手們都來檢閱,出錯機會減少,質素優良。

看看 Examples 模組包含了那些示範:

http://d7.drupalexamples.info

取得 Examples 模組:

 

 

一個 Drupal 網站的誕生

做 Drupal 網站之初必定要確定目的方向,否則很容易迷路,你會白花時間去做一些不必要的功能,研究一些不必要的模組。

構想中的 notaBlueScreen

構想網站

確定自己想建立一個關於 Drupal 教學的 Blog,及主要想寫的內容。

建立架構

需求:

大方向想好後,就能確定要什麼功能。 由於是 Blog 的形式,要求很簡單:

  • 能發文章,能回覆
  • 有分類,還要有 TAG
  • 能訂閱留言 EMAIL
  • 最近文章,回應
  • 我要 Five star
  • 想不到了 ….

初步功能確定後,開始尋找模組:

怕忘記了,所以使用 EXCEL 記錄起來。

進行實地測試:

很多不同的模組能達到相同的效果,及模組間有可能造成沖突或會存在 BUG,所以進行初步簡單測試,以防萬一及作出最佳決策。也是對新認識模組作一個初步的了解。測試只要很簡單的啟動,試試一些功能,看看是必適合自己。模組使用量增加,對日後管理、效能都有大影響,所以要較為關註。

想要的功能,都找到了適合的方法去實現,太好了,這下子安心 ^_^

現在我要先架構網站功能,還是介面外觀的設計呢?

我的選擇是:建立線框,簡單繪出想要的設計。

繪畫線框 (Wireframe)

線框的好處是能快速建立,提供一個基本的視覺化效果。

到這一刻,我才發現…原來還要有一個搜尋功能,雖然內置提供了,但對中文支持不夠好,於是又去找模組…

在建立網站期間,往往會發生增增減減的事情,如幸好的這階段發現,就不會白費時間去尋找模組、模組測試、寫代碼或實際地設計了。

設計

線框建立了,要 PHOTOSHOP 做真實的設計了!當然有一些專家喜歡先寫程式,也有一些連在 PHOTOSHOP 設計這一步也不做。對於不同的專案,我會有不同對策,這一回決定先設計。

設計 …

再設計,簡單也很花時間 …

好了,夠完美 ^_^

一個網站的元素很多,所以設計中要養成好習慣,將各部份整理歸檔於資料夾中,這除了在設計時方便隨時修改外,也方便轉換至 Drupal 版型。

建立與設定功能

實作 Drupal 功能與版型前後時常按不同開發模式有所改變。但先完善 Drupal 網站內功能,這會有一些得益。由於 Drupal 本身輸出的東西會包含一些預設的代碼,如果先製作好版型,這有可能待網站功能完善後,再要重新修正。所以往往是早在製作 Drupal 版型前就完成 90 % 網站功能,這樣將設計整合到版型時,可以即時取得所需要呈現出來的內容。

Drupal 版型設計

很多專家都說:Drupal 版型很容易。但對很多人來說,難啊!真的難!這可以是大家的想法有所不同。專家的想法是,一個版型設計師只要做 HTML / CSS / jQuery 的工作,懂一點 PHP 邏輯代碼,會控制是否顯示就足夠,$varX 該是什麼,$varY 又是什麼,是 PHP 程式員的事。偏偏大部份做 Drupal 版型的人是多功能的,除了轉換設計至 Drupal 版型外,還要額外寫一堆 PHP 代碼去引出必要的內容。所以我認為真正難倒你的是對 Drupal 核心及 PHP 的了解未夠。

將 Photoshop 設計轉換成 Drupal 版型,可有數個流程方法:

選擇一:先將 PSD 檔案轉換成 HTML/CSS,再轉換至 Drupal 版型

優點:

  • HTML / CSS 能快速重新整理,不必等待 Drupal 程式執行,加快修改速度
  • 轉換 Drupal 版型時,有一個完成的 HTML 檔案作對比,易找出錯誤,而且早有成果,能放心,可以確定是的轉換期間出錯

缺點:

  • Drupal 原生 HTML 代碼加上你寫的 HTML,會造成多餘的垃圾代碼;
  • 移除以上垃圾代碼,要花多一點時間,也許會令你在之前做了一些不必會的功夫。

選擇二:選用一個 Drupal 版型,然後將 PSD 檔案直至轉換到版型中

優點:

  • 選擇適合的版型,能很快建立起外觀,然後可以建立初步的程式功能
  • 版型都預設了功能及主要框架,不必花時間去除錯,或建立一些基本的樣式

缺點:

  • Drupal 刷新需要時間
  • 有可能是 PHP 錯誤阻礙了,也很容易打亂陣腳
  • 配合特定版型,你要預先了解其結構,未必能隨心所欲

這回,我選擇了第二種方式。由於我早在構想期間就決定了使用 960GS,這是一個 CSS Framework,更好的是 Drupal 中也有建立於這個 960 GS Framework 的版型,能即時幫我建立好想要的框架。再加上簡約的設計,出錯機會不大,而且真正要修正的東西也不多。

建立網頁介面,往往最多遇上的是外型大出錯,位置錯亂了的情況,這類錯誤時常都要很花腦力去修正。為了減少 Drupal 執行時間的影響,最好先是建立主體框架,然後才一步一步增刪細節。

結語

結尾很突然?

不要忘記將你的 Drupal 網站流程心德跟我分享。

你想看更多相關 Drupal 文章嗎?向下拉,跟蹤我的動向。更多支持,會有更多動力分享,以後再細說各項 ^_^

Drupal Gardens 邀請來了!預覽文

drupal gardens 首頁

數月前 Drupal Gardens 開放測試版邀請登記,今天終於等到了邀請。究竟 Drupal Gardens 是否像 WordPress.com 一樣的平台,還是有什麼創意的內容帶給大家呢 …

開始 Drupal Gardens 旅程

以下是 Drupal Gardens Invites Email:

註冊頁面 – 很簡單,十秒填好並進行下一步

選擇版型 – 看來還沒有弄好,這頁面只有一個選擇,不過完成後在管理平台中還有數個不同樣式的

建立中 – 想不到這麼快,不知將會是什麼樣子

登登登登,終於出現了:http://kay.drupalgardens.com

 

從這裏開始,可以看到 Drupal Gardens 是建立在 Drupal 7上。也就是說 Drupal 7 的功能都能在 Drupal Gardens 上找到,所以我省略就不談 Drupal 7 的東西了。

Drupal Gardens 上獨有的東西:可視化版型設計

都是用滑鼠點點按按設定,一般的 LOGO、版型、色彩都能改變

不同排版方式!

為不同部分設定字型、色彩。(有點像人氣己去的 XANGA 版型設計系統)

至於還有什麼獨特的?好像沒有了。

與 WordPress.com 相比

WordPress.com 有的功能,Durpal Gardens 幾乎也全找到

Drupal Dardens 也能像 WordPress.com 一帳號擁有多網站:

Drupal 還能建立論壇

Drupal Gardens 更多擴展性

  • 可以選擇開關內置的模組,所以想要中文化完全沒有問題,相信未來甚至能自由安裝一些模組
  • 內置版型設定後,可以匯出至本地,也就是說你能在任何地方使用
  • 整個 Drupal Dardens 上的網站匯出 (包括資料庫在內),所以有一天你想離開 Drupal Gardens 絕對沒有問題

 

Drupal Gardens 旅程後 …

對於整個旅程,沒有太多令人驚訝的地方。唯一是版型設計有多欄排版任選,較為獨特,版型設計功能方便,但還有不友善的地方,比如做一些設定後,是否己儲存了?設定 LOGO後,位置也不理想,如果沒有 CSS 知識,似乎很難解決。

同時打開了 Firebug 也引發了不預期的錯誤 (也許有安全問題存在)。

站在 Drupal 7 的友善介面上,雖然有了 Edit in Place 功能,但還沒有很完整,作為一個沒有 Drupal 知識的使用者,選單該如何修改?也未必即時能了解到。

 

想看看 Drupal Gardens:

Drupal Gardens 網址

我在 Drupal Gardens 的測試網站

取得 Drupal Gardens 邀請