А, вот случилась маленькая проблемка. Человек создал ноду и прикрепил к ноде около 10-ка файлов общим весом на 50 метров. Средств для изменения типа материала я не нашел, да и проблему хотелось решить максимально быстро.
За информацию о загружаемых файлах отвечают две таблицы: files (таблица с информацией о файле: размер,название, путь, нода к которой прикреплен файл и т.д.) и file_revisions (информация о файле в различных версиях ноды).
Опишу процедуру на примере. Например, у нас есть нода1 (nid=1) с неправильным типом материала и кучей файлов, привязанной к этой ноде. Нам нужно получить ноду с таким же содержимым, но другого типа материала, при этом не гонять файлы между клиентом и сервером.
- Создаем ноду нужного типа. Пусть это будет нода2 (nid=2)
- Перепривязываем все файлы к новой ноде с помощью SQL-запроса:
UPDATE files SET nid=2 WHERE nid=1
Теперь у нас все файлы привязаны к нода2. НО нода2 пока не знает, как отображать информацию о файлах для текущей версии ноды. Исправим это. - Узнаем теущие значения vid (версии) для обоих нод с помощью запроса:
SELECT vid FROM node WHERE nid IN (1,2)
Пускай нода1 имеет vid=3, нода2 имеет vid=4 - Перепривязываем информацию о версии для файлов с помощью запроса:
UPDATE file_revisions SET vid=4 WHERE vid=3
- Удаляем нода1
- Пользуемся нода2
Комментарии
У вас небольшая ошибка в запросе
SELECT vid FROM node WHERE nid IN (1,2)
Спасибо, исправил.
Nodetype - модуль позволяет менять тип документа (ноды).
Если нужно перекинуть файлы между нодами или версиями ноды:
1. Сделайте бекап базы
2. Откройте в phpMyAdmin и ручками перенесите инфу из одной ноды (версии) в другую.
Или вы хотите писать скрипты для задачи, которая больше может никогда не повториться?!
Я не захотел устанавилвать модуль только из-за одной разовой операции, как я уже написал. Не понятен 2-й пункт в описанных вами действиях. Перенести - это выполнить какие-то запросы к БД. Какие запросы нужно выполнить в вашем 2-м пункте?