[Решено] Экспорт и импорт Материалов (нод, файлов, таксономии). Перенос между сайтами.

Главные вкладки

Аватар пользователя semasping semasping 21 сентября 2011 в 16:58

Дано: Пара сайтов. Основной и для разработки и экспериментов.
Цель: На dev сайте ведем разработку. С основного сайта получаем данные, заталкиваем на dev для тестов. Если все нормально то dev сайт делаем как основной. Создаем новый dev сайт, продолжаем разработку.
Желательный вариант: Получить полностью все материалы(материалы нужно получить со всеми связями) с основного сайта в архив (вместе с файлами прикрепленными к материалам, файлы - картинки). Далее импортировать этот архив на dev сайт.

Начал разработку своего модуля под "желательный вариант"
С экспортом проблем нет ...

Получаем общий массив данных путем
для нод:

<?php
$arrTypeNode 
node_type_get_types();
foreach (
$arrTypeNode as $typeNode)    {
    
$arrayNodes[$typeNode->type] = entity_load('node'null, array('type' => $typeNode->type));
}
?>

для таксономии:

<?php
$arrayVocab 
taxonomy_get_vocabularies();
foreach (
$arrayVocab as $vocab) {
    
$arrayVocab[$vocab->vid]->termTree taxonomy_get_tree($vocab->vid);
    foreach (
$arrayVocab[$vocab->vid]->termTree as $key =>$term) {
        
$arrayVocab[$vocab->vid]->termTree[$key] = (object)array_merge((array)$term,(array)taxonomy_term_load($term->tid));
    }
}    
?>

для файлов:

<?php
$arrayFiles 
entity_load('file');
foreach (
$arrayFiles as $file) {
    
$useFile file_usage_list($file);
    if (
count($useFile) > 0) {
        
$rezCopy1 file_unmanaged_copy($file->uriSP_JSON_DIR_OUT $file->filenameFILE_EXISTS_REPLACE);
        if (!
$rezCopy1) {
            
file_unmanaged_copy('public://' $file->filenameSP_JSON_DIR_OUT $file->filenameFILE_EXISTS_REPLACE);
        }
    }
    else {
            
file_delete($file);
            
dpm($file'not use');
    }
}

?>

Далее drupal_json_encode и затем file_unmanaged_save_data
В итоге имеем node.json, taxonomy.json, file.json. Каждый файл содержит друпаловские объекты с полями и внутренними tid, nid, fid

Логично попробовать вставить эти данные под теми же _id для сохранения связей
И вот тут начинаются проблемы. Стандартные функции API drupal такие как node_save, file_save, taxonomy_term_save не желают вставлять данные под теми же _id (Ошибок нет, но и данных нет.)

Какие могут быть идеи? в какую сторону копать? может есть уже готовые решения(с подробным описание применения)?
Нужен ли вообще такой импорт экспорт для друпала сообществу?

UPDATE
Решил путем использования кусков кода из node_save, file_save, taxonomy_term_save.
Модуль как причешу так выложу... отдельной статьёй.

Комментарии

Аватар пользователя semasping semasping 22 сентября 2011 в 17:41

UPDATE
Решил путем использования кусков кода из node_save, file_save, taxonomy_term_save.
Модуль как причешу так выложу... отдельной статьёй.