2013-09-03 3 views
0

사용자 정의 모듈에서 hook_menu에 정의 된 페이지를 가지려고합니다.이 양식은 양식을 수정하여 특정 내용 유형에 대한 추가 양식을 표시합니다.새 페이지에서 Drupal의 노드 양식 사용

지금까지는 코드가 설정되어있는 기본값 (예 : 사용자가 양식에 입력하는 항목을 선택하지 않음)만으로 새 노드를 저장할 수 있습니다. 내가 확인한 $form_state['input'] 입력 된 값이 포함되어 있지만 $form_state['values'] 않습니다, 그래서 새 노드가 잘못 저장됩니다 가져옵니다.

function mymodule_menu() { 
    return array(
    'admin/content/myadd/%' => array(
     'title' => 'my custom add page', 
     'page callback' => 'mymodule_node_add', 
     'page arguments' => array(3), 
     'access callback' => TRUE, 
     'type' => MENU_CALLBACK, 
    ), 
); 
} 

function mymodule_node_add() { 
    module_load_include('inc', 'node', 'node.pages'); 

    //I'm doing a print here instead of returning because I'm calling this page 
    //in an AJAX popup, so I don't want the whole page to output, only the form. 
    print render(drupal_get_form('mymodule_node_add_form')); 
} 

function mymodule_node_add_form($form, &$form_state) { 
    if (!isset($form_state['node']) { 
    global $user; 
    $node = (object) array(
     'uid' => $user->uid, 
     'type' => 'mycontenttype', 
     'language' => LANGUAGE_NONE, 
    ); 

    //this is setting a default value 
    $node->myfield = array(LANGUAGE_NONE => array(array('value' => arg(3)))); 

    $form_state['build_info']['args'] = array($node); 

    $form = drupal_build_form('mycontenttype_node_form', $form_state); 
    $form['actions']['submit']['#submit'][0] = 'mymodule_node_add_form_submit'; 
    //there's a lot more customization of the form here, like adding fields, etc. 
    } 

    return $form; 
} 

function mymodule_node_add_form_submit($form, &$form_state) { 
    //here's where $form_state['input'] is correct but $form_state['values'] isn't. 

    $node = node_form_submit_build_node($form, $form_state); 
    node_save($node); 
    $form_state['values']['nid'] = $node->nid; 
    $form_state['nid'] = $node->nid; 
    $form_state['redirect'] = 'some/other/page'; 
} 

내가 잘못 여기서 뭔가를하고있는 중이 야 : 그래서,

여기에 관련 코드는? 양식 ID가 잘못 될까봐 걱정해야합니까? (내 양식의 ID는 mymodule_node_add_form이지만 실제 양식은 mycontenttype_node_form 일 수 있습니다.)이 영향을 받습니까?

+0

drupal이 노드 양식을 만들거나 제출시 노드를 만드는 사용자 지정 양식을 표시하겠습니까? – D34dman

+0

내 자신의 양식을 원하지만 drupal의 양식을 기반으로합니다. 또는 드루팔 (Drupal)은 새 버튼을 추가하고 제출 버튼의 핸들러를 변경하는 등의 수정을가했습니다. 어쨌든 괜찮습니다. – cambraca

답변

0

hook_form_alter() (api.drupal.org 참조)이 필요합니다. 기존 콘텐츠 형식의 양식을 사용하고 hook_form_alter()로 간단히 변경하려고합니다. 또한 먼저 표준이 아닌 AJAX 페이지로 작업하려고 시도하므로 dpm() 및 기타 디버깅 기술의 모든 이점을 얻을 수 있습니다. 당신이 그것을 단단히 가지고 있다면, AJAX 기술을 이용하도록 수정하십시오.

관련 문제