批量导入XML数据到drupal系统

本文介绍了一个用于将XML格式的数据批量导入Drupal系统的自定义模块。该模块支持文件上传、解析及自动分类等功能,适用于需要迁移数据至Drupal的内容管理员和技术人员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果你想把其它网站的数据批量导入drupal系统中,下面代码对你有可能适用。前提条件是,你要把原来网站的数据生成XML格式!

生成XML的工具有很多,有个叫 xml.class.php的类,可以试用一下,你也可以自己写PHP代码来实现。

生成XML文件后,通过这个模块,直接上传,就可以把它导入到drupal系统了。

该模块还可以对你导入的数据进行自动分类(Taxonomy整合)。

以下为该模块的部分精华源代码,欢迎发信问问题和提出各种修改建议。

如需要完整模块,请向站长索取。

<?php
function import_form_submit($form, &$form_state
) {

??????????
$validators = array('file_validate_extensions' => array('upload_file'
),);
?????????? if (
$file = file_save_upload('upload_file', $validators
)) {
??????????????
$fd = fopen($file->filepath, "rb"
);
?????????????? if (!
$fd
) {
??????????????????
form_set_error('upload_file', t('Import failed: file %filename cannot be read.', array('%filename' => $file->filename
)));
?????????????? }
?????????????? else {
??????????????????
$info = fstat($fd
);
??????????????????
$len = $info["size"
];
??????????????????
$text = fread($fd, $len
);
??????????????????
fclose($fd
);
??????????????????
drupal_set_message(t('Loaded file %filename. Now processing it.', array('%filename' => $file->filename
)));
??????????????????
$form_state['values']['file'] = $file
;

??????????????????
import_xml_invoke_import($text, $form_state['values'
]);
?????????????? }
?????????? }
?????????? else {
??????????????
form_set_error('upload_file', t('Import failed: file was not uploaded.'
));
?????????? }
}




function
parseMol($mvalues
) {
???? for (
$i=0; $i < count($mvalues); $i
++)
????????????
$mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"
];
???? return new
ImportXml($mol
);
}


class
ImportXml
{
??
???? var
$tushushangpin
;??
???? var
$shangpindaima
;??????
???? var
$shuming
;
???? var
$congshuming
;
???? var
$fushucongshuming
;
???? var
$zhuzuozhe
;
???? var
$chubanzhe
;??
???? var
$benbanbanci
;??????
???? var
$yinci
;
???? var
$dingjia
;


???? function
ImportXml ($aa
) {
???????????? foreach (
$aa as $k=>$v
)
????????????????????
$this->$k = $aa[$k
];
???? }
}




function import_xml_invoke_import(&$text
) {

// parse the data:
??
$xml_parser = drupal_xml_parser_create($text
);
??
xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0
);
??
xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE,1
);
??
xml_parse_into_struct($xml_parser,$text,$values,$tags
);
??
xml_parser_free($xml_parser
);

// now begin fetch the value

foreach ($tags as $key=>$val
) {

???????????? if (
$key == "tushushangpin"
) {

????????????????????
$molranges = $val
;
???????????????????? for (
$i=0; $i < count($molranges); $i+=2
) {
????????????????????????????????????
$offset = $molranges[$i] + 1
;
????????????????????????????
$len = $molranges[$i + 1] - $offset
;
????????????????????????????
$tdb[] = parseMol(array_slice($values, $offset, $len
));
???????????????????? }
???????????? } else {
???????????????????? continue;
???????????? }
???? }

foreach(
$tdb as $value
){

??
$node
= array();
??
$node = new stdClass
;
??
$node->type = "product"
;
??
$node->status = 1
;
??
$node->uid = 1
;
??
$node->title = $value->shuming
;
// $node->body = $value->neirongtiyao;

??
$node->field_product_shangpindaima[0]['value'] = $value->shangpindaima
;??
??
$node->field_product_shuming[0]['value'] = $value->shuming;??????????????????????
// use ubercart
??
$node->field_product_congshuming[0]['value'] = $value->congshuming
;
??
$node->field_product_fushucongshuming[0]['value'] = $value->fushucongshuming
;
??
$node->field_product_zhuzuozhe[0]['value'] = $value->zhuzuozhe
;
??
$node->field_product_chubanzhe[0]['value'] = $value->chubanzhe
;
??
$node->field_product_benbanbanci[0]['value'] = $value->benbanbanci
;
??
$node->field_product_yinci[0]['value'] = $value->yinci
;
??
$node->field_product_dingjia[0]['value'] = $value->dingjia
;
??
// if $value->tongjifenlei is not null then :

??
if($value->tongjifenlei
){

??
$tj_vid = 1
;

?? if(
$tid = (int) db_result(db_query('SELECT tid FROM {term_data} WHERE name = "%s" AND vid = %d', $value->tongjifenlei,$tj_vid
))){????
????????
$tj_tid = $tid
;
???? }else{

????????????
// vocabulary ID is hard coded for this example
??????
$autoterm
= array(
????????
'name' => $value->tongjifenlei,??
// or whatever you want the auto-term to be named
????????
'parent' => 0
,
????????
'vid' => $tj_vid
,
?????? );
????????
taxonomy_save_term($autoterm
);
????????
$tj_tid = (int) db_result(db_query('SELECT MAX(tid) FROM {term_data} WHERE vid = %d', $vid
));
???? }
????
$node->taxonomy[$tj_vid][$tj_tid] = $tj_tid
;

?? }

??
node_save($node
);

}??

drupal_set_message("Import Successful!"
);
}
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值