2010-10-23 86 views
0

我有這個代碼爲durpal搜索表單實現了hook_form_alter,並在那裏添加了幾個新元素。我也在上述表單的template.php中添加了主題覆蓋代碼。除此之外,我還在那裏傳遞表單元素。一切工作正常 - 增加了新元素,使用主題;但是,這是問題所在。當我嘗試使用drupal_render呈現每個表單元素時,它不會顯示任何內容。我已經檢查過$ form數組的內容,它具有所有必要的表單數據。這是除了我的代碼 -drupal_render不渲染表單元素

mymod.module

function mymod_form_alter(&$form, $form_state, $form_id) { 
    switch ($form_id) { 
     case 'search_theme_form':   
      $form['prop_type'] = array(
       '#type' => 'select', 
       '#default_value' => 'Selection A', 
       '#options' => array("Selection A","Selection B"), 
       '#attributes' => array('class'=>'Bold'),  
     ); 
     break; 
    } 
} 

的template.php -

function mytheme_theme() { 
    return array(
     'search_theme_form' => array(
      'arguments' => array('form' => NULL),  
      'template' => 'search_myblock_form',   
     ), 

    ); 

} 

而且也有一個奇怪的問題,這是中,devel的帝斯曼也說不清楚顯示$ form中的內容。我不得不使用print_r首先獲取字符串值並將其提供給dsm進行顯示。值得一提的是,在我的主題模板中,有這個變量($ search_form)和所有我的表單元素呈現。因爲我想用不同的方式來表達個人元素的主題,所以我不能使用它;我喜歡自己呈現個人元素。

+0

'dsm()'遵循權限。沒有「訪問開發信息」權限的用戶不會看到dsm()輸出。 – berkes 2010-10-25 09:37:35

+0

我以管理員身份登錄。所以訪問權不是問題。 – Andrew 2010-10-26 14:02:27

回答

0

hook_theme應該在你的模塊內,而不是template.php。

但似乎你並不需要form_alter等。 的template.php有沒有覆蓋這些主題功能則:

function MYTHEMENAME_search_theme_form($form) { 
    return "<h1>ceci nes't pas un form</h1>"; 
} 

然後刷新你的主題註冊表,你應該看到出現在形式的地方你的H1線。

+0

我沒有hook_theme在使用模板cuz的問題,我的模板也接收$ form數組。但是,當我嘗試呈現每個元素drupal_render時,它不顯示任何內容。我已經檢查過,$ form包含了我需要的所有元素。現在,我別無選擇,只能使用包含由搜索模塊本身創建的標記中包含渲染元素的$ search。 – Andrew 2010-10-26 14:06:12

+0

不會。你在template.php中的hook_theme有問題,因爲你的解決方案不起作用。根據你的問題:) – berkes 2010-10-27 12:39:24