2010-08-14 59 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