【问题标题】:how to populate text area with database value before form load in drupal 7?如何在 drupal 7 中加载表单之前使用数据库值填充文本区域?
【发布时间】:2012-03-21 12:29:42
【问题描述】:

我使用 hook_form_FORM_ID_alter( ) 函数来更改 menu_edit_menu 表单以添加一些字段。执行提交操作时,我已将这些字段的值存储在表中。我现在需要的是当再次加载特定的表单条目进行编辑时。在加载表单之前,应使用数据库中的数据填充这些字段。谁能告诉我这是怎么做到的。

我曾尝试使用 hook_validate ( ) 函数,但是在执行提交操作时调用该函数,这在这方面没有用。我必须在呈现表单之前执行数据库查询,以使用表中的数据填充文本字段。请向我提供一些关于如何实现这一点的见解。

我的 sql 选择查询也有问题/

    $query = db_select('menu_custom');
$query
->fields(array('menu_name','role1','role2','role3'))
->condition('check',1,'=')
->conditon('title',$form_state['values']['title'])
->execute();

foreach($query as $record)
{
    $mname = $result ->menu_name;
    $rl1 = $result -> role1;
    $rl2 = $result -> role2;
    $rl3 = $result -> role3;
    dpm($mname."  ".$rl1);

}

我收到错误消息,指出我的字段规范有误,但我无法找出问题所在。

【问题讨论】:

    标签: drupal drupal-7 drupal-modules


    【解决方案1】:

    评论有点太长了,我把它放在这里:

    您在查询中遇到的唯一错误是传递给fields() 函数的第一个参数必须是字段来自的表的名称/别名。所以你的查询应该是这样的:

    $query = db_select('menu_custom')
      ->fields('menu_custom', array('menu_name','role1','role2','role3'))
      ->condition('check',1,'=')
      ->conditon('title',$form_state['values']['title'])
      ->execute();
    

    【讨论】:

    • 我还有一个问题。如何在加载之前访问标题。当我不得不编辑表格时。标题字段的值设置为默认值,我需要获取该值以在查询中使用。我试图通过 $form_state['values']['title'] 访问它,但它没有帮助。你能告诉我我们如何获得这些表单数据吗?
    • 这真的取决于...提交表单时您将标题保存在数据库的哪个位置?
    • 存储的标题是menu_custom表。从结构->菜单选项编辑先前添加的菜单时。应该在加载edit_menu_edit表单之前提取标题,并在各自的文本字段中添加role1、role2和role3的值。
    • 加载时值将在 $form 中。我尝试通过 $form['title']['default_value'] 访问该值,但无法检索该值。
    【解决方案2】:

    您在表单函数中从数据库中获取数据,并将它们作为默认值

    $name = db_query(YOUR_SQL);
    $form['first_name'] = array(
      '#title' => t('First Name'),
      '#type' => 'textfield',
      '#default_value' => $name,
    );
    

    这是你的意思吗?

    【讨论】:

    • 我想尝试您的解决方案,但我的 SQL 查询出现问题。
    • @DrupalDeveloper 您的查询应该通过db_query,而不是db_select。我编辑了这个效果的答案
    • @Clive 我在问题中添加了 sql 语句。你能告诉我哪里出错了吗?
    • @Karel-Jan Misseghers 非常感谢。这帮助我解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多