某些节点在数据库中存在时显示404状态。如果您在管理页面中输入要编辑该节点的网址,也会获得404。
这些节点是在CSV文件中以自动方式在数据库中创建的。我想问的是哪个数据库字段会在节点上触发404?
我检查了url_alias表,节点有有效的条目。即:如果我在URL中输入example.com/node/512682,它将重定向到SEF网址,但这会显示404
答案 0 :(得分:3)
您从'CSV'自动创建代码是否也会在'node_revisions'表中创建条目?如果没有,这将解释404 - 即使您已禁用节点类型的修订,Drupal仍然期望每个节点至少有一个条目。
您也可以在导入时创建它们,但我同意Scott Reynen(+1)您应该使用node_save()
来确保正确处理新创建的节点(尤其是相关挂钩的调用)也可以防止其他意外。
答案 1 :(得分:2)
听起来你的导入存在缺陷,但如果没有更多信息,很难知道。你使用node_save()了吗?如果没有,你应该试试。如果仍然无效,请尝试在node_save()之后立即查看$ node对象,看看它是否有新的nid值。如果没有,您没有将正确的信息传递给node_save()。如果你确实得到一个新的nid值并且该节点仍然无法加载,我将开始查看可能破坏Drupal的模块。但是我会把钱花在切换到node_save()来解决这个问题。
答案 2 :(得分:1)
检查正在运行的查询。我们遇到了同样的问题,结果是导入器使用不存在的uid创建条目。查询时,Drupal与用户表进行了连接并返回空。
SELECT n.nid, n.type, n.language, n.uid, n.status, n.created, n.changed, n.comment,
n.promote, n.moderate, n.sticky, n.tnid, n.translate, r.vid, r.uid AS revision_uid,
r.title, r.body, r.teaser, r.log, r.timestamp AS revision_timestamp, r.format, u.name,
u.picture, u.data FROM node n INNER JOIN users u ON u.uid = n.uid INNER JOIN
node_revisions r ON r.vid = n.vid WHERE n.nid = <some-number>
您可以使用devel模块确定。将它指向您认为应该显示模块的URL并查看它创建的查询。