Drupal表单提交处理程序不起作用,但为什么?

时间:2016-02-17 04:18:47

标签: drupal-7

为什么我的表单提交时我的提交处理程序没有被调用?从页面模板中调用以下函数...在引导模式窗口中......所以在页面加载时加载模态。我有一种感觉条件是干扰调用提交处理程序或我没有返回什么?此代码位于表单的模块中。我正在使用默认的提交处理程序。

function winner_modal_form_communication($node) {

    if ($_SERVER['REQUEST_METHOD'] != 'POST') {     

我测试是否已经发布,否则从一个字段中减去两个日期,因为它会被调用两次(一次加载然后一次发布)。如果它已经发布(因为那意味着他们填写了一张获奖表格),我会打印出确认信息。

        // WINNING DATES

        if (!empty($node->field_win_dates{'und'}{0}{'value'})) {

            $winDatesString = $node->field_win_dates{'und'}{0}{'value'};

            $winDatesArray = explode(", ", $winDatesString);                        

        }

        // TODAYS DATE

        $todaysDatePST = date("Y-m-d H:i:s");                                       


        // EVENT DATES

        $eventDateUTC = $node->field_date{'und'}{0}{'value'};                       

        $eventDateObject = new DateTime($eventDateUTC, new DateTimeZone('UTC'));    

        $eventDateObject->setTimezone(new DateTimeZone('America/Los_Angeles'));     

        $eventDatePST = $eventDateObject->format('Y-m-d H:i:s');                    

我只是设置一些变量......然后是一些条件。

        // EXPIRED EVENT

        if ($todaysDatePST > $eventDatePST) {

            print "Sorry, this event has expired.<br /><button type='button' class='btn btn-default' data-dismiss='modal'>Continue</button>";

        }

        // WINNER

        else if (($todaysDatePST > $winDatesArray[0]) && (!empty($winDatesString)))  {


            print "You've just won<br />TWO FREE TICKETS<br />to see " . $node->title . "!";


            $form = drupal_get_form('winner_modal_form');


            print drupal_render($form);


            unset($winDatesArray[0]);                                                       


            $newWinningDatesString = implode(", ",$winDatesArray);                           


            $node->field_win_dates{'und'}{0}{'value'} = $newWinningDatesString;             


            node_save($node);


        }


        // NO WINNER

        else {

            print "You didn't win tickets to " . $node->title. ", but you can still learn more by pressing the continue button.";

            print "<br /><button type='button' class='btn btn-default' data-dismiss='modal'>Continue</button>";


        }


    }


    // WINNER CONFIRMATION 

    else {


        print "Thank you! This is the confirmation modal window. That's right, you were the winner!<br /><button type='button' class='btn btn-default' data-dismiss='modal'>Continue</button>"; 


    }


}

如果删除上述条件,则提交处理程序可以正常工作。

function winner_modal_form_submit($form, &$form_state) {

    dpm("It worked!");

}

我做错了什么?我将非常感谢任何见解(我是编程新手)。

2 个答案:

答案 0 :(得分:0)

尝试使用方括号而不是花括号。例如:$ node-&gt; field_win_dates [&#39; und&#39;] [0] [&#39;值&#39;]。

答案 1 :(得分:0)

在Drupal中,按 Drupal asks进行操作。

如果您需要从表单中获取数据,只需使用* _validate和* _submit函数。

无需处理$ _SERVER [&#39; REQUEST_METHOD&#39;]。