国外设计欣赏网站 - DOOOOR.com

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

[Drupal教程] Drupal教程:批量导入XML数据

[复制链接]
发表于 2-1-2012 22:03 | 显示全部楼层 |阅读模式
如果你想把其它网站的数据批量导入到drupal系统中,下面代码对你有可能适用。前提条件是,你要把原来网站的数据生成XML格式!5 c- l2 _* r% e9 D2 U
生成XML的工具有很多,有个叫 xml.class.php的类,可以试用一下,你也可以自己写PHP代码来实现。/ X6 p  e" u5 s
生成XML文件后,通过这个模块,直接上传,就可以把它导入到drupal系统了。
. j+ u& Z7 s! n+ ]该模块还可以对你导入的数据进行自动分类(Taxonomy整合)。
$ a) s, N$ V& y/ f  b0 b" v* e) m以下为该模块的部分精华源代码,欢迎发信问问题和提出各种修改建议。5 H& ^* H* G! x9 j/ M
如需要完整模块,请向站长索取。# d! ]# F# p. i" ]( \

9 t: X" y# |2 \$ v- A3 N- Y" n<?php+ p  ?* v" V% v1 W
function import_form_submit($form, &$form_state) {4 }6 x1 X+ q( L0 x& A2 ?/ C
+ M, \" Z/ D3 `# J% N! {
?????????? $validators = array('file_validate_extensions' => array('upload_file'),);
7 x# C5 J0 Y2 \# s6 ~% ]& d?????????? if ($file = file_save_upload('upload_file', $validators)) {5 Q5 O" f# W7 F/ e2 _
?????????????? $fd = fopen($file->filepath, "rb");' L* j" @: @& i; ~7 Z0 ], [/ G
?????????????? if (!$fd) {; s  u1 ?% S; ]3 W# |
?????????????????? form_set_error('upload_file', t('Import failed: file %filename cannot be read.', array('%filename' => $file->filename)));' l! f" g* x, w: ?" d  i+ ~2 u
?????????????? }2 c2 M$ y: d0 P- b
?????????????? else {
8 L; Q% h/ `5 I5 q?????????????????? $info = fstat($fd);% a( _; F7 N0 U* J! X# H) Q" A  ^
?????????????????? $len = $info["size"];; G: \: v0 i: _, E9 R
?????????????????? $text = fread($fd, $len);( T1 Q  y$ j7 U/ S5 m0 Q8 T' k
?????????????????? fclose($fd);( q' P( J7 \  j! W3 |2 f0 v
?????????????????? drupal_set_message(t('Loaded file %filename. Now processing it.', array('%filename' => $file->filename)));( k1 _8 J! v6 k9 T* q3 d3 C. e
?????????????????? $form_state['values']['file'] = $file;/ r# f# W; {- r! P" d3 h
$ D% G5 R  o7 G" |4 d, u
?????????????????? import_xml_invoke_import($text, $form_state['values']);
& y! X5 Y/ _) P: t. i& r' C?????????????? }7 ~5 k4 M8 [# G8 N
?????????? }
( j4 i+ r0 C( N, {2 I( c?????????? else {& _7 _; R: K1 {" e. B( l
?????????????? form_set_error('upload_file', t('Import failed: file was not uploaded.'));1 J- g8 g5 q3 G/ E
?????????? }2 l  ^2 p2 i" x1 h. D2 V
}
  j2 Y" p  E( |$ [8 X2 ^9 E" G3 N7 P! x8 U5 C4 p

5 ?& o% m) M7 Y4 S, u% B2 Y" ?1 `- S) k. n$ n& B
9 O& m+ k5 O' n/ A6 \
function parseMol($mvalues) {
1 O, h% Y. X: G& k# ]???? for ($i=0; $i < count($mvalues); $i++)
7 N& V: C. o( s' U8 f" e' p???????????? $mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];
$ a: C- T) o# h6 B3 s' Y( z) Z???? return new ImportXml($mol);
' N8 `1 C( [6 f; P% A; O! Y7 `}- J4 ~" F2 E! e4 Q& }- o5 L
# Y/ p4 H5 u7 _0 y
8 g( V0 ?& {9 e( F5 P3 I
class ImportXml {, Y$ d& U: f$ W% Y; H0 u
??6 R! U5 Q' B9 X, w0 f" z9 C
???? var $tushushangpin;??8 i! t  D1 y! m
???? var $shangpindaima;??????1 f# i9 W2 F* Z4 r$ L4 h1 M, N; Q# B
???? var $shuming;; v5 d; t3 S, r( ~* X
???? var $congshuming;2 N- E7 B  X5 c( v" B2 z1 b2 V' r
???? var $fushucongshuming;
0 s  _  Z8 b3 `# N' c" _???? var $zhuzuozhe;
! B% `8 V# F7 U???? var $chubanzhe;??1 |: e$ w$ x: f) H
???? var $benbanbanci;??????
* v: g; X1 D) w6 O+ `# \3 q1 Q???? var $yinci;/ f, H8 _4 _7 [$ t: `
???? var $dingjia;) t5 M' \( C  _  S6 t

; n( `$ ]$ y1 ~. j. }, ?: o+ r! W! m: O
???? function ImportXml ($aa) {/ t0 y$ B( C+ C" J5 }3 U  O
???????????? foreach ($aa as $k=>$v)
3 x% Z! ]. z5 |- G5 ^' K" j' c. v???????????????????? $this->$k = $aa[$k];% R% `- E' N& ^1 ~: Z
???? }
1 V7 i/ S3 k) q$ v' r# d: n0 y+ u}
% @% z5 @: [" T9 |8 H2 D/ N! a. V+ G: H/ d  F" f  q0 @! b" g* T

4 @* S! H; S! {
5 U& i$ N, {8 }  K
. a% B4 K9 g4 R% w& l& S$ ofunction import_xml_invoke_import(&$text) {4 I7 Y7 x- ?9 M$ d

2 \" R: B; Y0 l// parse the data:# W8 c- x! q' M8 @) Y$ Y
?? $xml_parser = drupal_xml_parser_create($text);
' }& x' r# S: j# q?? xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0);
& q7 o) p' ~$ |# e?? xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE,1);0 a- V4 s0 t7 U3 J( K+ s
?? xml_parse_into_struct($xml_parser,$text,$values,$tags);! l4 V$ Y1 R' s9 e" ?8 q
?? xml_parser_free($xml_parser);
4 d; G: L* [# v* _8 E) A  U& s1 ]/ o1 o& ?# V
// now begin fetch the value' _0 P/ Z' @5 M$ E( u

& I  B0 K4 @8 @foreach ($tags as $key=>$val) {- a1 N) s: j- I. w7 J0 V- h% Y0 V
1 W6 l& j" V6 b+ S; e7 y
???????????? if ($key == "tushushangpin") {
% f6 G. v% i5 X5 z& f& o/ q
8 a* a0 |' L# C- i( V???????????????????? $molranges = $val;
1 K6 t+ W+ L4 l8 e5 q1 p???????????????????? for ($i=0; $i < count($molranges); $i+=2) {4 a: Q& E4 O& l( U) ~
???????????????????????????????????? $offset = $molranges[$i] + 1;
. N. S6 P* d- _" z0 ~???????????????????????????? $len = $molranges[$i + 1] - $offset;
# d7 z8 J1 [( I1 v4 X1 p6 N: ~???????????????????????????? $tdb[] = parseMol(array_slice($values, $offset, $len));/ [7 }- J4 C9 |: q$ {. f( D& X, H
???????????????????? }
( ^- b6 X' c  z" _% Q( y# o2 j???????????? } else {
9 m/ j7 n; \. ?" f1 }0 z???????????????????? continue;4 W. J+ p7 S* R1 m( V( W- E% v( d
???????????? }
" G; t- Z" a( y+ B" E+ p' N???? }1 K: C* F/ b' s6 L

: l5 t' g! `2 u* k# X0 dforeach($tdb as $value){2 g- z  g! b, o+ S
8 h  V7 H! ?- A( G+ |' c
?? $node = array();# c6 R# `+ a; r3 A) }
?? $node = new stdClass;* b" a- C7 @4 ]0 l# u" u
?? $node->type = "product";0 g& ?: b% w. d( }  J& e7 C: }
?? $node->status = 1;
0 ]% f$ }9 \: W( M?? $node->uid = 1;3 c" f, }# S5 d8 I$ q) h
?? $node->title = $value->shuming;
# @+ |; V, f6 t+ `& e! S) k6 t% g" D// $node->body = $value->neirongtiyao;+ N4 d/ A7 I) p5 R$ e& o

7 M! J) Y$ f* M# p' i?? $node->field_product_shangpindaima[0]['value'] = $value->shangpindaima;??
3 C" P, I; }$ v. e! x3 M  @?? $node->field_product_shuming[0]['value'] = $value->shuming;?????????????????????? // use ubercart
1 |0 o; c& D/ ?8 ]/ ?3 X# l, Z?? $node->field_product_congshuming[0]['value'] = $value->congshuming;- v' k4 G8 p- y9 U: q, N
?? $node->field_product_fushucongshuming[0]['value'] = $value->fushucongshuming;( D* w/ `/ Z6 V4 H5 Q
?? $node->field_product_zhuzuozhe[0]['value'] = $value->zhuzuozhe;4 J; E) y* c& c+ a3 d8 O8 U2 x6 B
?? $node->field_product_chubanzhe[0]['value'] = $value->chubanzhe;1 ?, `& f" {: g; z
?? $node->field_product_benbanbanci[0]['value'] = $value->benbanbanci;
; u( p2 V! L; C?? $node->field_product_yinci[0]['value'] = $value->yinci;
0 X1 F* p- O* ?. L. S% P?? $node->field_product_dingjia[0]['value'] = $value->dingjia;3 m7 L* i' R# N
??  E/ I8 D+ M# S
// if $value->tongjifenlei is not null then :
0 \1 O- o: b( i& `" F  O2 u/ K) _8 x7 K. r- B% B( N. _
?? if($value->tongjifenlei){
* F& I" ]4 |" T! O1 U- T0 s" A- B: M2 S1 s4 o! A2 v
?? $tj_vid = 1;+ \  U/ y2 j5 _* E! X4 {( s

) T: p# |, ]$ w5 Q?? if($tid = (int) db_result(db_query('SELECT tid FROM {term_data} WHERE name = "%s" AND vid = %d', $value->tongjifenlei,$tj_vid))){????. j, e1 |% m5 d2 z9 z5 K9 j" Z
???????? $tj_tid = $tid;2 s2 b$ R6 P2 j# q" d/ G8 l
???? }else{5 O) U2 D- W9 B* X* Z/ d

  N3 _* U! K8 y: T" U$ r0 E???????????? // vocabulary ID is hard coded for this example* o  z$ P. M% u1 ]
?????? $autoterm = array(- U! Z- _7 [6 j2 G7 X6 e) Q9 q- o
???????? 'name' => $value->tongjifenlei,?? // or whatever you want the auto-term to be named: P2 p+ S: F8 o# F3 c4 ?( I1 ~
???????? 'parent' => 0,& e9 f7 K' a- P$ F2 Z/ I
???????? 'vid' => $tj_vid,; V1 H% z, Y$ P( C
?????? );
! v, x2 f/ n  X7 X: U???????? taxonomy_save_term($autoterm);! J0 ]" j9 q* `2 h
???????? $tj_tid = (int) db_result(db_query('SELECT MAX(tid) FROM {term_data} WHERE vid = %d', $vid));' X- C/ @: I# u6 q8 p
???? }# N, U$ e" T! T3 N
???? $node->taxonomy[$tj_vid][$tj_tid] = $tj_tid;/ a9 g) S$ c9 c5 S

: W. I2 ^8 E( Q( V5 r/ y?? }
4 O( |: s5 W5 i8 J5 x
3 p" e8 t0 y! t- S0 m?? node_save($node);
/ O- m* `6 \  z3 I5 |9 a2 E" c. D) a, m0 M1 t& g$ \3 w6 @* Z( `: e
}??' K! y8 D2 [6 T- E! n
4 h7 o. h% d6 @, Y# Q$ ~$ A4 h
drupal_set_message("Import Successful!");
2 @' K. ?. P/ J5 Z8 `6 ~+ v}) A9 S( G( b, M9 X6 B! n
?>
* l- ]; ]- \& H6 B3 J+ G6 V- b3 ?: L- w5 U  p: L: j

) P9 q& m- q$ t. ~5 s4 b$ z  @
, U9 f  {9 C" t
! y( v' B; L' |7 O; a
" ?1 ?* e6 H2 e7 u# J

|2011-2026-版权声明|平台(网站)公约|手机版|手机版|DOOOOR 设计网 ( 吉ICP备2022003869号 )

GMT+8, 12-22-2025 12:30 , Processed in 0.069599 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表