我创建了一个带有关联图像字段的内容类型。每个用户都能够看到此内容类型的所有节点的列表,并且应该能够在适当的字段中上传新图像。我尝试了很多解决方案,但最后我尝试使用表单和托管文件。
在包含所有节点列表的页面中,我正在为每个节点创建一个带有表单的灯箱。每个表单都是这样创建的:
function coverupload_form($form, &$form_state, $uid, $relid) {
$form['#attributes']['id'] = 'coverup-'.$relid;
$form_state['storage']['rid'] = $relid;
$cliente = cataloghi_user_edit_get_cliente($uid);
$release = node_load($relid);
$form['cover'] = array(
'#title' => 'Carica la cover per la release '.$release->title,
'#description' => 'I file caricati devono avere estensione \'.jpeg\', risoluzione di 1440x1440 e dimensione massima di 5MB',
'#type' => 'managed_file',
'#upload_location' => 'public://clienti/'.$cliente->title.'/cover',
'#upload_validators' => array(
'file_validate_extensions' => array('jpeg, jpg'),
// Pass the maximum file size in bytes
'file_validate_size' => array(5*1024*1024),
'file_validate_image_resolution' =>array('1440x1440', '1440x1440'),
),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('CARICA'),
);
return $form;
}
function coverupload_form_submit($form, &$form_state) {
$file = file_load($form_state['values']['cover']);
// Change status to permanent.
$file->status = FILE_STATUS_PERMANENT;
// Save.
file_save($file);
$nodo = node_load($form_state['storage']['rid']);
$nodo->field_release_copertina['und'][0] = (array)$file;
if($nodo = node_submit($nodo)) { // Prepare node for saving
node_save($nodo);
}
}
所有表单都有 display: none ,当用户点击封面上传按钮时,灯箱中只会显示相应的表单。
好吧,验证图像后一切正常。当图像未经过验证时(例如低于 1440x1440 像素),问题就开始了。
如果我用检查器检查灯箱,则会生成正确数量的表单,但它们都引用同一个节点(例如,它们都有 id 'coverup-17')。
我已经检查了所有内容,似乎每次都将正确的值传递给表单,所以我开始认为这可能是与我对表单的理解不足有关的问题。
尝试不同类型的方法会更好吗?
感谢和抱歉,如果这有点混乱......