2013-05-06 98 views
1

嗨,我是Drupal Noob,所以对我来说很简单。我已经创建了几个不同形式的自定义模块,但是我一直都在使用hook_form或者hook_output。我想知道我是否可以在同一个模块中使用两者。在同一个Drupal模块的挂钩内调用钩子

我有一个模块应该是第一个显示课程列表然后用户点击任何一个它应该为给定的课程ID生成一个表格。

我生成学生列表的方式是使用hook_output并生成列表。 其中发生这种情况的视图URL是这样的:? /drupal的/ Q =讲师/ evaluate_student/

和用于courseworks生成的列表是看起来这样:

<a href='?q=lecturers/evaluate_student/1/'>Evaluate: <b>Advanced Networking</b></a><br/> 

这实际上调用此相同的ID添加URL的额外参数(在本例中为/ 1 /)。

我取这个问题的方法是使用ARGS():

if (arg(2)) { 
     /* Get arguments from URL 
     */ 
     $coursework_id = arg(2); 

    } 

现在我想生成使用此ID的形式没有它重定向到另一个模块。我可以在这里创建另一个hook_form并且调用它,如果是的话我该怎么做?

由于提前, -D

+0

请注意,Drupal不使用任何[hook_output()](http://api.drupal.org/api/drupal/7/search/hook_output)。如果有这样一个钩子,那是从第三方模块中定义的。 – kiamlaluno 2013-05-07 06:56:40

回答

0

行,所以研究和解决身边玩耍一段时间后,一点都不复杂。

我首先创建一个hook_form:

function evalute_student_form($form, &$form_state){ 
    $form['coursework_description'] = array(
     '#type' => 'textarea', //you can find a list of available types in the form api 
     '#title' => 'Coursework Description:', 
     '#size' => 150, 
     '#maxlength' => 150, 
     '#required' => TRUE, //make this field required 
    ); 
    return $form; 

,然后我简单地加入这个方法,它是$形式输出通过使用该代码的返回:

if (arg(2)) { 
     /* Get arguments from URL and then assign the class to the user. 
     */ 
     $coursework_id = arg(2); 
     return evalute_student_form();   
    } 

希望其有用给某人。

+0

这不是[hook_form()](http://api.drupal.org/api/drupal/modules%21node%21node.api.php/function/hook_form/7)实现;它是一个表单构建器。 – kiamlaluno 2013-05-07 06:48:33