Drupal 7 field.tpl.php

Fields 是其中一個 Drupal 7 最重要的改變
Title, body, image 都是 fields
可以想像為將 cck 的 "Manage Fields" 都變為 Drupal 核心的一部份
而且 node.tpl.php 之下還有一個 field.tpl.php
可以為某 field 獨立設定輸出 html

field.tpl.php 的原型可以在 modules/field/theme 內找到
一如 node.tpl.phph, field.tpl.php 也有多個 template suggestions
例如

<?php
/*
field-name-[field_name]
field-name-title
field-name-field-image
*/
?>

要留意, 如果你的 field 名為 field_image
templates 的名字應為 field-name-field-image
將 "underscore" 改為 "hypen"

另外, field.tpl.php 在一個 field.tpl.php 處理欄位多值
你可以看到有一個 foreach 的迴圈
外包了一個 field-items 的 class, label 等等

fields.tpl.php 令開發者多了一層的控制
而且可以統一 fields 在不同時候不同地方的顯示樣式
如果覺得預設加入了太多不需要的 html 的話
也只需將一個精簡的 field.tpl.php 移到 theme folder 便可以了

templates 內的欄位值 field_get_items()

打開 node.tpl.php 的時候你便可以發現,
Drupal 7 的多語言支持轉移到以欄位為基礎
在預設的情況之下欄位值都放在 "und" 之內
代表沒有指定的語言
但如果代碼直接使用 und 的話
之後打開多語言設定便會令 templates 出現錯誤
所以便要使用 field_get_items() 來獲得正確的語言欄位值了

ref:
http://www.davereid.net/content/hlkd7fotw-field-get-items

Rules 7.x 模組 201 - Component, Scheduling tasks

Component 由多個 rules 的組合而成的
目的是提供一組需要被多個 rules 重覆使用的行動
例如使用相同的條件或 rules, 或者在自定義的模組中使用它們
你也可以匯出 Component

Rules 的管理頁面的下一個 tab 就是 Component 的管理頁面
按 Add a new Component 便會看到以下的選項
Condition set (OR): 條件的組合 (set of conditions), 只需要其中一個條件符合便執行
Condition set (AND): 條件的組合, 需要全部條件都符合才執行
Action set: 行動組合 (set of actions), 順序一個一個的執行
Rule: 包含條件和行動的組合, 但沒有 Events 的設定
Rule set: 多個 rules的組合, 順序一個一個的執行, 同樣沒有 Events 的設定. 在需要執行多個行動的時候很有用

其中最常用的是 Rule, 因為 rule 的功能設定上可以完成 Conditions set 的功能

Scheduling task 則更容易明白, 「在特定的時間執行特定的 component」
例如在三月五日將 nid 為 10 的 node 設定為 unpublish:
「設定為 unpublish」是一個簡單的 action set
建立一個 actions set

命名為 「Save as unpublished」
Variables 中, 因為我們將會傳入一個 nid 10, 所以選 node,

Target Name 是這個 node 的變數命名, 例如「Target node」
按 Save, 便會看到熟悉的 Actions 畫面
同樣在 Add Actions 之後, 便會出現先前設定的變數命名 Target node,

選中並儲存便完成 Components 的設定部份了

返回 Components 頁面便會出現「schedule」的選項

點撃進入設定頁面, 可以設定時間

下面還有 Target node 的 data selector
因為設定是 nid 10, 不需要從其他地方尋找 nid
所以輸換為 Direct input
再在 Node identifier 輸入 10 就可以了

最後可以在 schedule tab 查看已經排程的 tasks

6.x 到 7.x : hook_theme Drupal 7.x

等了一年多的時間, 終於有機會和時間可以正式使用 Drupal 7.x 作開發
所以都會集中一些 Drupal 7.x 和之前的不同之處
希望幫到大家, 也幫到自己

專用 tags: transition-7.x

hook_theme() 是一個很常用的 hook 之一
theme('image') 會調用 hook_theme()
以下的例子是自定義一個 theme 函數
輸出的是一整頁的 google map, 所以便使用一個新的函數
D7 的 函數參數只有兩個, hook 和 variables:

<?php
theme
(
 
'links',
  array(
'link' => $links, 'attributes' => array('class' => 'links'))
);
?>

D6:

<?php
theme
(
 
'links',
 
$links,
  array(
'class' => 'links')
);
?>

這樣便以後都不需要記住參數的順序了,
「究竟是 $tags 還是 $elements 是第一個參數」的問題不會再出現
又可以參考 theme_pager(): http://api.drupal.org/api/drupal/includes%21pager.inc/function/theme_pag...

完整的 code 例子:

<?php
/**
 * Drupal 6.x theme('HOOK', $var1, $var2, $var3)
 **/
function MY_MODULE_example_function() {
  return
theme('map_search', $results->response);
}
//hook_theme()
function MY_MODULE_theme($existing, $type, $theme, $path) {
  return array(
   
'map_search' => array(
     
'arguments' => array('response' => NULL),
    ),
  );
}
//define the theme function
function theme_map_search($variables = '') {
  return
kprint_r($variables['response'], true);
}
?>

<?php
/**
 * Drupal 7.x theme('HOOK', array('key'=>$var1, 'key2'=>$var2, 'key3'=>$var3)
 **/
function MY_MODULE_example_function() {
  return
theme('map_search', array('response' => $results->response));
}

//hook_theme()
function MY_MODULE_theme($existing, $type, $theme, $path) {
  return array(
   
'map_search' => array(
//D7 use variables as key instead of arguments
     
'variables' => array('response' => NULL),
    ),
  );
}
//define the theme function
function theme_map_search($variables = '') {
  return
kprint_r($variables['response'], true);
}
?>

My little thoughts on features version update options

New Drush options:
incr version: --version-increment
set version directly: --version-set=7.x-1.0-dev

http://drupal.org/node/1272586#comment-5646288

Pages

Google