2011-04-26 60 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