Submitted by hairvay on
Salut à tous,
je dois importer et insérer dans la bdd un fichier xml par l'intermédiaire. Ce fichier contient 116 enregistrements. Mais lorsque je procède à l'import, Drupal créé 140 nodes, les premiers nodes étant dupliqués.
voici ma fonction :
function _parseXml () {
$xml = simplexml_load_file('sites/all/files/extract/monfichier.xml');
foreach ($xml->Affaire as $item) {
$mime = 'audio/jpeg';
$node = new StdClass();
$image0 = $item->Affaire_images->image[0];
$image1 = $item->Affaire_images->image[1];
if (isset($image0)) {
$file = new stdClass();
$file_drupal_path = "sites/all/files/extract/".$image0;
$file->filename = basename($file_drupal_path);
$file->filepath = $file_drupal_path;
$file->filemime = $mime;
$file->filesize = filesize($file_drupal_path);
$file->uid = $uid;
$file->status = FILE_STATUS_PERMANENT;
$file->timestamp = time();
drupal_write_record('files', $file);
$node->field_img = array(
array(
'fid' => $file->fid,
'title' => basename($file->filename),
'filename' => $file->filename,
'filepath' => $file->filepath,
'filesize' => $file->filesize,
'mimetype' => $mime,
'data' => array(
'description' => basename($file->filename),
),
'list' => 1,
),
);
}
if (isset($image1)) {
$file_drupal_path1 = "sites/all/files/extract/".$image1;
$file1 = new stdClass();
$file1->filename = basename($file_drupal_path1);
$file1->filepath = $file_drupal_path1;
$file1->filemime = $mime;
$file1->filesize = filesize($file_drupal_path1);
$file1->uid = $uid;
$file1->status = FILE_STATUS_PERMANENT;
$file1->timestamp = time();
drupal_write_record('files', $file1);
$node->field_img01 = array(
array(
'fid' => $file1->fid,
'title' => basename($file1->filename),
'filename' => $file1->filename,
'filepath' => $file1->filepath,
'filesize' => $file1->filesize,
'mimetype' => $mime,
'data' => array(
'description' => basename($file1->filename),
),
'list' => 1,
),
);
}
$node->type = 'contentType';
$node->body = $item->Affaire_desc_internet;
$node->title = $item->Affaire_reference;
$node->field_num_mandat = array (0 => array ('value' =>$item->Affaire_num_mandat));
$node->field_cp = array (0 => array ('value' =>$item->Affaire_code_postal));
$node->field_ville = array (0 => array ('value' =>$item->Affaire_ville));
$node->field_secteur = array (0 => array ('value' =>$item->Affaire_secteur));
$node->field_nb_piece = array (0 => array ('value' =>$item->Affaire_nb_piece));
$node->field_nb_chambre = array (0 => array ('value' =>$item->Affaire_nb_chambre));
$node->field_nb_parking = array (0 => array ('value' =>$item->Affaire_nb_parking));
$node->field_etage = array (0 => array ('value' =>$item->Affaire_nb_etage));
$node->field_sdb = array (0 => array ('value' =>$item->Affaire_nb_sdb));
$node->uid = 1;
$node->status = 1;
$node->active = 1;
$node->promote = 1;
$type_annonce = taxonomy_get_term_by_name($item->Affaire_type_annonce);
$type_bien = taxonomy_get_term_by_name($item->Affaire_type_bien);
$type_mandat = taxonomy_get_term_by_name($item->type_mandat);
$node->taxonomy = array($type_annonce[0]->tid, $type_bien[0]->tid, $type_mandat[0]->tid);
node_save($node);
$i++;
}
}
Je sèche complètement, je n'arrive pas à voir mon erreur. Quelqu'un peut il me mettre sur la piste ?
Merci d'avance !
Et si tu mets : $node =
Permalien Soumis par apollonet le 10 Février, 2011 - 14:57
Et si tu mets :
$node = node_submit($node);
Juste avant :
node_save($node);
?
salut, merci pour ta
Permalien Soumis par hairvay le 10 Février, 2011 - 22:57
salut,
merci pour ta réponse.
en fait, j'ai l'impression qu'il y a un conflit avec le module pathauto. Quand celui-ci est désactivé, ça fonctionne correctement. Quand il est activé, c'est là que les nodes se dupliquent.
quelqu'un peut il confirmer ce type de comportement entre la fonction node_save() et pathauto ?
Un petit feedback au cas où
Permalien Soumis par hairvay le 11 Février, 2011 - 20:07
Un petit feedback au cas où ça puisse servir à d'autres. Le problème venait bien de l'activation du module pathauto.
j'ai donc désactivé la génération automatique d'alias par un
$node->pathauto_perform_alias = FALSE;
et recréé un alias pour chaque node généré par ce parsing et là, tout est rentré dans l'ordre !
problème résolu !