Development

svn 概念, 初階使用

-
Free tags: 

UPDATE: 2011-01-09 SVN merge
UPDATE: 2010-04-13 images added
ORG: 2009-06-13

svn 是一個管理源碼的工具
它提供一個容許多人協作的平台, 幫助一個多人開發的團隊管理代碼
同時提供一個保存多版本的功能 (version-ing)

而我因為多數都自己一個開發, 主要為了 versioning 而使用 svn
但因為有多個開發機器
為了保持代碼在多個機器中同步, 都會使用 svn

implement hook_block()

hook_block() 是一個給 Drupal 提供block 的方法
假如你發覺自己在 add block 的時候用了 input method 使用了php
那你其實應該建立一個 module, 使用 hook_block()

原因: "module" vs "add block"

  • php 的 syntax error 不會因為寫進了 DB 而做成修正的極大麻煩 vs 要直接修改 DB record
  • File 方便 version control vs DB record 的 version control 和沒有做差無幾..
  • customization 集中方便修改 vs 源碼分散
  • File deployment vs DB deployment

所以, 不要懶了, 而且建立hook_block() 也很簡單

假設 module 名為 joe

views 中只顯示屬於自己角色的頁面

來自社區的一個問題: http://drupalchina.org/node/8514#comment-26113
比如我是 "writer" role, 我想要一個頁面都是 writer role 的用戶的nodes:

views 的 argument 應:
加, User:roles -> Provide default argument
Default argument type: PHP code:

2009-09-10 form to email 2分鐘完成

-
Free tags: 

近來因為真的因為太多案子
這邊很久有update 了

又因為真的太多案子
古怪, 快速, 而又欠缺美感的想法, 一直被我無情的實現了

要求:
表單轉成email

解說:
signup module 不夠欄位, 功能不足
修改又花時間
非 Drupal, framework 的方案又不夠快, 不夠髒
反正沒有要求 email 的整潔程度.......

cck + rules 一口氣完成
cck 定義所需的 fields,
rules 設定新的 node submit 便 send email
再用 token 在 email 的內容做手腳, 將 submit 的 node 連fields 都輸出
設定真的只用了 2分鐘!

2009-08-08 htmlentities() 和 html_entity_decode()

-
Free tags: 

htmlentities() 和 html_entity_decode()

htmlentities()
http://www.php.net/manual/en/function.htmlentities.php

功能上很簡單, 就是將 < 變作 &lt;
當然, 還有其他的entities, 可以參考: http://www.w3schools.com/html/html_entities.asp
主要是給使用者輸入的 entities 會 escape, 輸出的時候便可以直接使用

另一方面,

我的一個project 會使用 file_get_content() 來使用 http 下載某些相關的網頁,
然後抽取其中內容顯示
但 <title> 中的entities 不會被瀏覽器 decode, 所以便會使用到:

2009-07-17 svn tagging and branching

-
Free tags: 

svn 是一種使用之前會討厭,
但使用過以後你已經不能缺少的開發環節 (情況和測試驅動開發(TDD)一樣)

在"使用過" 並愛上的青況之下,
你很容易便會提起興趣學習進階的 branch 和 tag 的功能了
但如果沒有, 直接跳過就好了

對於使用者來說, tag 和 branch 建立之後, 你會發現 svn 好像複製了 trunk 的檔案到另一個地方
所以你的在 trunk 的 commit 不會對tag 和 branch 的資料做成影響, 相反如是
如果你瀏覽你的 repo, 你便可以發現你的 code 都在 trunk 資料夾之下(如果正常的設定之下)
上一層便可以看到 tags 和 branches 資料夾, 甚至是 releases 資料夾

但tagging 並不會對你的檔案系統和硬碟做成壓力
因為它只會建立連結到 tags, 而不會建立另一組的檔案
另一面說, 就是 svn 提供一個快速的 tag 和 branch, 令你樂於使用, 就好像 commit 一樣

theme 使用theme 自己的 *.tpl.php, build a custom hook_theme() on a theme

一個module 需要輸出html 的話, 會使用 hook_theme()
但如果一個theme 都需要輸出特定的html, 或者需要使用 *.tpl.php的話
因為Drupal 6 新增了 theme registry,
以前 Drupal 5 的theme 內的theme() 函數都不會自動加到theme registry
要在 template.php 內:

/*
template.php
*/
function [theme_name]_theme(){
  return array(
    'taxonomy' => array(
      'template' => 'taxonomy',
      'arguments' => array('taxonomy'=>NULL),
    ),
  );
}

便可以在theme_name 資料夾內使用taxonomy.tpl.php:

處理複雜的 taxonomy 和 breadcrumb 關係

我的一個freelance 之中有一個 Drupal 的普遍問題,
breadcrumb 的作用不太大
Drupal 沒有使用分類輸出一個合適的 breadcrumb

以這次的網站做主軸, 舉個例子(只是個簡化的假設例子):
content type 3個: 經濟, 娛樂, 體育
經濟 type 有一個專屬的 vocab, 有terms: 中國經濟, 美國經濟, 歐洲經濟
娛樂 type 有一個專屬的 vocab, 有terms: 香港娛樂, 日本娛樂
體育 type 有一個專屬的 vocab, 有terms: 足球, 籃球

[views 2.0 版] 使用 views 建立tabs, use view to build tabs

tabs 一直是Drupal 中比較少特別提及的功能之一
用戶頁 user/[uid] 便是一個很標準的tab 應用
"view"/"edit" tab 也常見於node 頁

使用views 可以很方便的建立tabs
前文Drupal 5 版: http://www.joetsuihk.com/node/112 中已經介紹過
那是Drupal5, views1 的版本
這次介紹 Drupal6, views2 的版本的設定方法

這次是建立一個tab
顯示用戶建立的node 之中, 留言數目大於10 的頁面, 定義為 "hot"
路徑 user/[uid]/hot
如圖:

將搜尋結果排序

最近做的一件案子中,
有一個比較少見但有時候很實用的功能需求
就是要將搜尋的結果以某條件排序
例如搜尋一些新聞, 時間性很重要
想要將最近相關的新聞排先, 以日期順序
但內建的搜尋是以相關性排序, 最相關的排先

思路:
首先是排序
排序首選是views
但views 的 filter 過濾器並沒有搜尋相關字的設定
但使用views table 排序是最方便的
views 自己就內建

所以我要將搜尋的結果傳給views
自然是使用 arguments 了
找出搜尋結果的nid, 再用逗號分隔, 傳給views
再將views 內嵌到serach result 的頁面

實際解決辦法, 設定:
先新增一個views,
顯示設定為table, 可排序
再到fields 選擇所需的欄位
重點在argument 的欄位,
選Node:nid
Provide default argument
PHP code:

Pages

Google