2011-04-18 34 views
1

我想知道如何限制照片的數量在我的用戶的畫廊類型的值。更改字段的每個角色值的數量

我想有最多10張照片基本的用戶,以及30成爲VIP用戶。

是否有機會由Drupal的選項,或者我應該重寫一些JavaScript製作的?

感謝您的幫助。

回答

1

這繼續對Jame的使用hook_form_alter()的建議。我之前需要這樣的解決方案,所以我被迫試一試。這並沒有經過充分測試,但它確實有效,可以讓您控制要顯示的上傳字段的數量。我在D6和CCK上將圖像字段限制設置爲10來使用它。

美中不足的是,雖然CCK最多可顯示10個上傳域,但是當你把它設置爲無限制,則顯示1場,然後使用「添加其他」按鈕。所以,如果你使用10,那麼你可以限制在下面,但是如果你想從30到10,你需要一個不同的解決方案。

對不起它不是一個確切的解決方案,但它可能讓你有點接近。此代碼通過編程將圖像字段限制爲10,降至4。

function mymodule_form_alter(&$form, &$form_state, $form_id) { 
    if ($form_id == 'mycontenttype_node_form') { 

    // run some logic to figure out how many uploads, and set it here 
    $number_of_uploads = 4; 

    // not sure if this does anything, but it is the part of the field that 
    // references the upload limit. it does not automatically add or remove 
    // fields though 
    $form['#field_info']['field_myimagefield']['multiple'] = $number_of_uploads; 

    // just an increment var 
    $i = 1; 

    // we have to unset the fields from here 
    foreach ($form['field_myimagefield'] as $key => $value) { 
     // check for is_numeric because some are property keys starting with # 
     if (is_numeric($key)) { 
     if ($i > $number_of_uploads) { 
      unset($form['field_myimagefield'][$key]); 
     } 

     $i++; 
     } 
    } 
    } 
} 

讓我們知道你是否走這條路。我現在沒有時間進行全面測試。

0

做這樣的事情會創建兩個不同的畫廊內容類型的最簡單的方法,允許用戶基本允許的10張照片的類型,以及VIP用戶,允許對30

然而類型,這每當有人「升級」時都會產生問題。然後他們可以創建一個新的畫廊,但他們需要重新上傳所有30張照片。

如果網站不高容量,你可以簡單地通知你會手動移動自己的照片爲他們的用戶。

當然,這是一個很多關於你的工作,但它會饒你不必創建一個小的自定義模塊,如果你還沒有準備好走這條路(但如果你知道PHP,它更容易比聽起來好)。

另一種選擇是使用Drupal的hook_form_alter()hook_nodeapi()的組合 - 這是假設你使用CCK,或者你使用,無論畫廊模塊在一個表格中的所有上傳域 - hook_form_alter()會檢查你的用戶的角色,並在不處於vip角色的情況下將表單從30張縮減爲10張照片;和hook_nodeapi(),在檢查畫廊節點所有者的角色ID後,將只顯示前10張照片,而不是30張。這將爲您節省大量時間,但需要爲此創建一個小模塊。

如果不是所有的上傳域是一個形式,你可以隨時檢查,以查看用戶曾經多少圖片已上傳針對自己的角色,然後有條件地顯示了添加新的圖像控件。有很多種方法可以根據不同的情況做到這一點......它可以像將角色名稱添加到身體類一樣簡單,然後使用CSS來擺脫不需要的元素(如果你不太挑剔關於人們「侵入」HTML來添加他們的圖片,這很可能很少發生),或者編輯您使用的任何模塊的模板代碼。

+0

你確定「其他選項」可以工作嗎?即你做到了嗎?這絕對是最乾淨的選擇。如果您有代碼示例,請顯示它。我嘗試使用hook_form_alter來做類似的事情,但無法使它工作。 – Coder1 2011-04-18 18:19:21

+0

不幸的是我沒有任何代碼顯示。我已經使用了hook_form_alter()很多,使用它有時很痛苦 - 尤其是當你試圖與cck結合使用時。如果你在cck中使用它,你可能需要改變你的模塊的權重,以便在cck之後運行,因爲cck將會修改表單本身。 – James 2011-04-18 18:24:07

+0

我用hook_form_alter()和CCK很多。如果您不確定,我會從您的答案中刪除該建議,因爲我認爲這並不那麼容易,使您的答案不準確。這是來自實際嘗試過的人。需求並不那麼重要,所以我沒有去追求它。 – Coder1 2011-04-18 18:38:25