如果你想把其它网站的数据批量导入到drupal系统中,下面代码对你有可能适用。前提条件是,你要把原来网站的数据生成XML格式!
/ m5 U3 B& a. N: p, F生成XML的工具有很多,有个叫 xml.class.php的类,可以试用一下,你也可以自己写PHP代码来实现。
& e0 y% i1 [, [- B' m; n. T$ `" V1 g生成XML文件后,通过这个模块,直接上传,就可以把它导入到drupal系统了。
; D/ y% E* T* L0 v. X该模块还可以对你导入的数据进行自动分类(Taxonomy整合)。
u+ ~5 W/ E2 S+ L% j/ T以下为该模块的部分精华源代码,欢迎发信问问题和提出各种修改建议。! N! e e9 Q# D5 E
如需要完整模块,请向站长索取。 d" @& `) P$ p3 l5 t* f$ `! R" S! s5 b
4 o3 j, @) r% O, j s
<?php5 v" Z k! i/ G8 c
function import_form_submit($form, &$form_state) {
: j: C4 ~( h* b
7 o& e1 E" K! r t- o( t?????????? $validators = array('file_validate_extensions' => array('upload_file'),);7 }6 c& l4 v$ A" g: g! O; f' A
?????????? if ($file = file_save_upload('upload_file', $validators)) {$ @0 e& e" @: E1 l
?????????????? $fd = fopen($file->filepath, "rb");
) r9 J& f0 R! q4 N?????????????? if (!$fd) {
1 \4 D- [0 x2 |1 \/ }8 l% ~2 ??????????????????? form_set_error('upload_file', t('Import failed: file %filename cannot be read.', array('%filename' => $file->filename)));! P2 h7 R1 w5 K$ n2 u4 _
?????????????? }' C' a( R) Z7 K
?????????????? else {% g* {- E8 U; F) o& V' W2 Q
?????????????????? $info = fstat($fd);
% }* a3 |3 A# N ~: P) Z2 e?????????????????? $len = $info["size"];
k$ I* K) e9 |8 u?????????????????? $text = fread($fd, $len);
2 B" r4 t9 k) W?????????????????? fclose($fd);
! V3 n7 R. _5 O5 i! v?????????????????? drupal_set_message(t('Loaded file %filename. Now processing it.', array('%filename' => $file->filename)));
3 a* I5 \6 A% g. B% G4 o?????????????????? $form_state['values']['file'] = $file;
! q' m1 V3 v$ u- S1 e/ y
8 z3 c- l+ S( C" p- m/ q( G* i4 }" Z6 H?????????????????? import_xml_invoke_import($text, $form_state['values']);
/ p6 y7 m. n. p. J5 |" `$ r6 H?????????????? }* e M8 @/ n! i- U. m/ x7 e i
?????????? }! r1 y! I7 }. n9 L$ o3 o
?????????? else {
7 k- H1 Z g0 e?????????????? form_set_error('upload_file', t('Import failed: file was not uploaded.'));
$ L' M& ~4 \% e9 e: ]$ X# ??????????? }
9 _- W6 ~8 x. X0 C) R3 c& r& B}$ q1 \: T; |* m; u7 p- `
/ b9 e+ }6 E3 H! e" g. w/ _: H
! d5 W( H- m) ^8 \4 a3 w1 @3 l8 W
' v3 K& N: i7 k7 X
function parseMol($mvalues) {- n2 }2 X8 B% s9 [; ^
???? for ($i=0; $i < count($mvalues); $i++)
3 [: b6 D) S0 L$ q$ c. o& b???????????? $mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];
5 M8 Y( K3 h- E7 r( d???? return new ImportXml($mol);! k) g3 z h) N/ ?) @
}' r: n7 b# \) C, I& w% R: G$ d
3 p; O( A% J; e
1 n3 U; L" \( `( ]+ m& y' _8 vclass ImportXml {! C# F C( v+ ~0 q w0 i! b( Q
??
) M% U" _- u" B0 ]. t???? var $tushushangpin;??# n: ]; a" u3 V$ ^' f
???? var $shangpindaima;??????
; U- \7 d6 j7 p ^% I3 a$ L# x???? var $shuming;
- t! W; W B& f) I" b- V& Q???? var $congshuming;2 h7 ]. F, t- N$ r7 R
???? var $fushucongshuming;* {3 x: D* B; f( v L$ P3 Q, t
???? var $zhuzuozhe;
3 X. a1 v# c& Z4 o( t" m/ t: i; U???? var $chubanzhe;??: ~/ ]% f; o" C$ j, ^# K3 u
???? var $benbanbanci;??????+ C; | s5 E; F$ U, F: S
???? var $yinci;
" p: a8 \4 P" D Z- n2 G8 I3 E: L( g???? var $dingjia;4 v0 }+ ]$ y2 b" n- g( M( [
! G# x. _3 Z0 x* o7 l, }
: R. K' y u, ?9 A! H0 p6 p) G8 Q
???? function ImportXml ($aa) {# O& _/ }7 I4 e. o o' _0 R
???????????? foreach ($aa as $k=>$v)
g0 j! m; ?# x0 X/ [$ F$ v- y* p???????????????????? $this->$k = $aa[$k];& c0 g0 C/ B3 @& R; ?5 ~
???? }
. o# H9 Z; q Q, u- ~5 \) K}
8 i1 X7 @- E9 L; |+ {
3 h# Q$ @0 Q4 l' ~0 A$ \( F2 j5 n3 ~6 J. I( v
. g" o. e9 w$ W- F2 t; ]9 J
7 b, y" J! v- Ufunction import_xml_invoke_import(&$text) {
( Z% K' b& B, i* h' z7 g6 C) K; Z* j5 h# c1 E7 `: R# o
// parse the data:: Q" \# P6 b3 V3 }; Z3 U: k2 U
?? $xml_parser = drupal_xml_parser_create($text);
: @6 D, }6 ^3 f) V9 } |( L. ]?? xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0);# `# q1 N& y8 @5 j+ C+ b2 ?" L
?? xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE,1);
. x4 C/ a7 \5 h( m! v4 `?? xml_parse_into_struct($xml_parser,$text,$values,$tags);% k1 x2 J0 g+ p4 L; w6 u( ]7 z
?? xml_parser_free($xml_parser);
) n. \' t6 f0 U8 h4 x; I( _$ J1 r$ J1 ?
// now begin fetch the value
. L: Z% \5 w. E" H* l9 u* i( A( A
foreach ($tags as $key=>$val) {
% T3 k6 [) @- V9 V+ k+ w
0 o- U8 K' Z$ w$ u???????????? if ($key == "tushushangpin") {$ a8 Z6 R+ @; l8 `2 S0 [0 M
! f% ?) t3 n) b" G" g9 r???????????????????? $molranges = $val;2 n9 b( X1 y: h9 i
???????????????????? for ($i=0; $i < count($molranges); $i+=2) {
/ n2 Z n: z* X1 p6 g???????????????????????????????????? $offset = $molranges[$i] + 1;+ a' T; u! ]$ Z
???????????????????????????? $len = $molranges[$i + 1] - $offset;
t* _5 N$ n: c8 q8 o???????????????????????????? $tdb[] = parseMol(array_slice($values, $offset, $len));
* I2 P! }( J8 ]6 Z* V4 K2 Q???????????????????? }
3 I$ _- ?" r% }7 Y" c7 i! v???????????? } else {
0 }3 C: m7 h l3 C6 I8 D???????????????????? continue;
' [, M% w( f9 n: N" a???????????? }0 D* Z* S4 ?' ^: V9 J
???? }' b5 D8 `' a6 v& h M3 k7 j1 Y
3 x. [ I$ e* t9 }! z" n- x
foreach($tdb as $value){
5 z: v$ y% `8 l: U5 L; N% j/ ^- e% b# x9 d
?? $node = array();/ N/ N: O2 T3 [( Y
?? $node = new stdClass;0 w$ o7 Y6 d6 X' V, }$ }( H. n, y" c
?? $node->type = "product";
) u7 U+ P# n; Q: ??? $node->status = 1;
) h. R8 ^* I) Y$ Q/ D* F9 x0 b?? $node->uid = 1;4 d, b$ e- y3 _! [' B T
?? $node->title = $value->shuming;3 p& T. F* p' d& b8 j. o; T) ?" w
// $node->body = $value->neirongtiyao;, q& e/ y3 M) t5 G
1 U: x/ X% Z* A8 H0 R @?? $node->field_product_shangpindaima[0]['value'] = $value->shangpindaima;??% p, h$ i& g. o5 U5 o2 _: V* J
?? $node->field_product_shuming[0]['value'] = $value->shuming;?????????????????????? // use ubercart. b# K4 B1 L8 i0 z$ O. F, f% y! x' K# [
?? $node->field_product_congshuming[0]['value'] = $value->congshuming;
9 l+ r' s9 ~; g1 k& t?? $node->field_product_fushucongshuming[0]['value'] = $value->fushucongshuming;% O Y0 |' G9 P/ k& ^
?? $node->field_product_zhuzuozhe[0]['value'] = $value->zhuzuozhe;
( m5 {$ i# p: E; a b" H?? $node->field_product_chubanzhe[0]['value'] = $value->chubanzhe; T+ m1 u0 Y" c3 n }" L/ J( m
?? $node->field_product_benbanbanci[0]['value'] = $value->benbanbanci;
% ~* s8 l- K" j* r8 r- y. q* e?? $node->field_product_yinci[0]['value'] = $value->yinci;
2 J. n" F C; @/ _; M8 {% T& x a?? $node->field_product_dingjia[0]['value'] = $value->dingjia;
$ P! Q: t/ Y2 r) ]2 `/ X??
0 ~) q- p; b! p6 P// if $value->tongjifenlei is not null then :4 p4 X! N' t) m' h
4 P& O! m) b* i7 {?? if($value->tongjifenlei){: D1 u7 R- B1 m! f, Y! \
7 q/ J, l n: j4 a3 P?? $tj_vid = 1;0 g. |* y( N7 E& V, J! e* Y$ @2 i0 F; S
; ~" g' B, m8 u, _
?? if($tid = (int) db_result(db_query('SELECT tid FROM {term_data} WHERE name = "%s" AND vid = %d', $value->tongjifenlei,$tj_vid))){????
- U' U$ S6 \% M1 _. }8 r???????? $tj_tid = $tid;; U0 `" Z1 p9 [- H+ X0 f
???? }else{
: D: A/ [& a2 S J' x5 C8 N9 i1 [4 l7 K& Y/ S* X6 ~) _
???????????? // vocabulary ID is hard coded for this example
1 P9 S5 l2 s& _; [?????? $autoterm = array(
5 A7 q. f" c. q- ~) @& Z6 _???????? 'name' => $value->tongjifenlei,?? // or whatever you want the auto-term to be named
/ h/ a# |, T% M/ J. V# ?! a2 |???????? 'parent' => 0,. k8 p- j/ e5 [# b
???????? 'vid' => $tj_vid,' B( P6 f% U5 o
?????? );
. G% l1 V, [+ H" ~4 U???????? taxonomy_save_term($autoterm);
! _" u1 u0 P+ M x???????? $tj_tid = (int) db_result(db_query('SELECT MAX(tid) FROM {term_data} WHERE vid = %d', $vid));9 Z: s1 R" P @, x
???? }
+ q8 f* M5 U) G4 C% A5 B8 ]+ E/ f# J???? $node->taxonomy[$tj_vid][$tj_tid] = $tj_tid;
% f2 q& f$ j* K; `- H, X" y- ~6 T- E5 }% B
?? }7 D3 c$ ]# t: Q# j u+ B) H: G- ~: @
3 @1 D6 f" M( V1 M% @! `& `?? node_save($node);4 U1 k6 }* b& U, b/ q2 t& L* `" Z
, l" V3 N2 t- B: o" J% L6 Q}??8 Y7 ?9 w! H4 H/ p' W$ I; ~4 ~. V
1 z7 }, k$ E* R; |1 A/ x
drupal_set_message("Import Successful!");0 U9 q$ C3 a4 L. j$ K N
}
- ~3 q6 w, w5 r?>
|5 O* |1 M, C7 V. Y" E& X- m# Z7 E3 n! O8 F- W" l2 J
) w" l/ r; P8 c4 y6 m5 k+ @1 ~# D, Y1 y/ C% i# J2 S2 d
" g- y* _( P* @) O$ i% }4 `) B4 s0 ~. s6 y J
|
|