以编程方式在Drupal中插入带有图像字段的内容

时间:2012-12-12 23:57:21

标签: php drupal drupal-6 cck

我正在尝试编写PHP以将大量内容插入到我网站的drupal 6数据库中。 内容类型有3个自定义字段:

field_theme_preview_demo_link - 文字字段

field_theme_preview_content_styl - 文本选择器

field_theme_preview_thumb - 带有'alt'的图片字段

我只是手动将图像复制到正确的目录。

我创建了内容类型(并手动插入了一些内容以确认一切正常)。

然后我找到了一些以编程方式插入内容的代码示例......

Creating Drupal CCK content programatically/ via API

http://drupal.org/node/458778#comment-1653696 (对于这个我无法理解为D6建议的mod。)

我尝试修改它但无法使其工作 - 它确实创建了新内容,但图像字段为空白。 (要运行此代码,我只需粘贴到“执行PHP代码”块中。)

global $user;
$newnode = new stdClass();
$newnode->title = 'New node title';
$newnode->body = "the body";
$newnode->uid = $user->uid;
$newnode->type = 'theme_preview';
$newnode->status = 1;
$newnode->promote = 0;
$newnode->active = 1;

$newnode->field_theme_preview_demo_link[0]['value'] = 'the link';
$newnode->field_theme_preview_content_styl[0]['value'] = 'Books';

$newnode->field_theme_preview_thumb = array(
    array(
      'fid' => 'upload',
      'alt' => 'the alt',
      'filename' =>  'sites/default/files/theme_preview_thumbs/41531.jpg',
      'filepath' => 'sites/default/files/theme_preview_thumbs',
      'filesize' => filesize('sites/default/files/theme_preview_thumbs/41531.jpg'),
    ),
  );

node_save($newnode);

3 个答案:

答案 0 :(得分:2)

fid字段设置为'upload'是指在实际上传文件时由节点表单完成的操作。如果您以编程方式生成内容,则需要从其他位置获取fid

您可能需要手动使用file api将文件系统某处的文件输入文件数据库,然后从生成的对象中绘制fid

答案 1 :(得分:1)

使用http://drupal.org/project/node_export此模块将内容导入或导出到特定内容类型,它确实适用于我,并且图像也会自动上传。

在导入节点后,您必须考虑使用此模块,确保图像与其内容匹配。

使用此模块我已经从我的本地服务器站点上传了100多条新闻文章到我的网站。

答案 2 :(得分:0)

@Seth Battin,@ Ayesh K,感谢您的提示, 工作代码......

global $user;
$newnode = new stdClass();
$newnode->title = 'New node title';
$newnode->body = "this is a new node, created by import function";
$newnode->uid = $user->uid;
$newnode->type = 'theme_preview';
$newnode->status = 1;
$newnode->promote = 0;
$newnode->active = 1;

$newnode->field_theme_preview_demo_link[0]['value'] = 'test 1';
$newnode->field_theme_preview_content_styl[0]['value'] = 'Books';

$field = field_file_save_file(
    'sites/default/files/srcImage1.jpg', 
    array(),
    'sites/default/files/theme_preview_thumbs');

if( !isset($field['data']) )  $field['data'] = array();
$field['data']['title'] = "the image title";
$field['data']['alt'] = "the image alt";

$newnode->field_theme_preview_thumb = array(0 => $field);
$newnode = node_submit($newnode);
node_save($newnode);