2011-03-12 7 views
2

아, 이건 아마 뭔가 간단 할 지 모르지만, 그것은 나를 미치게합니다. hook_nodeapi()를 사용하여 노드에 삽입하는 간단한 폼 (그냥 제출 버튼)이 있습니다. 그것은 제대로 삽입 가져옵니다, 그리고 내가 제출할 때 페이지가 새로 고침,하지만 그것은 결코 form_submit() 함수를 치고있다. 코드는 다음과 같습니다.Drupal 양식 제출 기능이 호출되지 않는 이유는 무엇입니까?

function fantasy_stocks_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { 
    $form = drupal_get_form('fantasy_stocks_buy_me_form', $node); 
    switch ($op) { 
    case 'view': 
     $node->content['body']['#value'] .= $form; 
     break; 
    } 
} 

function fantasy_stocks_buy_me_form(&$form_state, $node) { 
    $form['submit'] = array(
    '#type' => 'submit', 
    '#title' => t('Buy') . ' ' . $node->title, 
    '#description' => t('Add') . ' ' . $node->title . ' ' . t('to your stock portfolio.'), 
    '#value' => t('Buy') . ' ' . $node->title, 
    '#submit' => TRUE 
); 
    $form['node_added'] = array(
    '#type' => 'hidden', 
    '#value' => $node->nid 
); 
    $form['#submit'][] = 'fantasy_stocks_buy_me_form_submit'; 
    return $form; 
} 


function fantasy_stocks_buy_me_form_submit($form, &$form_state) { 
    $message = 'You have submitted the ' . $form_id . ' form which contains the following data:<pre>' . print_r($form_values,true) . '</pre>'; 
    drupal_set_message(t($message)); 
} 

제출 기능에 echo와 die()를 추가하려고 시도했지만 확실히 호출되지 않습니다. 또한 $ form [ '# submit'] 선언을 생략하려고했습니다. 기본값은 처리해야하지만 아무 소용이 없습니다. 나는 바보 같은 것을 놓치고 있어야한다는 것을 안다. 어떤 아이디어?

또한, 이상한 듯 한 가지 형태는 다음과 같은 태그로 렌더링됩니다 있다는 것입니다 :

<form action="/MLMBid/node/5" accept-charset="UTF-8" method="post" id="fantasy-stocks-buy-me-form-1"> 

은 "-1"양식 ID에 추가 정상이 가지고인가요?

답변

-1

양식 ID의 "-1"이 문제의 근원이라고 생각하는 경향이 있습니다. 그러나 "-1"뿐만 아니라 "_"대신 "-"로 렌더링되는 양식 ID는 나머지 코드에서 참조되는 것과 같습니다. 그것을 해결하면 문제가 해결되어야합니다.

불행히도, 나는 Drupal을 아직 사용하지 않았습니다 (Joomla 만). 나는 당신이 현재 가지고있는 것 대신에 폼 id가 렌더링되는 것과 일치하도록 코드를 변경하려고 시도 할 것입니다 (fantasy-stock-buy-me-form-1).

+1

함수 이름을 변경할 수 없습니다. 함수 이름에 대시가 잘못되었습니다. 드루팔 (Drupal은 폼을 렌더링 할 때 밑줄을 대시로 변환 한 다음 다시 함수를 호출하도록 변환합니다. 하지만 그래, "-1"이상한 ... 나는 그것이 왜 나타나는지 더 자세히 살펴볼 것이다. – SenorPuerco

+0

-1은 동일한 양식이 페이지에서 여러 번 렌더링 될 수있는 경우 고유 한 ID임을 보장합니다. –

+3

충분히 재미있어 답은 -1입니다. – B2F

5

마지막으로 알아 냈습니다. 제출 버튼을 생성 된 부분은 :

$form['submit'] = array(
    '#type' => 'submit', 
    '#title' => t('Buy') . ' ' . $node->title, 
    '#description' => t('Add') . ' ' . $node->title . ' ' . t('to your stock portfolio.'), 
    '#value' => t('Buy') . ' ' . $node->title, 
    '#submit' => TRUE 
); 

나는 튜토리얼에서이 부분을 복사, 분명히 선

'#submit' => TRUE 

는 없을 것이다. 그것은 TRUE라는 함수를 찾기 위해 Drupal을 시도한 폼 제출 핸들러를 오버라이드하고있었습니다. 어리석은 걸 알았어.

관련 문제