複数のファイル (さまざまなビデオ形式用) とキャプションを受け入れることになっているカスタム「ビデオ」フィールドを作成しています。これまでのところ、スキーマは問題ありませんが、実際のファイルをアップロードして保存することはできません。
私のコードは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 ?) しかし、ファイルをアップロードするための適切なインターフェイスが得られたとしても、ファイルがアップロードされていないと思います。
caption
Drupal は実行しようとしている INSERT クエリを示しています。これは長すぎてここに投稿できませんが、フィールド (単なるテキスト フィールド)の値がクエリで問題ないことがわかります。ファイルフィールドで。