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

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

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

[复制链接]
发表于 2-1-2012 22:03 | 显示全部楼层 |阅读模式
如果你想把其它网站的数据批量导入到drupal系统中,下面代码对你有可能适用。前提条件是,你要把原来网站的数据生成XML格式!
& L4 Z7 h0 l+ \0 D. }) d5 E- p生成XML的工具有很多,有个叫 xml.class.php的类,可以试用一下,你也可以自己写PHP代码来实现。
1 i! R  g, }) |生成XML文件后,通过这个模块,直接上传,就可以把它导入到drupal系统了。  E% I* b% T2 f. a8 A
该模块还可以对你导入的数据进行自动分类(Taxonomy整合)。8 h% ^9 @! e" `/ D
以下为该模块的部分精华源代码,欢迎发信问问题和提出各种修改建议。
& {, @7 \; T: b. b如需要完整模块,请向站长索取。
- T( L; C; {% L1 _5 n8 c) x) C6 [& @' D' R3 ?8 L. _" h6 I
<?php- K! y  y2 \; I
function import_form_submit($form, &$form_state) {
. b9 d2 d6 p* e
! V1 r7 Y( Z) e# \4 S: f?????????? $validators = array('file_validate_extensions' => array('upload_file'),);
# t8 S4 d& {( f7 m3 X0 F) N' K?????????? if ($file = file_save_upload('upload_file', $validators)) {
" E" ~+ s5 e6 a- c. r7 O?????????????? $fd = fopen($file->filepath, "rb");7 k* k& g4 U5 ~
?????????????? if (!$fd) {
$ p! a2 b& a5 K/ k?????????????????? form_set_error('upload_file', t('Import failed: file %filename cannot be read.', array('%filename' => $file->filename)));
% x4 o* M* |0 B; x& v- _5 u?????????????? }/ h. V# d" I+ U! n/ d
?????????????? else {
, z- k* G6 t7 ^' Z3 F- H' @?????????????????? $info = fstat($fd);
* W9 i# D* A+ W' ]  v- _8 T+ j?????????????????? $len = $info["size"];- K/ [! n7 Z; z3 d
?????????????????? $text = fread($fd, $len);
; Z3 k' _" {; U6 e* L?????????????????? fclose($fd);
9 t3 D  Z* `! b8 M?????????????????? drupal_set_message(t('Loaded file %filename. Now processing it.', array('%filename' => $file->filename)));
! O  O9 A6 y$ U6 m( w; I! {?????????????????? $form_state['values']['file'] = $file;
' U9 i0 k* q5 s3 t! v4 {
2 v. E* j& L; ]  e?????????????????? import_xml_invoke_import($text, $form_state['values']);( z. v8 H6 F& X1 Q/ W, h3 l
?????????????? }2 R; b# [* ]# M9 o) V
?????????? }
8 W2 o4 m: Q" q4 D. [2 d?????????? else {6 L8 ^$ n4 m: H, I
?????????????? form_set_error('upload_file', t('Import failed: file was not uploaded.'));/ B' h2 _1 v' r9 s, _  e
?????????? }
' A2 j( |4 B( k1 t5 f1 l( Q: x}
* V# r  E% V; _! i5 u' j
' c5 i+ q' J" J  Q1 F# _- L, ^
4 f' j6 S8 M+ Z! W
: z/ a7 W3 `+ k  q0 d
# V/ S$ H1 P, cfunction parseMol($mvalues) {
: ]  _; Q$ ]/ b! Z2 [???? for ($i=0; $i < count($mvalues); $i++)
+ T; E% G; A2 C& d6 S???????????? $mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];# U. F2 m1 Z. J* X
???? return new ImportXml($mol);, t1 V0 P( |! |- L# p  F
}, T! J; ~+ d5 H- l8 C

4 y3 L! v5 r) o* c% j# `6 c' l) Q$ g% x5 q
class ImportXml {# v& U- |2 s* k% V/ j7 ^! `
??
! ?$ ~+ G- e# k. I???? var $tushushangpin;??
) m0 P2 R8 Z9 e2 v+ [???? var $shangpindaima;??????, M4 H) x9 D# z7 v- [& \
???? var $shuming;" D: [# @. P( S
???? var $congshuming;, G1 t! x5 R8 j
???? var $fushucongshuming;
) B. s' L$ r2 g- Q6 m- P???? var $zhuzuozhe;: G; [0 J2 }  |6 d. y" `! k6 S
???? var $chubanzhe;??
. H% ?( P' G: ^" ]) |???? var $benbanbanci;??????
. ?+ v5 I+ }0 X5 ?+ }7 P???? var $yinci;1 Z  X% u' c/ ^' S2 R
???? var $dingjia;5 d- L$ |9 v7 `$ l  L& J, N5 \

3 a: C/ o* Q# ~) e) s
, }5 M% h+ }; g" C???? function ImportXml ($aa) {
5 m3 E& T7 v1 k7 L???????????? foreach ($aa as $k=>$v)
. y' Z3 h4 h% r4 |! L$ H4 Q???????????????????? $this->$k = $aa[$k];& e- W* z% i3 o
???? }
& o5 e+ a) t8 B" T# ^}
. m! }& D3 C; x! f
6 t; a5 H* y/ g$ ~( J: S! S
! T- O$ H4 P8 x- n/ ]5 g
# k6 G- G: W, `! ~: k
. E1 E" ]' U- U' i6 O' w8 _4 Y' Wfunction import_xml_invoke_import(&$text) {
. G+ p. X1 ^* b7 U. K
2 }7 G2 {  Z1 z// parse the data:6 v+ Y/ R- w  X; o
?? $xml_parser = drupal_xml_parser_create($text);& i8 K4 e) e3 c+ |
?? xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0);
! p( [2 {9 ]7 k2 e9 l6 Z+ N( R4 b?? xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE,1);
2 e8 [9 J# R; T% @0 j! X' }. i* G?? xml_parse_into_struct($xml_parser,$text,$values,$tags);
- L" e( W2 c* O( q$ x% Y( B?? xml_parser_free($xml_parser);3 Y& k7 @: T1 Z2 u: I2 c0 j
/ k$ a: {3 J3 T  X& q
// now begin fetch the value$ R/ h! X5 [8 S! d8 {3 e
0 F+ u7 Z  {2 O  f3 n) G# R
foreach ($tags as $key=>$val) {
+ Y0 y5 ^+ _0 n8 C8 W2 |4 P- G9 p5 g, z) c7 X8 g, l
???????????? if ($key == "tushushangpin") {
; A5 E; \! A; J" W3 U6 O
% b' l: A0 H# r6 ~" b: I' V???????????????????? $molranges = $val;# H% E" o+ z5 N2 o; w! W) i: Q, O
???????????????????? for ($i=0; $i < count($molranges); $i+=2) {
8 I. }5 E4 j, g$ R+ K' \; P???????????????????????????????????? $offset = $molranges[$i] + 1;
9 l  a; L' X2 i0 N( P???????????????????????????? $len = $molranges[$i + 1] - $offset;
' T; X7 |  @% k; c$ J8 `- Z/ f???????????????????????????? $tdb[] = parseMol(array_slice($values, $offset, $len));
/ ]$ @$ ]4 S( l- m" _$ l/ H4 o' C. W???????????????????? }
$ Z# z$ s, F# R: l- f# P6 D???????????? } else {
7 n* A5 @5 a! a4 u3 N???????????????????? continue;3 a( i% @) G% b' {0 r4 n) m7 D
???????????? }
* ?2 E( y3 U; @  `) b- B9 B???? }
1 |8 W* A1 F+ f4 A, L1 b. S) f: f# }( W2 _8 s3 m! Q
foreach($tdb as $value){  Y$ q8 l! N3 \! v3 d% |+ J8 M

$ u% ~, Z4 s* ]' n! O?? $node = array();2 C9 u" ]! s/ w8 G- l6 y  C7 N$ y
?? $node = new stdClass;: v% ]% X2 V* H/ i) L
?? $node->type = "product";
: J  f! Y/ @0 _; L) s?? $node->status = 1;
; k3 x5 @. E- G  a& X8 W2 X?? $node->uid = 1;
% v4 o% ^- K+ F( f5 B; k?? $node->title = $value->shuming;
: r; @( U, y  d/ z// $node->body = $value->neirongtiyao;
* j! @5 \/ H' m, }+ Q! o
0 N$ z1 y( m. ^% y8 H?? $node->field_product_shangpindaima[0]['value'] = $value->shangpindaima;??
/ O. l  V% V% W+ h3 R+ V2 B?? $node->field_product_shuming[0]['value'] = $value->shuming;?????????????????????? // use ubercart0 G. ^% [- ^8 q6 q
?? $node->field_product_congshuming[0]['value'] = $value->congshuming;
% P5 t2 J* i. @?? $node->field_product_fushucongshuming[0]['value'] = $value->fushucongshuming;
( _: W" b' n! u! e?? $node->field_product_zhuzuozhe[0]['value'] = $value->zhuzuozhe;
1 u# l' v( c! _  r: L) s% E?? $node->field_product_chubanzhe[0]['value'] = $value->chubanzhe;
$ U+ s) y, U( H; V?? $node->field_product_benbanbanci[0]['value'] = $value->benbanbanci;8 |+ H1 o- R' P0 t# x. S$ E
?? $node->field_product_yinci[0]['value'] = $value->yinci;
) H( B' d/ w8 D" E. p2 N1 W% w2 K?? $node->field_product_dingjia[0]['value'] = $value->dingjia;
* g" p# o8 N+ ~5 D4 m, _??% s, w6 O  W. }$ ^! f
// if $value->tongjifenlei is not null then :
0 A7 c4 D5 Q4 p$ P4 D, E0 t$ i' e* d; L5 h, j9 ?4 s
?? if($value->tongjifenlei){5 p  e, F6 j  h8 R* S
5 s$ \% Y. k6 b5 |" o
?? $tj_vid = 1;
4 f  l, |3 \3 K- C, c" r
4 l4 e  b# s+ B: V0 z3 ~?? if($tid = (int) db_result(db_query('SELECT tid FROM {term_data} WHERE name = "%s" AND vid = %d', $value->tongjifenlei,$tj_vid))){????
" H% ~/ C& q& g* O???????? $tj_tid = $tid;
, _8 j! w9 n. K, w* A: P???? }else{$ ^' F( H6 |& \) h! ^" ?% G

6 }# o, S$ A5 D, v???????????? // vocabulary ID is hard coded for this example) ]' \: _( ?- Y, d7 ]5 m: g
?????? $autoterm = array(
; X- E. i7 g9 U0 b) v% E+ B???????? 'name' => $value->tongjifenlei,?? // or whatever you want the auto-term to be named
: Q& b5 e6 |0 [: ~. X$ p( s8 l???????? 'parent' => 0,
# y! x' G0 q; T, j1 B3 p???????? 'vid' => $tj_vid,4 o6 |$ x- h% c# y+ k- W
?????? );2 [# ^2 R6 ^. w/ |  w: j4 r) ~
???????? taxonomy_save_term($autoterm);
! |" `  b! e: w; X???????? $tj_tid = (int) db_result(db_query('SELECT MAX(tid) FROM {term_data} WHERE vid = %d', $vid));4 i7 n* E! D& G/ @1 Z8 R: i3 @4 X
???? }8 k3 y9 g. T' R7 y) O
???? $node->taxonomy[$tj_vid][$tj_tid] = $tj_tid;- s3 E4 P9 U) x8 \' D2 n# C# M8 _! a

: r1 o5 M" G* @5 E?? }" O' P% I  [& A( ~% m7 m' o5 r4 T
+ J2 j- N$ V, y$ i8 `+ y
?? node_save($node);
4 R. E" @2 a0 W/ ]  O. S3 n+ T2 y3 U2 ~3 D# F5 \
}??/ C. q+ s, {- f! t0 F/ }1 w- Z4 N

# M+ U. X; x8 M. Cdrupal_set_message("Import Successful!");
( a+ I( t3 Q& l}: i* _, I/ F* V4 Z" u
?>" S1 Q" I0 p0 Q9 {) q2 H
2 m# ]0 a3 F7 M' X, P
, v' O7 m& @0 O  H4 J7 Z( ]6 j* B

$ Z) [% P- n4 E' I
( s6 T, z" Q0 s4 Z& M* W9 I7 l
8 c' ]4 l% k& y2 H3 U/ l' y5 V

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

GMT+8, 7-8-2025 21:46 , Processed in 0.436426 second(s), 261 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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