php - 手动 Drupal 节点插入

标签 php mysql drupal drupal-6

我尝试使用对 Drupal 数据库的直接 MySQL 插入查询将图像从自定义 CMS 导入 Drupal。图像被复制到 drupal 站点内的路径:

sites/default/files/images/import

节点显示在列表中,但直接链接 (someurl/node/1234) 导致 404 错误。它们都是 media_image 类型,并分配了有效的 uid。我还对 filescontent_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 JOINnode 表到 node_revisions 表。 .so 如果就 Drupal 而言,node_revisions 表中没有匹配的记录,则没有节点。

要修复错误,您只需要使用所需的列填充 node_revisions 表 - 最值得注意的是 nidvid (这是版本 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/

相关文章:

php - 德鲁帕尔 7.x : how to apply styles to RSS feed in node?

php - 德鲁巴 7 : mail does sent but body and subject are empty

php - 如何将诸如 – 之类的 HTML 实体转换为其等效字符?

macos - 使用 MAMP Pro php.ini 而不是 OSX php

MYSQL 查询问题,输出不正确

c++ - 大量数据的MySQL性能问题

php - XAMPP 上的 Cron (windows)

Windows 托管错误上的 php 联系表单

php - 将货币符号 '$' '£'转换为html代码 $英镑?

mysql - InnoDB 关系 : one-way or two-way?