如果你想把其它网站的数据批量导入到drupal系统中,下面代码对你有可能适用。前提条件是,你要把原来网站的数据生成XML格式!% G ^4 v8 C7 k3 f* X) k# ^
生成XML的工具有很多,有个叫 xml.class.php的类,可以试用一下,你也可以自己写PHP代码来实现。& Z$ D$ c" f g
生成XML文件后,通过这个模块,直接上传,就可以把它导入到drupal系统了。, v- T Z! c! |! P, w" d
该模块还可以对你导入的数据进行自动分类(Taxonomy整合)。 I0 }; p+ {: |" B" r
以下为该模块的部分精华源代码,欢迎发信问问题和提出各种修改建议。
9 a8 ?" ?0 e% @& m! Z7 |如需要完整模块,请向站长索取。
, W% w4 T" f2 b Z2 ?. p# e, U% T- \2 L/ a! C) r/ x$ b7 ]
<?php: D+ x+ O- O4 L9 \( K P5 v
function import_form_submit($form, &$form_state) {
6 @# h( X! E% G L' e, {: J
+ ?$ `& i: R2 N$ E; U" O, V?????????? $validators = array('file_validate_extensions' => array('upload_file'),);
s4 {5 J: W! j! R( _# N?????????? if ($file = file_save_upload('upload_file', $validators)) {; R, E! F1 w) r- g
?????????????? $fd = fopen($file->filepath, "rb");7 K# b; C/ d8 e$ P
?????????????? if (!$fd) {
$ ~; q) Z# ?, V' P0 B. F( [4 C?????????????????? form_set_error('upload_file', t('Import failed: file %filename cannot be read.', array('%filename' => $file->filename)));
: Q+ X) ~& y3 l9 i+ `?????????????? } o. S D3 O+ z
?????????????? else {( t2 V( v; @# }* ^# N; N
?????????????????? $info = fstat($fd);
5 [# }5 n9 ? Y: Q: P?????????????????? $len = $info["size"];( f$ s, A/ L% L4 C: i
?????????????????? $text = fread($fd, $len);
9 {7 Y8 V$ _& Q6 x# z0 ?7 z?????????????????? fclose($fd);1 W4 \3 f/ C/ i3 _- i
?????????????????? drupal_set_message(t('Loaded file %filename. Now processing it.', array('%filename' => $file->filename)));7 E4 }0 u/ ^6 \% }
?????????????????? $form_state['values']['file'] = $file;
. k9 W* Z" ~$ y# K4 F: X/ R
+ x( V T( G& t5 D! h9 a( l?????????????????? import_xml_invoke_import($text, $form_state['values']);
8 w9 q; k4 F1 P?????????????? }0 o7 j7 O4 d9 V- Z
?????????? }
7 d+ k# y. Y3 N) d" v. k( g4 f?????????? else {
4 d% ` x( D' f0 f?????????????? form_set_error('upload_file', t('Import failed: file was not uploaded.'));
$ ^+ b- C2 ?& A4 K. E?????????? }
+ K7 D! e4 d+ t% D& y' G}. x- e4 p$ [/ }9 D2 g) z; M
$ H& d7 D# f" K: H$ \
2 w+ f! K8 c( G2 I" T& t# J' Y8 ` U- i: E. @
. r; Z2 i6 i1 \+ L' P3 u: B
function parseMol($mvalues) {
+ G( J7 d- _! s5 h7 y6 H3 [( r???? for ($i=0; $i < count($mvalues); $i++)% Q" k; ]; k! g. ?2 R) A
???????????? $mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"]; j9 w4 \: H, o- U
???? return new ImportXml($mol);$ n3 O7 b. Q0 {. S k. C
}
7 M. D0 U' X& w1 J) @# p$ _5 `
1 I& x! W7 c$ R1 _2 F$ _2 r+ f1 t7 U1 n" M1 v( }6 L) j
class ImportXml {6 b, y, a- L2 T2 J! k
??$ K- r1 {- |! C8 f1 h
???? var $tushushangpin;??
: i* O" H/ |6 \. A( H, n7 X???? var $shangpindaima;??????2 t: [: w& f) r; W/ d* m1 D
???? var $shuming;% `$ Z# n# r) A( m
???? var $congshuming;% ~5 E7 g% ^8 _2 |+ a! }
???? var $fushucongshuming;2 `4 I+ B; z5 Z' _; @. O! ^
???? var $zhuzuozhe;
4 l( D' t0 P6 U9 a, {6 V???? var $chubanzhe;??" _7 W) ~% M* ?+ X( x
???? var $benbanbanci;??????" H* }5 p3 c; Y, t1 D
???? var $yinci;
V$ a1 {+ X, D4 U7 Z6 \???? var $dingjia;
5 \3 {9 R2 U, A! N8 F' x$ S* S2 E& C& n$ z+ C! L
% R# y- V j: B# w r
???? function ImportXml ($aa) {8 o) A- C2 k8 {' W1 d8 I
???????????? foreach ($aa as $k=>$v)1 j) Y- A/ F6 `! h: J$ {8 E3 T
???????????????????? $this->$k = $aa[$k];$ W( ~$ d6 b+ }
???? }
; J5 Z* c2 d, j! e0 U6 E' r}% Q2 `* R8 Q M9 D
0 d* [# s/ `, z+ B9 k# R, C* U
% Q( @ r3 P: t& ]
! ?- a( `, p/ \function import_xml_invoke_import(&$text) {
# Y6 F+ y! X( X: E! Z% X8 d! a
# W0 y9 I: o. |/ r// parse the data:4 K, K6 @6 _4 E$ g# v7 F
?? $xml_parser = drupal_xml_parser_create($text);- P' Y& g: W8 x7 K+ o5 }9 u% s, {, h
?? xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0);
8 T" ?8 O" Y7 C. A?? xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE,1);
7 G4 p% N9 m3 b& D0 {: X) o1 L?? xml_parse_into_struct($xml_parser,$text,$values,$tags);
6 C2 h2 s3 Y6 q. g# w1 C1 A( ]2 J) W?? xml_parser_free($xml_parser);
8 t; O! S1 f/ _& @$ M$ v/ P* C* D
" C( T+ w# G: v! O! [// now begin fetch the value
7 ^+ |; G2 Y! B2 F, H: V
% |/ N7 J; I' s# C4 I9 B, ]foreach ($tags as $key=>$val) {
$ n) A8 x3 f. y: a* M1 @" @$ h
4 B2 {% r( g: \. p- j1 ]???????????? if ($key == "tushushangpin") {& h+ Q8 A" U& k5 T& j) _
1 h* q0 K1 U) V% i H???????????????????? $molranges = $val;' Y6 S0 O. R3 k6 D! m
???????????????????? for ($i=0; $i < count($molranges); $i+=2) {1 N1 `3 W+ B) Z1 j% d9 D% N) i5 V0 A
???????????????????????????????????? $offset = $molranges[$i] + 1;% t0 ?4 H$ `, d6 v$ c
???????????????????????????? $len = $molranges[$i + 1] - $offset;0 f- O& w7 w: _; z
???????????????????????????? $tdb[] = parseMol(array_slice($values, $offset, $len));
2 ^; O& C- _1 V/ w4 l???????????????????? }6 t0 f0 n3 ]( U* t% O
???????????? } else {* Y* K* ]+ ]4 [4 q' `, L8 B
???????????????????? continue;
) J/ O. h( O* T4 W; B# h# z! Y???????????? }
2 ~& h5 j$ }/ Q' Y$ L: A???? }6 H( U6 Z( ?) K$ o' j
v6 f5 ], u }" m
foreach($tdb as $value){
8 ~0 g8 _5 \: Z3 @7 R% y; M, z6 R# E0 l x1 ^) j/ v
?? $node = array();
3 O9 g1 c) K5 Y9 |?? $node = new stdClass;4 q! o( j- U- y) o; X2 z
?? $node->type = "product";; D5 m7 X7 Y( U5 ~$ N+ e
?? $node->status = 1;8 X8 G. G$ x2 u$ f. _* o
?? $node->uid = 1;. \8 X6 ^8 Z0 l, N9 P% r
?? $node->title = $value->shuming;
6 ]$ w! ~6 L# |$ }// $node->body = $value->neirongtiyao;* x4 ~ S s& O3 L P. H5 n# i4 D
# v- }; x6 z" O; a?? $node->field_product_shangpindaima[0]['value'] = $value->shangpindaima;??, z3 q5 n K6 f o) M# m( N5 l
?? $node->field_product_shuming[0]['value'] = $value->shuming;?????????????????????? // use ubercart
* X- \% Y) u) H( H" O* ?0 w: G8 s?? $node->field_product_congshuming[0]['value'] = $value->congshuming;: ]% O" J: O, }
?? $node->field_product_fushucongshuming[0]['value'] = $value->fushucongshuming;0 b! ?/ M) C6 ^9 E$ |% [6 ?$ b- B
?? $node->field_product_zhuzuozhe[0]['value'] = $value->zhuzuozhe;
3 V8 k% R, y- z1 m: F?? $node->field_product_chubanzhe[0]['value'] = $value->chubanzhe;
1 Q8 @1 q& d& A/ I5 \& W& Z/ H?? $node->field_product_benbanbanci[0]['value'] = $value->benbanbanci;
( b8 ?2 ^. O6 f?? $node->field_product_yinci[0]['value'] = $value->yinci;, ~; n3 X* Z( d% J4 f! e# d
?? $node->field_product_dingjia[0]['value'] = $value->dingjia;
9 |! u* m2 @1 [8 R??
/ O# N, ]% Y) y, t5 l/ e) n7 m8 F; w// if $value->tongjifenlei is not null then :$ R* f$ l2 Y# _* h: n& w
5 O) l; J0 V) z* _) R?? if($value->tongjifenlei){$ \0 |/ `( D& r0 v: m
- V. P6 [. _! Y3 K; P3 p7 B/ t) l! {?? $tj_vid = 1;# R7 `+ K, E* F/ {8 |
5 u- x0 B; K* u. v* b" F
?? if($tid = (int) db_result(db_query('SELECT tid FROM {term_data} WHERE name = "%s" AND vid = %d', $value->tongjifenlei,$tj_vid))){????. W$ u: y( V! {
???????? $tj_tid = $tid;$ F: x' @) u6 f2 q0 j1 E$ J; b1 g
???? }else{0 f' L( X" u+ B
2 e8 X% Q/ @6 {$ l4 \# B# _
???????????? // vocabulary ID is hard coded for this example
: G/ ^' E5 F/ l# h. r- e?????? $autoterm = array(
% l, J2 O. Y% R; N; w???????? 'name' => $value->tongjifenlei,?? // or whatever you want the auto-term to be named
0 ~# p0 p5 `; C/ t& \???????? 'parent' => 0,6 G7 v% v0 |4 r: X! A. H1 i2 g' c
???????? 'vid' => $tj_vid,; q. o; E4 {. S5 X6 I( Y5 S
?????? );
+ `7 V' `7 C* _' }: \9 W???????? taxonomy_save_term($autoterm);8 V( ~, c8 n( C, G4 \
???????? $tj_tid = (int) db_result(db_query('SELECT MAX(tid) FROM {term_data} WHERE vid = %d', $vid));- s q1 u6 d$ K6 k' h
???? }
: q+ Y K* [. \1 c$ z???? $node->taxonomy[$tj_vid][$tj_tid] = $tj_tid;# ]. Q5 J, S) C, d! G$ Y
. {$ U1 W) r" v. `
?? }7 ^0 v2 K) z9 H( g7 l
% Y1 k& ^1 E5 A- t?? node_save($node);8 O: I6 ~( l" d; x" h
% }7 a% M( N6 ^3 n7 g! m
}??
7 Z1 ^- f P7 v1 m, e1 A& e0 c# C; z- A [
drupal_set_message("Import Successful!");
4 |2 W! b8 U' h+ F$ b}) v: y3 O' T B* J. n
?>, ]$ ?5 i+ i$ Q' B
9 e0 h2 h5 B! k9 T# d9 j' U8 Z# g% d2 [' u+ g) P. d3 f
9 a% e0 M% e) Z0 ]' l% r: m( {# N k$ \3 x/ B e" d# _
: ?; P2 m, w5 l7 T |
|