Удалить строки из таблицы узлов - PullRequest
0 голосов
/ 14 августа 2010

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

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

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

спасибо

Ответы [ 3 ]

3 голосов
/ 14 августа 2010

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

Если отключение модулей не решает вашу проблему, загрузите 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 голосов
/ 14 августа 2010

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

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

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

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

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

0 голосов
/ 08 марта 2012

Обратите внимание, что (в зависимости от ваших разрешений на 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.

...