2010-08-14 3 views
0

Некоторые узлы отображаются в списке содержимого, даже если они больше не существуют.Удаление строк из таблицы узлов

Когда я нажимаю на них, я получаю пустую страницу.

Мне было интересно, могу ли я просто удалить строки из таблицы «Узел», или я должен очистить что-то еще.

благодаря

ответ

3

Во-первых: на странице администрирования перейдите к производительности и нажмите кнопку очистки всех кешей. Если это не решит вашу проблему, попробуйте отключить каждый вкладчик и посмотрите, существует ли проблема. Если нет, попробуйте включить их один за другим, и вы узнаете, какой вклад внес эту проблему. Сообщите об этом в очередь на выпуск модуля.

Если отключить модули не решит проблему, загрузите drush. Попробуйте удалить узел напрямую с node_delete. Пример (если нидите неверный узел является 3):

drush php-eval 'node_delete(3);' 

Если вы не знакомы с командной строкой, вы можете сделать то же самое с этим небольшой PHP файлом (положить его в корень в Drupal):

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

Если он не работает, сделайте резервную копию из своей базы данных, удалите узел из таблицы узлов и пройдите через каждую связанную с узлом таблицу (которая имеет столбец nid) и удалите связанные записи.

2

Это не может быть вашей проблемой, но:

Вы не хотите удалять строки непосредственно из базы данных. В конечном итоге вы не сможете узнать, в какой форме находится ваша база данных. Идентификаторы узлов существуют во многих таблицах, а узлы распределяются через несколько таблиц.

Пройдите через nodeapi и используйте фреймворк Drupal, потому что для этого он предназначен! Узел api будет корректно обрабатывать вашу схему базы данных.

См: http://api.drupal.org/api/function/node_delete/6

Так что, если вы знаете идентификатор узла, вы можете позвонить node_delete.

0

Обратите внимание, что (в зависимости от ваших прав на Drupal) вам, скорее всего, придется работать как пользователь с разрешениями на удаление узлов - например, user-1, а не анонимным пользователем по умолчанию. Вы можете сделать это, предварительно добавляющим ваш node_delete() вызова с,

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

Вы можете также испытать тайм-аут, если удаление многих узлов и вызов файла PHP через браузер. Одно исправление для этого - вызывать файл PHP через командную строку (если у вас есть доступ к оболочке). Например,

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-запросы для их удаления. Из-за сиротских узлов многие вещи будут разбиты в будущем. –

Смежные вопросы