gpt4 book ai didi

php - Drupal 7 中具有多个文件字段的自定义字段

转载 作者:行者123 更新时间:2023-12-04 06:03:03 24 4
gpt4 key购买 nike

我正在制作一个自定义“视频”字段,该字段应该接受多个文件(用于不同的视频格式)和一个标题。到目前为止,架构很好,但我无法让它上​​传和存储实际文件。

我的代码在 hook_field_widget_form看起来像这样(仅粘贴相关位):

$element['mp4'] = array(
'#type' => 'file',
'#title' => 'MP4 file',
'#delta' => $delta,
);
$element['ogg'] = ... /* similar to the mp4 one */
$element['caption'] = array(
'#type' => 'textfield',
'#title' => 'Caption',
'#delta' => $delta,
);

另外,在我的 .install文件:
function customvideofield_field_schema($field) {
return array(
'columns' => array(
'mp4' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
'ogg' => ... /* similar to mp4 */
'caption' => array(
'type' => 'varchar',
'length' => 255,
),
)
);
}

我得到的错误是当我尝试存储数据时。我得到的表格很好,数据库看起来很好(至少是 Drupal 生成的字段),但是当它尝试执行 INSERT 时,它失败了,因为它尝试进入这些整数字段的值是一个空字符串。

据我了解,它们必须是整数,对吗? ( fid s?)但我猜这些文件没有被上传,即使我确实得到了上传文件的正确界面。

Drupal 向您展示了它尝试执行的 INSERT 查询,这里发布的时间太长,但我可以在那里看到 caption 的值字段(这只是一个文本字段),在查询中很好,所以这只是文件字段的问题。

最佳答案

您可能想使用 managed_file 字段类型,它处理上传文件并将其注册到 managed_files表给你。然后,您只需将提交功能添加到您的小部件表单并输入以下代码(来自上面链接的 FAPI 页面):

// Load the file via file.fid.
$file = file_load($form_state['values']['mp4']);

// Change status to permanent.
$file->status = FILE_STATUS_PERMANENT;

// Save.
file_save($file);

// Record that the module (in this example, user module) is using the file.
file_usage_add($file, 'customvideofield', 'customvideofield', $file->fid);

希望有帮助

编辑

核心文件模块使用 hook_field_presave() 处理实际提交。 ,我最好的猜测是这段代码可以工作:
function customvideofield_field_presave($entity_type, $entity, $field, $instance, $langcode, &$items) {
// Make sure that each file which will be saved with this object has a
// permanent status, so that it will not be removed when temporary files are
// cleaned up.
foreach ($items as $item) {
$file = file_load($item['mp4']);
if (!$file->status) {
$file->status = FILE_STATUS_PERMANENT;
file_save($file);
}
}
}

假设您的字段的文件 ID 列是名为 mp4 的列。 .

记得在实现新钩子(Hook)时清除 Drupal 的缓存,否则它不会被注册。

关于php - Drupal 7 中具有多个文件字段的自定义字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8721460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com