2008年9月15日 星期一

在Drupal中, 如何建立一個View Field ?

在Drupal中, 如何建立一個View Field ?

  在 View 中, 我們可以選擇要顯示的欄位, 但有些資料欄位卻不在View Field中, 這時我們就必須自行增加兩個hook : 一是views_tables, 另一個是views_handler
views_tables - 是要讓Field選單中, 可以看得到
views_handler - 則是要傳回資料值, 以便顯示在View中

以下我們以Clone Field為例 (此程式參考來源 : http://drupaltaiwan.org/)

/*
* Views field for cloning. Adds a 'Clone' link field option similar to the node 'Edit' and 'Delete' fields.
*/
function clone_views_tables() {
$tables['clone'] = array(
'name' => 'node',
'provider' => 'internal', // won't show up in external list.
'fields' => array(
'clone' => array(
'name' => t('Clone: Clone link'),
'handler' => 'clone_views_handler_clone_link',
'notafield' => TRUE,
'option' => 'string',
'help' => t('Display a link to clone the node. Enter the text of this link into the option field; if blank the default "Clone" will be used.'),
),
),
);
return $tables;
}

/**
* display a link to clone a node with a destination return
*/
function clone_views_handler_clone_link($fieldinfo, $fielddata, $value, $data) {
global $user;

$access = (user_access('clone node') && clone_is_permitted($data->node_type) && node_access('create',$data->node_type));
if ($access) {
$link_text = $fielddata['options'] ? $fielddata['options'] : t('Clone');
return l($link_text, "node/$data->nid/clone", NULL, drupal_get_destination());
}
}

0 意見: