Drupal node_save ускорить - PullRequest
       8

Drupal node_save ускорить

1 голос
/ 29 февраля 2012

Я должен вставлять миллионы узлов программно (импортировать данные из xml).Узел имеет много полей cck, таких как фотографии, голоса, ссылки на узлы и другиеЕсть ли несколько советов, чтобы ускорить этот процесс (узлы сохраняются через drupal api node_save)?

Чтобы понять, что я пытаюсь найти, вот пример: нам не нужно очищать кеш во времяимпорт данных, поэтому мы можем прокомментировать последнюю строку в функции node_save.

Любые другие полезные советы по производительности?

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

У меня есть решение для вас

Во-первых: вам нужно проанализировать ваш файл .xml в .csv «разделитель запятых». Вы можете использовать множество инструментов для этого, вам не нужно писать код. посмотрите на эти сайты

1- http://codestips.com/php-xml-to-csv/.

2- http://www.w3schools.com/php/func_filesystem_fgetcsv.asp.

3- Преобразование большого файла XML в CSV в PHP .

Второе: установить импорт заметок модуля drupal "http://drupal.org/project/node_import"

при импорте узла вы импортируете CSV-файл, а в конфигурации вы указываете тип, который вам нужно создать с помощью этого файла. Также вы должны определить csv поля, ссылающиеся на выбранный тип контента. этот модуль будет генерировать узел для каждой записи CSV. Например, если он содержит 100 строк, то будет создан 100 узел. эта ссылка является пошаговым руководством "http://drupal.org/node/827750"

другое решение:

1- Создает тип контента с именем Import и добавляет загрузку в поле файла (для загрузки файла xml), а затем создает только один экземпляр.

2 - Затем зацепите node_api «операция отправки» и добавьте свой код для анализа загруженного XML и итерации по количеству элементов в файле

3- Наконец, создайте программный узел и установите его значение с помощью дочернего значения элемента xml.

Код для создания программной заметки:

$node = new stdClass();
//Main Node Fields
$node->type = 'video'; //This can be any node type
$node->created = time();
$node->changed = $node->created;
$node->promote = 0; // Display on front page ? 1 : 0
$node->sticky = 0;  // Display top of page ? 1 : 0
$node->format = 2;  // 1:Filtered HTML, 2: Full HTML
$node->status = 1;  // Published ? 1 : 0
$node->language = 'en';

/* Custom Fields of Video */
$node->title = $node->name = "string";
$node->field_video_id[0]["value"] = "string";
$node->field_updated[0]['value'] = "string";
// this code must be placed to save the created node
if ($node = node_submit($node)) {
node_save($node);

drupal_set_message(t("Node " . $node->title . " added correctly"));
} else {
drupal_set_message(t("Node " . $node->title . " added incorrectly"), "error");
}

Свяжитесь со мной для получения дополнительной информации.

0 голосов
/ 29 февраля 2012

Я не знаю, для каких целей вам нужно программно создавать миллионы узлов, но существует модуль Devel и его документация по Document .

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

Проверка Создание содержимого , которое может:

"Ускорьте разработку вашего сайта или модуля, быстро создавая узлы, комментарии, условия, пользователи и многое другое. "

...