2013-04-11 108 views
0

我想在自定義模塊中註冊一個簡單表單的主題函數,但主題函數沒有被調用。我只是得到基本的形式。drupal 7表單主題函數不被稱爲

這裏是我的hook_theme():這種形式

function kss_membership_theme($existing, $type, $theme, $path){ 
    $items = array(); 
    $items['kss_membership_payment_form'] = array(
     'render element' => 'form', 
    ); 
    return $items; 
} 

/** 
* Returns the form for the second page of the payment process 
*/ 
function kss_membership_payment_form($form, &$form_state) { 
    $form['description'] = array(
    '#type' => 'item', 
    '#title' => t('We currently accept Paypal payments'), 
); 

    $form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Submit'), 
    '#submit' => array('kss_membership_payment_form_submit'), 
); 

    $form['#theme'] = array('theme_kss_membership_payment_form'); 
    return $form; 
} 

,這裏是主題功能:

function theme_kss_membership_payment_form($variables) { 
    // Isolate the form definition form the $variables array 
    $form = $variables['form']; 

    $output = '<h2>' . t('Please enter your information below') . '</h2>'; 
      $output .= '<div id="personal_details">'; 

    $output .= drupal_render($form['description']); 
    $output .= drupal_render($form['submit']); 
    // Additional template output goes here.... 
    $output .= '</div>'; 

    $output .= drupal_render_children($form); 
    return $output; 
} 

回答

2

您是非常接近的解決方案,只有有一個問題在那裏。

主題呼叫是錯誤

$形式[ '#主題'] =陣列( 'theme_kss_membership_payment_form');

您需要調用

$形式[ '#主題'] =陣列( 'kss_membership_payment_form');

之後您必須從admin => configuration => Performance => Clear Cache按鈕清除緩存。

/** 
* Returns the form for the second page of the payment process 
*/ 
function kss_membership_payment_form($form, &$form_state) { 
    $form['description'] = array(
    '#type' => 'item', 
    '#title' => t('We currently accept Paypal payments'), 
); 

    $form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Submit'), 
    '#submit' => array('kss_membership_payment_form_submit'), 
); 

    $form['#theme'] = array('kss_membership_payment_form'); 
    return $form; 
}