2010-08-14 58 views
0

某些节点即使不再存在,也会显示在内容列表中。从节点表中删除行

当我点击它们时,我得到一个空白页。

我想知道如果我可以只删除“节点”表中的行或我应该清理其他东西。

感谢

回答

3

首先:在管理页面上,转到性能,然后单击清除所有缓存按钮。如果它不能解决您的问题,请尝试禁用每个contrib,并查看问题是否仍然存在。如果不是,请尝试一个一个地启用它们,并且您将知道哪个贡献造成了问题。将其报告给模块的问题队列。

如果禁用模块无法解决您的问题,请下载drush。尝试使用node_delete直接删除节点。例如(如果错误的节点的NID 3):

drush php-eval 'node_delete(3);' 

如果你不熟悉命令行,你可以做同样的这个小PHP文件(把它放到Drupal的根目录):

include './includes/bootstrap.inc'; 
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); 
node_delete(3); 

如果不起作用,请从数据库进行备份,从节点表中删除该节点,并遍历每个与节点相关的表(其中包含一个nid列),然后删除相关条目。

2

这可能不是你的问题,但:

你不想直接从数据库中删除行。事后你无法知道数据库的形状。节点ID存在于许多表中,节点通过多个表分布。

浏览nodeapi并使用Drupal框架,因为这就是它的意思!节点api将正确处理您的数据库模式。

参见: http://api.drupal.org/api/function/node_delete/6

所以,如果你知道了某个节点ID,您可以拨打node_delete。

0

请注意(取决于您的Drupal权限),您可能需要以具有删除节点权限的用户身份进行操作 - 例如用户1而不是默认匿名用户。您可以通过预先附加您的通话node_delete()以做到这一点,

global $user; 
$user = user_load(1); 

您也可能会遇到超时,如果删除多个节点,并通过浏览器调用PHP文件。一个解决方法是通过命令行调用PHP文件(如果您有shell访问权限)。例如,

php -f custom-script.php 

同样,如果要删除许多节点,你还可以运行内存不足。增加PHP内存限制你的脚本调用这个样子,

php -f custom-script.php -d memory_limit=512M 

这工作对我有Drupal 6.注意测试,你也能够通过在custom-script.php设置明确的超时时间来解决服务器超时问题。

+0

无论权限如何,node_delete()都会删除该节点。请考虑鼓励OP不要使用原始SQL查询来删除它们。由于孤儿节点,很多事情将来会被打破。 – 2012-10-26 19:06:57