2012-11-06 148 views
0

我想知道哪個是在頁面上顯示錶單的最佳方式(例如:vip用戶的註冊表單...而不是塊而是作爲主要內容) 。Drupal 7主題:hook_theme或drupal_get_form

的user.module 方式在user_menu(* hook_menu *):

$items['vip/register'] = array(
    'title' => 'Create new vip account', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('vip_register_form'), 
    'access callback' => 'user_register_access', 
    'type' => MENU_LOCAL_TASK, 
); 

或通過use_theme創建一個主題(* hook_theme *)(虛構的):

$items['vip/register'] = array(
    'title' => 'Create new vip account', 
    'page callback' => 'theme', 
    'page arguments' => array('vip_register'), 
    'access callback' => 'user_register_access', 
    'type' => MENU_LOCAL_TASK, 
); 

function user_theme() { 
    return array(
    'vip_register' => array(
    ) 
); 
} 

function theme_vip_register(){ 
    return drupal_get_form('vip_register_form'); 
} 

我因爲設計師之後會進行圖形整合,所以對於主題目的感到很疑惑。

謝謝你的建議。

+0

什麼問題? –

+0

這是關於最佳做法,但它非常具體,這是真的。最後,設計師更喜歡使用已聲明的模板,並且主題函數返回渲染數組而不是渲染。 – pinkvoid

回答

1

這不是一個實際的答案,但我不太確定你的問題在第一個地方。 Drupal海關#1:永遠不要核心!

作爲它的名字,主題功能只是主題東西。所以你需要首先建立的表單。

$items['vip/register'] = array(
    'title' => 'Create new vip account', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('vip_register_form'), 
    'access callback' => 'user_register_access', 
    'type' => MENU_LOCAL_TASK, 
); 

當用戶訪問頁面example.com/vip/register,drupal_get_form功能與參數vip_register_form調用。

所以現在你需要定義一個函數來返回這個(VIP用戶註冊)表單。誰打開VIP註冊頁面

function vip_register_form($form, &$form_state){ 
    ..your FAPI stuff here. 
    return $form; 
} 

現在,用戶將看到這種形式常規形式,而不是。即使密碼和用戶名字段也不可用,除非您添加它們。如果你想改變現有的形式,只是菜單鉤複製到一個新的路徑:

$user_menu_routers = user_menu(); 
$items['vip/register'] = $user_menu_routers['user/register']; 

現在你可以在貴賓改變你的表格/註冊使用頁面(這是一樣的普通用戶註冊頁面) form_alter鉤子。您可以手動主題表單,而不會影響現有的表單。