2010-07-20 3 views
3

패널에 모듈 양식을 포함하려고하는데 drupal_get_form()을 사용하여 시도했지만 올바르게 사용하고 있는지 확신 할 수 없습니다.drupal questions - 다른 모듈에서 양식을 인쇄하는 방법?

유기 그룹 모듈에는 og_broadcast_form을 렌더링하는 함수가 있습니다. og.module에 page_callback 내에서라고 :

// Broadcast tab on group node. 
    $items['node/%node/broadcast'] = array(
    'title' => 'Broadcast', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('og_broadcast_form', 1), 
    'access callback' => 'og_broadcast_access', 
    'access arguments' => array(1), 
    'type' => MENU_LOCAL_TASK, 
    'file' => 'og.pages.inc', 
    'weight' => 7 
); 

그리고 og.pages.inc에서

이 기능은 다음과 같습니다

:

function og_broadcast_form($form_state, $node) { 
    drupal_set_title(t('Send message to %group', array('%group' => $node->title))); 

    if (!empty($form_state['post'])) { 
    drupal_set_message(t('Your message will be sent to all members of this group.')); 
    } 

    $form['subject'] = array(
    '#type' => 'textfield', 
    '#title' => t('Subject'), 
    '#size' => 70, 
    '#maxlength' => 250, 
    '#description' => t('Enter a subject for your message.'), 
    '#required' => TRUE, 
); 
    $form['body'] = array(
    '#type' => 'textarea', 
    '#title' => t('Body'), 
    '#rows' => 5, 
    '#cols' => 90, 
    '#description' => t('Enter a body for your message.'), 
    '#required' => TRUE 
); 
    $form['send'] = array('#type' => 'submit', '#value' => t('Send message')); 
    $form['gid'] = array('#type' => 'value', '#value' => $node->nid); 
    return $form; 
} 

나는 drupal_get_form의 변화의 숫자를 시도했습니다

print drupal_get_form('og_broadcast_form', NULL, arg(1)); //where arg 1 is the node id from the url 
print drupal_get_form('og_broadcast_form'); 
print drupal_get_form('og_broadcast_form', &$form_state, arg(1)); 
print drupal_get_form('og_broadcast_form', $n); //where $n is node_load(arg(1)); 
print drupal_get_form('og_broadcast_form', &$form_state, $n); 

기타 등등 ... 내가 여기에서하려고하는 것을 성취 할 수있는 방법이 있습니까?

답변

0

drupal_get_form()은 하나의 인수 인 $ form_id 만 허용합니다.

http://api.drupal.org/api/function/drupal_get_form/6

hook_form_alter()var_dump($form_id)를 실행합니다. 그러면 $form_id이 전달되고 drupal_get_form()에 전달하면 렌더링 된 양식이 반환됩니다.

+0

고마워요,하지만 그걸 시도해 보았습니다 ... 제가 목록에 두 번째로 있는데 양식을 전혀 렌더링하지 않았습니까? – Dashiell0415

+0

그건 맞지 않아요. 'drupal_get_form()'은 둘 이상의 인수를 허용합니다. 매개 변수에 대한 설명을 보려면 "... ... 추가 폼 인수는 고유 폼 생성자 함수를 포함하여 drupal_get_form()이 호출하는 함수에 전달됩니다. 예를 들어 node_edit 양식에서는 노드 객체가 여기에 전달되어야합니다 호출 될 때. ", 매개 변수'$ form_id'의 설명 바로 뒤에. – kiamlaluno

+0

왜 arg 목록에 포함시키지 않겠습니까? 내게로 날아 갔다. – Kevin

2

drupal_get_form에 함수의 이름이 첫 번째 인수로 주어지면 form_id와 $ form 배열을 생성하기 위해 호출 할 함수가됩니다.

기능 코드의 3 행에 $args = func_get_args();이 있습니다. 이것은 drupal_get_form이 양식 작성 기능에 전달할 수있는 추가 인수를 모두 수집하는 데 사용됩니다.

drupal_get_form('og_broadcast_form', node_load(arg(1)));을 사용해야합니다.

return이 아닌 print을 사용해야합니까? 나는 최근에 그들이 theming system에서 매우 다른 것들을한다는 것을 배웠다. 이 방법으로 drupal_get_form을 사용하여 블록의 내용을 성공적으로 채 웠지만 어떤 시점에서도 직접 화면에 인쇄하지 않았습니다.

EDIT : 메뉴 경로의 % node가 호출되는 함수에 node_load (arg (1))를 전달하기 위해 와일드 카드 로더를 사용하기 때문에 전체 노드 객체 및 nid가 아닙니다.

4

참고하시기 바랍니다. 문제는 다른 모듈 포함 파일에있는 양식을로드하려고한다는 것입니다. 기능은 og.pages.inc에 위치하고 있으며 당신에게 전화를해야합니다 : 양식을 잡아 전에이 작업을 수행해야

module_load_include('inc', 'og', 'og.pages'); 

.

1

drupal_get_form이 양식을 가져옵니다. 당신은 drupal_render (drupal_get_form ('whatever'))))))를 인쇄 해 보았습니까?

관련 문제