如果你想把其它网站的数据批量导入到drupal系统中,下面代码对你有可能适用。前提条件是,你要把原来网站的数据生成XML格式!
6 ?. U# k- B6 {& z( t2 G) ?/ {生成XML的工具有很多,有个叫 xml.class.php的类,可以试用一下,你也可以自己写PHP代码来实现。0 H1 T& F( F; H" ^& _0 \
生成XML文件后,通过这个模块,直接上传,就可以把它导入到drupal系统了。, ^ Q$ i) l! C$ q
该模块还可以对你导入的数据进行自动分类(Taxonomy整合)。2 } C+ n7 K2 X" _" K6 a' G) {/ T
以下为该模块的部分精华源代码,欢迎发信问问题和提出各种修改建议。8 f5 o) ]" D v) q! \7 J+ n
如需要完整模块,请向站长索取。 N; n* y7 ]. ?; o/ i3 h+ A2 N
' B, W1 s3 Q3 U0 a& y l& z( [) f<?php
3 c. h2 C, M& V# v, J) Sfunction import_form_submit($form, &$form_state) {: e0 V( N. v N7 a' L' A% s+ ]- K
4 v+ |; i( n0 k?????????? $validators = array('file_validate_extensions' => array('upload_file'),);5 Q8 m; d' k$ R; A
?????????? if ($file = file_save_upload('upload_file', $validators)) {
) g- N! n1 F, i?????????????? $fd = fopen($file->filepath, "rb");6 \' B; S7 J0 n3 H$ K% k+ F; u+ M. ^
?????????????? if (!$fd) {
1 h' v% P+ c- ~+ t: x?????????????????? form_set_error('upload_file', t('Import failed: file %filename cannot be read.', array('%filename' => $file->filename)));' P# h5 a9 B/ \) K7 d* e
?????????????? }
: p m$ B* B) {( {4 A?????????????? else {
" m% m% ]) @! X, q( P& m% b1 O4 e?????????????????? $info = fstat($fd);
1 M) y# x9 w# O1 z0 ]3 J?????????????????? $len = $info["size"];$ n* p* V4 Q5 T) ~, K8 c/ [
?????????????????? $text = fread($fd, $len);' _( Z- z# w7 k" y* V+ T1 g$ Q
?????????????????? fclose($fd);: }: o. X7 [6 j
?????????????????? drupal_set_message(t('Loaded file %filename. Now processing it.', array('%filename' => $file->filename)));: ]& v& s9 Q6 t8 b) O4 L( p8 s% e$ p: N
?????????????????? $form_state['values']['file'] = $file;+ S% Y4 H/ x# W* `
8 d" f$ N1 T3 S! N* _8 w; L$ q?????????????????? import_xml_invoke_import($text, $form_state['values']);5 T0 q& \9 m; v5 T4 y4 K7 M
?????????????? }6 `7 s( x9 C2 ~1 ^% a
?????????? }# @& V$ b1 N3 v% S0 @% F
?????????? else {
, u0 `( K( Z; l- d?????????????? form_set_error('upload_file', t('Import failed: file was not uploaded.'));5 _# r/ `7 B9 V# w7 j4 x7 {
?????????? }7 h6 [( ]5 _" ?0 H# q+ T
}
1 t# ?4 `5 z% R+ J$ [, f
3 j9 ]/ w0 L* G9 \1 }( h5 \- _6 t
, F; @- y1 R$ Z- N& @: T" j9 i A f6 [9 B
function parseMol($mvalues) {
& W( S) c( l* x- k+ J???? for ($i=0; $i < count($mvalues); $i++)$ H S' j# N4 n3 ]1 [1 R4 m
???????????? $mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];: z% I% F. u+ M1 M
???? return new ImportXml($mol);
6 C& s" Q7 M) h1 i# h5 i& m}
; ^6 b- @5 B9 J/ n7 m" y4 l- }
! e' j# k7 U5 q# H* _' K+ H, e' _& m
class ImportXml {4 r2 |5 r! G+ i$ U& p [6 z% F+ o
??
% F0 \4 ?2 p% ^# o2 b/ I???? var $tushushangpin;??
( G- G6 O7 s$ z7 P/ K???? var $shangpindaima;??????5 j0 C# y2 O) Y5 [, y0 S. R
???? var $shuming;4 q6 m: J X( l8 C9 t
???? var $congshuming;
1 e0 p- M- C$ f- `5 @; l???? var $fushucongshuming;# K! |, Z z- @# ~2 H# C$ T. K
???? var $zhuzuozhe;, a8 k7 M. v& c
???? var $chubanzhe;??6 n8 a2 c' U: d5 A. P0 X! v
???? var $benbanbanci;??????' H% x0 B# t; e. s4 T
???? var $yinci;3 {" h6 L2 H' ^, M7 G* K% E7 M+ ~
???? var $dingjia;0 |+ |% D( o( |+ c
1 G& Y) J/ C- m- ~3 y* Q4 B. x: o$ g' H6 e$ P% a: O! S/ E' i
???? function ImportXml ($aa) {* z/ r" S2 }: m1 |
???????????? foreach ($aa as $k=>$v)
* x8 V' k+ j/ t* p( y0 J+ i???????????????????? $this->$k = $aa[$k];& n# W4 Y) |: q* K+ p
???? }$ w4 F1 b* S! {% Z; X8 b2 p, l
}1 }/ l% }3 H; Q. Q4 ]4 \
! `5 g1 n, T/ e- m/ U
. Q" E2 r5 T9 @7 `
+ C' m4 |' M9 M9 g( ]; }
2 F; r% F* p( q" G2 L* c" Sfunction import_xml_invoke_import(&$text) {0 l# r) b+ F& x: ]9 v+ p/ B. j3 J3 a7 }: {
7 t% r2 L/ `" S7 Q+ l; Q4 w. U9 R
// parse the data:( t; U) ]* ]! U/ s
?? $xml_parser = drupal_xml_parser_create($text);
" X. q+ D9 j2 y! j?? xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0);' K% D7 _$ w& V4 [
?? xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE,1);; b$ s. Y. O6 ^: b2 U: J# ?5 B6 p
?? xml_parse_into_struct($xml_parser,$text,$values,$tags);
: k; z+ x- a% [2 E# t7 V?? xml_parser_free($xml_parser);
+ D% o4 w; @: j, `* I! l2 N' O, R2 W
# p+ ~$ n- p# |// now begin fetch the value$ q" R5 _ j9 Q! l9 |# t# o& S
1 [4 p; A0 g* O+ }4 f2 N2 v
foreach ($tags as $key=>$val) {/ J. q3 m7 ]) F4 N, h, H# I
u. b% r2 Q. @% Z, k???????????? if ($key == "tushushangpin") {2 q6 C1 ^2 O7 p+ p) p
! r; V) _4 z1 i
???????????????????? $molranges = $val;
/ u( B4 _* [) V. F7 |9 v# x???????????????????? for ($i=0; $i < count($molranges); $i+=2) {
1 o/ H, b9 z2 l9 n2 I. S l???????????????????????????????????? $offset = $molranges[$i] + 1;
6 U8 t; n9 D1 j; Z: U0 C6 x1 B???????????????????????????? $len = $molranges[$i + 1] - $offset;8 J3 A/ I* z' o) ] Q; X+ J4 g
???????????????????????????? $tdb[] = parseMol(array_slice($values, $offset, $len));+ g* y9 B4 H8 c* n$ J6 U! E
???????????????????? }/ t9 `7 _) x0 d: ]
???????????? } else {8 T+ {& A/ g) E9 `6 g
???????????????????? continue;
9 l `8 d/ T! J( |6 z3 L???????????? }
2 }2 M( ]1 c* L7 A4 x???? }- v7 P& P. P3 {& X) u4 s/ b
* ~3 Y% ~% `+ F! ~3 R- ~1 Q5 Cforeach($tdb as $value){
2 S4 y) ^# W3 A; S, O5 n8 H! p( w% D. N
?? $node = array();
% H# N* H- V9 Q& u; H' h% ?# ??? $node = new stdClass;
. M8 Y: _! A8 S# b- H7 `?? $node->type = "product";: T [+ C1 s! k# W2 U
?? $node->status = 1;
% Z8 d3 ^$ p/ F# T- C# A$ `?? $node->uid = 1;- H+ Q- i* j+ H3 C: D. P
?? $node->title = $value->shuming;
$ _) h9 o7 s% Q. o0 W: U" I// $node->body = $value->neirongtiyao;8 y0 u; b# D; |4 v
3 I9 f) n* s, z( V
?? $node->field_product_shangpindaima[0]['value'] = $value->shangpindaima;??# F7 `. e& Q; H
?? $node->field_product_shuming[0]['value'] = $value->shuming;?????????????????????? // use ubercart' ], L; v& H; p4 @ z
?? $node->field_product_congshuming[0]['value'] = $value->congshuming;
8 D' U, f& @3 r/ v?? $node->field_product_fushucongshuming[0]['value'] = $value->fushucongshuming;8 c1 i! }6 u0 b0 p: t
?? $node->field_product_zhuzuozhe[0]['value'] = $value->zhuzuozhe;
, U5 [( `% p- S- d% A! s6 k0 L3 w?? $node->field_product_chubanzhe[0]['value'] = $value->chubanzhe;3 S5 @9 T6 R% T) }, W( F' u
?? $node->field_product_benbanbanci[0]['value'] = $value->benbanbanci;
" t' L& R7 N% _' d$ x+ [4 a8 ]?? $node->field_product_yinci[0]['value'] = $value->yinci;
+ x2 ?) u- |# @9 O; W/ u?? $node->field_product_dingjia[0]['value'] = $value->dingjia;
0 F t1 X1 s7 i??0 h1 X5 q9 g0 r% z7 k5 T* r3 w3 P$ x
// if $value->tongjifenlei is not null then :
, }9 |9 E% j8 n, m! S
1 X; E1 U' o2 S; ?' f- J g. y F?? if($value->tongjifenlei){' v6 h Y1 s3 H$ f, M
+ O( v& ` I! X& _
?? $tj_vid = 1;
8 e0 e% N6 h+ Z( y9 l I9 m. X
5 V+ G |5 w. y$ d( [?? if($tid = (int) db_result(db_query('SELECT tid FROM {term_data} WHERE name = "%s" AND vid = %d', $value->tongjifenlei,$tj_vid))){????
- X: ~6 c: G) x5 i- q2 S3 t???????? $tj_tid = $tid;
: A9 z7 K" J6 Z! r; `???? }else{
! ^4 L) _/ z% \! j( o; \% z6 b5 F" w7 i9 i% p
???????????? // vocabulary ID is hard coded for this example
, Z( {& L# B1 {5 J?????? $autoterm = array(
2 J8 u6 y$ E- {7 K1 q, w% m; F' ~ u???????? 'name' => $value->tongjifenlei,?? // or whatever you want the auto-term to be named4 X# A4 B. ?" X, @8 ~* c6 s
???????? 'parent' => 0,
8 |+ }1 u) z8 X2 C; g* a???????? 'vid' => $tj_vid, A7 |* t$ Y. r$ i ^
?????? );+ l, ?7 r! S4 Z) y! J
???????? taxonomy_save_term($autoterm);
1 |9 ?4 s- t3 |' k3 A???????? $tj_tid = (int) db_result(db_query('SELECT MAX(tid) FROM {term_data} WHERE vid = %d', $vid));
2 x# U" t$ v5 W, {) y5 S7 Y???? }
) j2 G5 v/ v$ i4 w- Q???? $node->taxonomy[$tj_vid][$tj_tid] = $tj_tid;6 x7 }- B) `2 [3 n* a+ r4 W8 {
& B) N R1 _/ ~5 W
?? }9 Q ]+ p" V1 R" a1 T4 q* n$ \" N
8 {: g4 {* ]& Z& m0 Q4 b. F2 e7 Y?? node_save($node);
6 M# ^3 r, r' {: k2 B' R7 s
3 `* k' N' b2 E5 v( m}??( ~/ U; W% r# w1 `9 Y' X
7 {& k8 `0 T" \- z9 G7 d% u
drupal_set_message("Import Successful!");( z( q5 T0 h r' K+ C0 ~
}
& A$ b1 N# x. ~?>$ X9 N) X6 R5 u! u' y
4 h5 a" a5 _% W0 b; A
5 W3 J* \; @2 P4 t, J
. W8 t; @% M6 m/ T r: M) x' [
r# }) a* Q3 G
7 _) V% E$ _! a) j) w' L0 A |
|