您的位置:首页 > 其它

批量导入XML数据到drupal系统

2012-11-29 14:20 330 查看
如果你想把其它网站的数据[/b]批量导入[/b]到drupal[/b]系统中,下面代码对你有可能适用。前提条件是,你要把原来网站的数据[/b]生成XML格式!

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

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

该模块还可以对你导入的数据[/b]进行自动分类(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[/b]_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[/b]_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[/b]_set_message("Import
Successful!");

}
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: