我在这里面临一种情况。使用新内容类型映射现有图像
我有一个内容类型A,其中包含一个图像字段(field_upload_snaps)。还有另一种内容类型B,其中还包含图像字段(field_valid_snaps)。
现在用户将从A内容类型上传图片。因此,如果用户通过A上传3张图片,则3个FID及其相应的URI将在Drupal 7的file_managed表格中创建。
现在我有一个要求,我必须使用Drupal代码以编程方式插入2个图像。现在有没有必要产生任何新的图像拷贝公共URI作为图像通过A.存在
我尝试两种方法: -
1)我创建我试图B型的新节点从现有的fid中获取文件的URI,文件大小,文件模式和所有相关参数,并使用它与节点相关联。
global $user;
$node = new stdClass();
$node->type = "user_slideshow_snaps";
$node->language = LANGUAGE_NONE;
node_object_prepare($node);
$node->uid = $user->uid;
$file = (object) array(
'uid' => $user->uid,
'uri' => 'public://1.jpeg" ,
'filemime' => 'image/jpeg',
'status' => 1,
);
$node->field_upload_snaps['und'][] = (array)$file;
$node = node_submit($node); // Prepare node for a submit
node_save($node);
但它给了我一个错误,“无法在file_managed中插入重复值”。它会给出,因为这样的值已经存在于通过A的file_managed中。所以我无法保存值。
2)我先保存节点,然后像这样手动插入图像字段。
global $user;
$node = new stdClass();
$node->type = "user_slideshow_snaps";
$node->language = LANGUAGE_NONE;
node_object_prepare($node);
$node->uid = $user->uid;
$node = node_submit($node); // Prepare node for a submit
node_save($node);
db_insert('field_data_field_valid_snaps')
->fields(array(
'entity_type' => 'node',
'bundle' => 'user_actualD_snaps',
'deleted'=> 0,
'entity_id'=>$node->nid,
'delta'=>0,
'field_valid_snaps_fid'=>517,
'field_valid_snaps_alt'=>'',
'field_valid_snaps_title'=>'',
'field_valid_snaps_width'=>200,
'field_valid_snaps_height'=>300,
))
->execute();
但是在这种情况下,node_save()之后的行不执行。所以我无法保存它。
是否有任何可用的功能将现有图像映射到另一个表中?
file_save_data将使用不同的名称再次保存同一文件。我已经将原始文件保存在那里,所以我不需要创建具有不同名称的同一文件的副本。我想使用现有保存文件的属性来加载新节点。我希望我的解释清楚。 – user1843970 2013-05-01 20:21:55