如果你想把其它网站的数据批量导入到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!");
}
?>