Drupal 7 - 使用数据库中的图像填充自定义表单图像字段

时间:2013-09-15 03:57:18

标签: drupal drupal-7 nodes form-api

我有一个自定义表单模块,其字段类型为“managed_file”,数据库中的条目指向图像的文件路径。

我想在首次显示表单时将此图像预先加载到“managed_file”字段中。

我尝试将#default_value分配给图片的文件路径,但这没有任何作用。

这样做的最佳方式是什么?

$result = db_query('SELECT n.companyName, n.billingEmail, n.leadEmail, n.contactEmail, n.contactEmail,
                        n.url, n.description, n.companyLogo, n.promoVideoUrl
        FROM {leads_client} n WHERE n.clientId = :uid', array(':uid' => $GLOBALS['user']->uid));    

    $row = $result->fetchAssoc();


$form['company_logo'] = array(
  '#type' => 'managed_file',
  '#title' => t('Company Logo'),
  '#description' => t('Allowed extensions: gif png jpg jpeg'),
  '#upload_location' => 'public://uploads/',
  '#default_value' => $row['companyLogo'],
  '#upload_validators' => array(
    'file_validate_extensions' => array('gif png jpg jpeg'),
    // Pass the maximum file size in bytes
    'file_validate_size' => array(1024*1024*1024),
  ),
);

1 个答案:

答案 0 :(得分:3)

默认值必须是文件ID('managed_file'的'托管'部分意味着Drupal在file_managed表中为您处理该文件,并且对它的任何引用都需要通过ID)。

如果您当前正在保存companyLogo中的URL,则可能需要考虑将该列更改为int并改为保存文件ID。这样你现有的代码就可以了。

如果您需要随时获取URI,可以加载文件:

$uri = file_load($row['companyLogo'])->uri;

如果您需要完整的网址:

$url = file_create_url($uri);