2010-07-31 58 views
4

我沒有經驗的PHP。我遵循幾個教程,使用template.php中的主題方法修改我的Drupal表單。修改Drupal表單字段 - [#weight]不被尊重的數組?

由於某些原因,字段的[#weight]屬性不符合其值。我想將Subject字段[subject]上的Category字段[cid]移動。這些是代碼行我用:

$form['cid']['#weight'] = 0.003; 
$form['subject']['#weight'] = 0.004; 

當我打印我的陣列來查看我看到的值發生了變化,但是當我渲染表單沒有更改。每次修改後,我已經清除了性能緩存。

如果你有興趣,這裏是我的印刷陣列的一個片段:

[subject] => Array 
     (
      [#type] => textfield 
      [#title] => Subject 
      [#maxlength] => 255 
      [#required] => 1 
      [#post] => Array 
       (
       ) 

      [#programmed] => 
      [#tree] => 
      [#parents] => Array 
       (
        [0] => subject 
       ) 

      [#array_parents] => Array 
       (
        [0] => subject 
       ) 

      [#weight] => 0.004 
      [#processed] => 1 
      [#description] => 
      [#attributes] => Array 
       (
       ) 

      [#input] => 1 
      [#size] => 60 
      [#autocomplete_path] => 
      [#process] => Array 
       (
        [0] => form_expand_ahah 
       ) 

      [#name] => subject 
      [#id] => edit-subject 
      [#value] => 
      [#defaults_loaded] => 1 
      [#sorted] => 1 
     ) 

    [cid] => Array 
     (
      [#type] => select 
      [#title] => Category 
      [#default_value] => 1 
      [#options] => Array 
       (
        [1] => General Enquiries 
        [2] => Support 
       ) 

      [#required] => 1 
      [#post] => Array 
       (
       ) 

      [#programmed] => 
      [#tree] => 
      [#parents] => Array 
       (
        [0] => cid 
       ) 

      [#array_parents] => Array 
       (
        [0] => cid 
       ) 

      [#weight] => 0.003 
      [#processed] => 1 
      [#description] => 
      [#attributes] => Array 
       (
       ) 

      [#input] => 1 
      [#size] => 0 
      [#multiple] => 
      [#process] => Array 
       (
        [0] => form_expand_ahah 
       ) 

      [#name] => cid 
      [#id] => edit-cid 
      [#value] => 1 
      [#defaults_loaded] => 1 
      [#sorted] => 1 
     ) 

大加讚賞,

克里斯

回答

9

您通常看到的節點形式的行爲被啓用時,CCK。這是因爲CCK覆蓋重量與自己訂購系統配置的默認和CCK領域轉到內容管理 - >內容類型 - >[內容類型] - >管理領域

當然,如果您禁用CCK(可能不是一個選項),您的#weight值將被尊重。

有一點要注意的是,儘管Forms API允許使用小數點#weight,但最好使用整數。


編輯

如果你想限制CCK禮物內工作,自定義模塊中,你需要實現一個#pre_render處理CCK塗改後,將改變表單元素的權重其中:

function mymodule_form_alter(&$form, &$form_state, $form_id) { 
    $form['#pre_render'][] = 'mymodule_form_alter_weight'; 
} 

function mymodule_form_alter_weight($elements) { 
    $elements['cid']['#weight'] = 0.003; 
    $elements['subject']['#weight'] = 0.004; 

    return $elements; 
} 

的問題是,你不知道的權重值CCK已經用於其他形式的元素,所以當你訂購的問題之前CID,這兩個領域可能會出現在頁面上所有其他字段的中間,而不是原來的位置。

當談到體重時,CCK迫使你進入角落。正確的是,Drupal/CCK的方式來處理表格排序是尊重由管理員做出的選擇上內容管理 - >內容類型 - >[內容類型] - >管理領域

如果您有自定義表單元素,您可以告訴CCK關於它的信息,以便它顯示在中通過執行hook_content_extra_fields()來管理字段。繼續上面的代碼:

function mymodule_content_extra_fields() { 
    $extras['mymodule'] = array(// Name of field 
    'label' => t('Mymodule'), 
    'description' => t('Mymodule field'), 
    'weight' => 10, // The default weight, can be overriden on Manage Fields 
); 

    return $extras; 
} 
+0

這是有道理的。那麼有沒有辦法解決這個問題?我只需要一個例外就是聯繫表單。我知道我可以主題它,但有沒有編碼修復? – 2010-07-31 10:13:43

+0

@克里斯,是的,沒有。我已經用更多信息和一些可能的解決方案更新了我的答案。 – 2010-07-31 10:38:15

+0

感謝您的解決方案。我瞭解CCK現在如何處理表單字段。我想如果我有一個自定義窗體,那麼我會走這條路線,但因爲我只需要重新排列整個站點範圍內的一個[cid]字段,我只需要使用CSS就可以了。我會記下您的解決方案以備將來參考。非常感謝! – 2010-07-31 10:46:37