2009-11-03 63 views
1

我有一個包含許多CCK字段的節點。我想隱藏來自匿名用戶的字段。我發現從http://www.lullabot.com/articles/modifying-forms-5-and-6大致有兩種方法。首先,我的代碼試圖theme_theme()以下hook_theme()影響節點的顯示順序

function ssaa_theme1(&$existing, $type, $theme, $path) { 
    return array(
     'volunteer_node_form' => array(
      'arguments' => array('form' => null), 
     ), 
    ); 
} 


function ssaa_volunteer_node_form($form) { 
    $out = ''; 
    if (user_is_anonymous()) { 
     unset($form['field_active']); 
    } 
    $out .= drupal_render($form); 
    return $out; 
} 

這個簡單的代碼工作以及我的預期,但生產奇怪的結果了。保存/預覽按鈕出現在窗體的頂部,我無法將它們移動到底部。起初,我懷疑drupal_render()函數,但它沒有對訂單做任何事情。當ssaa_volunteer_node_form()函數爲空時,它會產生相同的結果。

所以我嘗試了第二個選項,它使用了hook_form_alter()並且成功了。但我仍想弄清楚爲什麼第一種方法無法正常工作。我認爲這是更容易和輕鬆的方式來做我想做的事情。

任何想法?

回答

1

如果你只想拒絕這一個字段給用戶,它是有道理的form_alter它。否則,我也建議你使用內容權限。它可以讓您無需使用文本編輯器即可切換所有字段的設置。

CCK現場輸入表格不接受hook_form_alter()很好。可以說,它們在週期的後期插入到節點編輯表單中。

This example演示如何禁用CCK表單元素,它可以適應您的需要。

由於您有非常特殊的需求,您可能需要查看新的Field Permissions模塊。它仍在開發中(,我還沒有嘗試過),但它允許您選擇個別字段的內容權限。這可以防止您的權限屏幕變得混亂,並且可以防止所有新域默認爲無法訪問。

+0

哇,我不知道該字段權限模塊。聽起來像「編輯自己的字段權限」的一些好處似乎非常值得。 – theunraveler 2009-11-03 18:45:48

+0

使用您建議的字段權限模塊,它可以完美實現。 CCK字段的默認值也適用。我真的需要默認值工作。我試過了Content Permissions模塊,但是有太多複選框需要檢查(系統中有近20種內容類型和8種角色)非常感謝! – user201563 2009-11-04 01:34:23

0

我想你可以使用與CCK捆綁在一起的Content Permissions模塊來設置字段級權限。啓用該模塊後,所有字段都將顯示在「權限」區域中,並且您可以拒絕匿名用戶的權限。我認爲這將是一個更簡單的方法來實現這一點。

+0

我嘗試過的內容權限模塊,但我放棄了檢查數百雖然複選框。謝謝你的答案。 – user201563 2009-11-04 01:36:57

0

最近在Drupal 6中遇到同樣的問題,你的問題是有效的。

當我顯示$形式的對象(從的template.php)使用Devel的DSM()函數,我發現的按鈕被以某種方式示出的一個0.0111重量,浮子。

hook_theme(),然後hook_form()的template.php似乎行爲是錯誤的。 使用hook_form我沒有改變$ form對象,並且返回drupal_render($ form)保存/​​預覽按鈕位於頂部。

對於任何需要使用這些鉤子的人,還必須創建一個form_alter設置按鈕的權重。這抵消了錯誤,並再次讓你的按鈕到達底部。

$form['buttons']['#weight'] = 100; 

注:我不能設置權重,我hook_form()代碼,它必須是在form_alter