2011-04-26 46 views
1

嘗試將特定內容類型的節點/添加表單更改爲多步表單。Drupal多步驟節點表單預防保存如果不在最後一步

(drupal6,CCK開發3倍(用於多組))

我不能換我的頭周圍就是如何防止形式從第1步的提交和轉型實際上是創建一個節點到第2步。

沒有可能性步驟是2現在,但我無法弄清楚如何防止保存。

我曾嘗試以下:

把$形式[「#提交」] =陣列(),然後加入我的[「#submit」]處理器(這不起作用,它仍然會保存)

也嘗試過只是空白返回而已,但仍然導致節點被保存。

* HOOK FORM ALTER */ 
    function armormod_form_alter(&$form, $form_state, $form_id) { 
    //print_r($form); 
    //print_r($form_state); 
    //print_r($form_id); 

    if($form_id = "seed_node_form") { 

    //set the default step 
    if(!isSet($form_state["storage"]["step"])) { 
    $form_state["storage"]["step"] = 1; 
    } 

    // Add an after_build function to process when everything's complete. 
    $form['#after_build'][] = 'armormod_after_build'; 
    /* clear the submit (this doesn't work) 
     Normally calls menu_node_form_submit and then upload_node_form_submit 
    */ 
    //$form["#submit"] = array(); 
    $form["#submit"][] = "armormod_submit"; 
    $form["#validate"][] = "armormod_validate"; 

    } 


    } 

    function armormod_submit($form, &$form_state) { 

if($form["form_id"]["#value"] == "seed_node_form") { 
    if($form_state["storage"]["step"] < 2) { 
     drupal_set_message("Form Step:".$form_state["storage"]["step"]); 
     return; 
    } 
    } else { 

    return $form; 
    } 

    } 

    function armormod_validate($form, &$form_state) { 

if($form["form_id"]["#value"] == "seed_node_form") { 
    drupal_set_message(t("Validation Called"), "status"); 
    return; 
} else { 

    return $form; 
} 

    } 

    /* AFTER BUILD LETS US MODIFY CCK FORM ELEMENTS */ 

    function armormod_after_build($form, &$form_state) { 

    if($form["form_id"]["#value"] == "seed_node_form") { 

    if($form_state["storage"]["step"] == 2) { 
     drupal_set_message(t("Step 2 Build Called"), "status"); 
     $form["group_statistics"]["#access"] = 1; 
     $form["buttons"]["submit"]["#value"] = "Save"; 

    } else { 
     drupal_set_message(t("After Build Called"), "status"); 

     //hide statistics group 
     $form["group_statistics"]["#access"] = false; 
     $form["buttons"]["submit"]["#value"] = "Next Step"; 
     unset($form["buttons"]["preview"]); 
     //print_r($form); 
    } 
} 
return $form; 

}

回答

2

嘗試增加具有自己獨立的提交按鈕提交處理程序「下一步」功能。

$form['button']['next'] = array(
    '#type' => 'submit', 
    '#value' => t('Next Step'), 
    '#submit' => array('armormod_next_step_submit'), 
); 

function armormod_next_step_submit($form, &$form_state) { 
    // Do your Next Step stuff here 
} 
0

沒有爲一個模塊,除非你真的想開發自己的解決方案,我推薦你使用Multistep模塊。關於此模塊的更多詳細信息(來自其項目頁面):

Multistep向內容類型編輯表單添加了多步驟功能。它通過爲內容類型中的每個字段組分配一個步驟編號並隱藏不屬於當前步驟的所有組來完成。然後用戶可以使用不同的提交按鈕,這些按鈕將重定向到上一個,下一個或當前步驟。

該模塊還爲每個內容類型提供一個塊,其中包含該表單中不同組的菜單和進度條。這提供了一種簡單的方法,可以在整個表單中跳到不同的步驟,而無需一個接一個地執行,並通過表單跟蹤您的進度。

+0

該模塊不支持使用cck的多組,也有一些字段需要在第一步中使用,以便在第二步中進行下拉值等。 – merlincam 2011-04-26 13:56:09