【问题标题】:Drupal get parameters from url in edit form and populate the formDrupal 从编辑表单中的 url 获取参数并填充表单
【发布时间】:2011-06-01 10:45:34
【问题描述】:

我有一个员工表,其中包含 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 函数中的 url 获取员工的 ID (5)?
  2. 如何显示员工的编辑表单,填充字段(通过 id 查询)?

【问题讨论】:

    标签: php drupal forms


    【解决方案1】:

    对于问题 2:您有点搞混了,您没有为表单创建自定义“页面回调”菜单项,您应该使用“drupal_get_form”作为表单名称的“页面回调” () 函数 (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() 中读取值并将它们存储在数据库中。

    【讨论】:

    • 啊..奇迹..!效果很好。谢谢:)
    【解决方案2】:
    $request_parts = explode('/', $_SERVER['REQUEST_URI');
    $employee_id = intval(array_pop($request_parts));
    

    这是您的问题 #1。不确定我是否理解 #2

    【讨论】:

    • #2 是:我必须在编辑模式下显示员工添加表单。该表单具有字段 id、姓名、年龄和薪水。所以我必须用 id 查询员工表并获取值并用这些值填充表单。
    • 我想我没有足够的信息来回答 #2。或者我对 Drupal 的了解还不够。如果我知道数据库表结构,我可以向您展示 MySQL 的方法,但不确定“正确”的 Drupal 方法。
    【解决方案3】:

    对于您的第一个问题,您可以使用 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() 的文档。

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

    对于第二个问题,如果您的员工表是 Drupal 表,您可以将链接设为 Drupal 节点的编辑链接,例如 href="node/5/edit"。如果是自定义表格,则必须通过实现 hook_form() 来创建自己的表格

    【讨论】:

    • 感谢零页。 Myne 是一个自定义表,因此我实现了 hook_form() 并在该方法中返回了我的表单:return drupal_get_form('my_module_my_form'); 但是如何填充它?
    • 只需从您的自定义查询中填充它; $form['my_field'] = array( '#type' => 'textfield', '#title' => t('Some database field'), '#default_value' => 'some database value' );`
    • 您应该阅读此api.drupal.org/api/drupal/includes--form.inc/group/form_api/6,因为当您要将表单数据保存到自定义表中时,您还需要覆盖 hook_form_submit()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多