Drupal以编辑形式从url获取参数并填充表单

时间:2011-06-01 10:45:34

标签: php drupal forms

我有一张员工表,其中包含id,姓名,年龄和薪水等字段。

我在自定义模块中显示员工姓名列表,当我点击员工姓名时,我必须显示该员工的编辑表格。

为员工姓名提供了一个链接,如:

<a href='".$base_url."/my_module/edit/".$employee->id."'>

并将相应的菜单路径配置为:

$items['my_module/edit/%'] = array(
        'title' => t('My form'),
        'description' => t('Edit employee'),
        'page callback' => 'my_module_edit',
        'access arguments' => array('access content'),
        'access callback' => TRUE,        
        'type' => MENU_CALLBACK,
    );

当我点击第5个员工姓名时,网址将是: .... / my_module / edit / 5

所以现在我的问题是:

  1. 如何从 my_module_edit 函数中的网址获取该员工的ID(5)?
  2. 如何显示员工的编辑表单,填充字段(通过查询ID)?

3 个答案:

答案 0 :(得分:3)

对于问题2:你有点混淆了,你没有为表单创建一个自定义的“页面回调”菜单项,你应该使用'drupal_get_form'作为'page callback'和你的表单名称()函数(my_module_employee_form)作为“页面参数”。

function my_module_menu() {
  $items['my_module/employee/edit/%'] = array(
     'title' => t('Edit employee'),
     'page callback' => 'drupal_get_form',
     'page arguments' => array('my_module_employee_form', 3),
     'access arguments' => array('administer my_module'),
     'type' => MENU_CALLBACK,
   );
 }

function my_module_employee_form() {
  ... read database and generate form..
}

function my_module_employee_form_submit($form_id, &$form) {
  ... read form and update database ...
}

然后在函数my_module_employee_form()中生成表单并填充它,并在my_module_employee_form_submit()中读取值并将它们存储在数据库中。

答案 1 :(得分:1)

$request_parts = explode('/', $_SERVER['REQUEST_URI');
$employee_id = intval(array_pop($request_parts));

那是你的问题#1。不确定我理解#2

答案 2 :(得分:1)

对于第一个问题,您可以使用arg(0),arg(1),arg(2)等来获取传递给回调的参数...

<a href='".$base_url."/my_module/edit/".$employee->id."'>

对于这个href arg(0)=='my_module',arg(1)=='edit',arg(2)=='5',请查看arg()的文档。< / p>

您还可以通过访问$ _GET ['q']变量来解析自己的查询字符串。

对于第二个问题,如果您的员工表是Drupal表,您可以将链接作为Drupal节点的编辑链接,如href =“node / 5 / edit”。如果是自定义表格,则必须通过实施hook_form()

来创建自己的表单