我尝试使用对 Drupal 数据库的直接 MySQL 插入查询将图像从自定义 CMS 导入 Drupal。图像被复制到 drupal 站点内的路径:
sites/default/files/images/import
节点显示在列表中,但直接链接 (someurl/node/1234) 导致 404 错误。它们都是 media_image 类型,并分配了有效的 uid。我还对 files
和 content_type_media_image
是否需要内部 Drupal 流程来完成此导入?如果不重写为适当的 Drupal 导入模块,是否完全有可能?
示例节点插入:
INSERT INTO node SET
type='media_image',
language='en',
title='apicture.jpg',
uid='4',
status=1,
created=1328644135,
changed=1328644135;
// grab nid as last mysql_insert()
INSERT INTO files SET
uid = 4,
filename = 'apicture.jpg',
filepath = 'sites/default/files/images/import',
filemime = 'image/jpeg',
filesize = 40069,
status = 1,
timestamp = 1328644136;
INSERT INTO content_type_media_image SET
vid = 683,
nid = 683,
field_image_fid = 539,
field_image_list = 1,
field_image_data = 'a:3:{s:11:"description";s:0:"";s:3:"alt";s:0:"";s:5:"title";s:0:"";}';
注意:上面的查询是生成的查询。
最佳答案
如果您收到 404,那是因为从内部返回 node_load()
function为 NULL/FALSE。
如果您单步执行该函数,您会看到一个 INNER JOIN
从 node
表到 node_revisions
表。 .so 如果就 Drupal 而言,node_revisions
表中没有匹配的记录,则没有节点。
要修复错误,您只需要使用所需的列填充 node_revisions
表 - 最值得注意的是 nid
和 vid
(这是版本 ID),以及标题和正文。您可能还想在 format
列中设置正文的文本格式(它与 filter_formats
表中的键相关)。
顺便说一下,这个版本 ID 也应该添加到 node
表本身,因为这是 INNER JOIN
的基础。我认为获取下一个可用 ID 的最安全方法是:
SELECT MAX(vid) + 1 FROM node
如果您没有为任何内容类型打开修订,则 vid
可能始终与 nid
相同。
关于php - 手动 Drupal 节点插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9196982/