делаю некий конвертер с phpnuke на drupal. перенести нужно более 1500 статей и каментов к ним. так как я чайник, появляются некие сложности.
необходимо чтоб ID ноды соответствовало номеру старой статьи. многие статьи со временем были удалены и поэтому id идет не подряд а с дырками. 1-2-3-9-11...
что делаю сейчас:
считываю старые данные phpnuke и распихиваю по новым таблицам drupal
node - сюда всякие nid vid заголовки и счетчики времени
node_revisions - сюда nid и сами статьи
node_counter - nid и счетчики
далее - все скриптом перетаскивается.
вручную устанавливаю счетчик nid на последнее значение (чтоб autoincrement дальше правильно работал)
но при создании новой ноды обычным методом "node/add/story" возникает конфликтная ситуация
drupal пытается запостить в середину таблицы node новую статью. а такая nid уже есть.
[user warning: Duplicate entry '40-40' for key 1 query: UPDATE dr_node SET nid = 40, vid = 40, title = 'Полирование металлов электролитическим способом', type = 'story', uid = 6, status = 1, created = 1013087750, changed = 1237984336, comment = 0, promote = 1, sticky = 0 WHERE nid = 40 in /storage/home/shtrlz1s/otvseh/includes/database.mysql.inc on line 172.]
в чем собственно вопрос? может кто-то на пальцах показать в какой последовательности и в какие таблицы заносить полученные данные? ну или намекните где почитать?
Комментарии
что бы счетчик щелкал надо вносить записи с пустым id.
В своих тестах сделай по-другому:
- перенеси статьи
- установи значение счетчика равным максимальному id статьи + 1.
хотелось бы как раз нумерацию сохранить. я там ниже ответил почему.
зачем?
функция node_save поишите на этом сайте
'необходимо чтоб ID ноды соответствовало номеру старой статьи.'
дело в том что потом проще будет привести все в порядок. так как много статей пересекается по ссылкам да адреса потом перевести из node/1258 в article1258.html (так уж они давно проиндексированны)
за "node_save" спасибо. покопаюсь.
ясно, ну тгда можно сделать так
в цикле от 1 и пока не приспичит создаем ноды через node_save (он сразу все создат так как надо друпалу)
перед импортом создать тип материала "трэш"
на каждой итерации смотреть тот ли номер будет присвоен ноде ( db_next_id('{node}_nid');)если нет то создавать пустой материал типа "трэш" а если нужный то создавать то что следует.
потом через админку отфильтровать трэш и удалить
отличная идея!. большое спасибки. ночью буду все переделывать
Мы сами себе создаем проблемы, а потом героически их преодолеваем! )))))))))))))))))))))))))))))))))))))))))))))))))))))))
Автору ветки: сравни объем работы по этому предложению и моему.
кстати!
А какая версия Drupal? Если 5-ка, то однозначно надо помимо установки генератора в правильное значение править еще и два строчка в таблице sequences (перменные node_nid и node_revisions_vid) - я писал об этом на drupal.org В ответ они там заявляют, что в 6-ке таких проблем нет
5ка
большое спасибо за "sequences" а то устал искать уже...
все-таки я тупой. ну вот создал я в своем независимом конвертере некий массив $node
при выводе его на экран — все видно, но как его записать с помощью node_save ?