Drupal 7.x

Rules 7.x 模組 101

Rules 模組在 6.x 的時代功能上已經很強大
但使用者介面一直很不友善,
rules rule set, actions, trigger, workflow, workflow-ng 等等使人很眼花撩亂
令很多使用者, 甚至開發人員, 包括我, 對 rules 模組卻步
情願自建模組, 編寫代碼, 使用方便的 hooks 完成用戶需求
例如, node 有一個電郵欄位, 每一次 save 的時候都送出一封電郵到 node 的電郵欄位
便可以使用 hook_nodeapi() (D6)

而在 7.x 中, rules 模組的使用者介面得到很大的改善
一般的使用者也可以使用
進階的 AND OR 邏輯也只需要簡單的學習就可以了
直接令自建模組的機會大大減少, 例如下圖:

Events 是「啓動類型」, 直接影響有什麼 Conditions 可用, 類似 hooks
node 儲存, 檢視, comment 儲存, 檢視, 執行 cron, 新用戶, 用戶登入等等都是 hook 變化出來的
Events 也會決定可以使用的 Conditions 和 Actions,
例如用戶登入 event 便會有 "用戶 role", "用戶上一次登入時間" 等,
node 儲存 便會有 "node author", "node 欄位值" 等等

Conditions 是條件,
"用戶 role 是管理人員", "node email 欄位值非空" 等等都是例子
Conditions 還可以添加 AND OR 邏輯
例如 ( "用戶 role 是管理人員" OR "用戶 role 是編輯" ) AND "用戶 department 欄位是 巿場推廣部"
留意括號的使用和 AND OR 的混合使用

Actions 是動作,
"發送電郵", "修改為未發佈", "修改欄位值為 x", "顯示訊息" 都是 actions
Actions 內可以使用 tokens 來客製動作
例如 "發送電郵" 中, 你可以設定電郵的 Subject 為: [node-title] 來自 [site-name]
Rules 便會替換 token 為 Events 的 "data"
使 Rules 的功能更加完整, 完備

Step1

開始先到Rules 下載, 啓用 Rules 7.x
Rules 的設定頁可以在 Configuration 內的 workflow 看到 rules 的列表 (全新安裝應該都是空白項)

按 "Add new rule" 的連結新增你的第一個 Rules

Step2


你需要輸入 Name, Tags 和 Event
Name 可以使用英數和空格, 應盡可能使用精準的 name,
例如 "Email notice when article being saved", "Publish articles on cron run" 等等
測試時也不建議使用 "test" 等命名, 先假設一個用戶需求會比較容易學習
Event 則需要選一個合適的類型, 雖然還可以修改, 但正確的類型可以避免出現不合情理的 Conditions 和 Events

Step3

第三步便會出現Events, Conditions 和 Actions 三個控制區域

你的第一個 rule 便正式成立了

Step4

接下來會分三篇遂一介紹 Events, Conditions 和 Actions 的詳細操作

Views3 的 templates 選項

Views 3.x 的介面雖然和 views 2.x 有點相似 但便使用了更多的 DHTML, AJAX 技術 之前有網友說找不到 views 3.x templates suggestion 的選項 我截了些圖給大家參考:

Views List

Views Edit

Views Edit Advanced

Views Templates Suggestions

Drupal7 imagefield_extended 的代用品 replacement for imagefield_extended

D6 的 imagefield_extended是我一個常用的模組,
可以將數個文字欄位加到 image 上,
當 imagefield 本身是 unlimited 的時候很有用

但顯然這不是 D7 的做法
D7 的做法是原生的將多個欄位組合, 而不只是 image 和 text
可以 image 和 email, options 等等
http://drupal.org/project/field_collection

而現在的 dev version 有一個 bug,
要支持 imagefield 便要使用以下的 patch
http://drupal.org/node/1187010#comment-4947330

操作上,
先到 structure define "field-collections"
便可以建立一個 "包含數個 field 的 field"
然後像一般的欄位到 content type 的頁面設定便可以
Widget 選 "embedded"

Drupal7 的 模版改變 Drupal7 theming changes

DrupalCon SF 之後, 有很多 video 和session 都放到網上了
花了幾天的時間看了些自己喜歡的, 例如 A peek at Drupal 7 theme system changes

翻譯一下 http://www.slideshare.net/pingv/grok-drupal-7-theming (不是全部的改變, 詳情參考 ref2)
1. Drupal 7 theme 需要有以下元素:

  • CSS file
  • image
  • template (*.tpl.php)
  • js
  • preprocess 和 process (new)
  • .info

2. 將 page.tpl.php 分成 html.tpl.php 和 page.tpl.php
html.tpl.php 會放 DOCTYPE 一類的 tag

3. node.tpl.php 需要用 <?php render($content['comments']); ?> 才會顯示留言 (D6是預設自動加上)

4. 新增 region.tpl.php

5. node-[contenttype].tpl.php 改成 node--[contenttype].tpl.php
單劃表示連接字, 例如 content type 為 "super story" 時, 便使用 node--super-stoty.tpl.php

ref1: A peek at Drupal 7 theme system changes http://pingv.com/blog/a-peek-at-drupal-7-theme-system-changes

ref2: Converting 6.x themes to 7.x http://drupal.org/update/theme/6/7