Иногда перед разработчиком стоит задача импорта типов содержания на другой сайт, это конечно не часто бывает, но все же. Особенно интересено когда типы содержания созданы через cck, и еще интересней когда типов содержания перекатило за десяток.
Как жи сделать импорт?
Правильно, воспользоваться стандартным свойством cck для експорта, ну а потом уж для импорта.
Ну а теперь давайте представим что у вас 20 типов. Вы их уже все експортировали в отдельные файлы и готовы приступить к импорту на другой сайт. И вот собственно ради чего все писалось - начинается мартышкна работа: Ctrl+C/Ctrl+V.
В моем случае, писался (да и пишится) проект который можно легко ставить на любой друпал, но вот досада, есть туева хуча типов, и что б поставить обычному пользователю мою систему нужно потратить не мало времени, явно тупое copy/paste тут не канает. Но, мы то работаем с drupal, а в drupal есть замечательная функция drupal_execute().
Так вот после танцов с бубном, было выяснено что код ниже создает тип содержания
<?php
...
// тут подключается файл функции которого участвуют в создании,
// по идее его добавлять не нужно, но почемуто модуль который я писал,
//работал не корректно
include_once drupal_get_path('module', 'node') .'/content_types.inc';
// а это параметр формы импорта в cck import
$values['type_name'] ='';
.....
// перед этой строчкой у меня в модуле шло циклом открытие каталога
// в модуле
// module_name/data/content_type_1/code.php
// ...
// module_name/data/content_type_n/code.php
$values['macro'] = implode ("\n", file($path."/data/".$file."/"."code.php"));
// ну тут и так ясно $form_id, $form_values
drupal_execute("content_copy_import_form", $values);
?>
В принципе это все что нужно знать для импорта. Я писал модуль для этих целей с
соответствующими проверками, он был заточен под оприделенные типы.
Я его выложу сдесь, но пока что нет времени. Так что-с... все.
Комментарии
Если есть проект, который пишется и ставится пользователям, то может проще создавать типы не с помощью CCK, а модулем сделать?
естественно что нужно прописывать типы в модуле, и так оно скорей всего и будит, но на данном этапе реализации можно позволить себе и этот изврат