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

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

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

[复制链接]
发表于 2-1-2012 22:03 | 显示全部楼层 |阅读模式
如果你想把其它网站的数据批量导入到drupal系统中,下面代码对你有可能适用。前提条件是,你要把原来网站的数据生成XML格式!
6 j8 a0 \; U. H. z生成XML的工具有很多,有个叫 xml.class.php的类,可以试用一下,你也可以自己写PHP代码来实现。
9 |9 @7 W' _) R: o( n生成XML文件后,通过这个模块,直接上传,就可以把它导入到drupal系统了。' B# d6 G& U( M. ~. F# @" C$ x
该模块还可以对你导入的数据进行自动分类(Taxonomy整合)。: e& `7 L9 ?1 ]9 r$ G
以下为该模块的部分精华源代码,欢迎发信问问题和提出各种修改建议。
. A' P; F( o3 H& K  F7 ^如需要完整模块,请向站长索取。2 y/ k, M/ L* y, t" p) |

' \- H8 J4 ]. D# Y) J" S<?php
7 i3 a% w* p- E8 s+ {function import_form_submit($form, &$form_state) {
: t' ^) Q6 l. \" r' B$ {: w' j3 }1 S( h2 H! t6 {
?????????? $validators = array('file_validate_extensions' => array('upload_file'),);+ R5 u' D5 ?4 Y$ z! z
?????????? if ($file = file_save_upload('upload_file', $validators)) {0 W; V) j* A% f3 A2 |) I
?????????????? $fd = fopen($file->filepath, "rb");9 y6 H$ t. S$ ]$ x
?????????????? if (!$fd) {7 K0 Q$ ]6 c& r" o# _8 c8 y9 M
?????????????????? form_set_error('upload_file', t('Import failed: file %filename cannot be read.', array('%filename' => $file->filename)));9 g0 V# \' t' \% K. d+ ]
?????????????? }
( H9 O/ P( w4 Z8 ~?????????????? else {  \1 J$ O. P6 t) x2 s! T& n  W
?????????????????? $info = fstat($fd);! e* w+ H$ f/ y% g. }1 Q- C5 m
?????????????????? $len = $info["size"];
6 G6 ^6 p& D1 y3 c; S  U?????????????????? $text = fread($fd, $len);8 ^6 v; [4 i, a8 x/ Z3 t% b
?????????????????? fclose($fd);
" M3 Z8 e$ F0 W- \/ e6 S+ }?????????????????? drupal_set_message(t('Loaded file %filename. Now processing it.', array('%filename' => $file->filename)));
9 k& i- V& t% B?????????????????? $form_state['values']['file'] = $file;0 H9 [9 k: d0 Z8 e5 d) n% S9 b" Q: c3 F

7 [4 D: i1 [/ I& ~' n?????????????????? import_xml_invoke_import($text, $form_state['values']);8 |) H# Y- h* g& i, P
?????????????? }
, ~+ v9 f! |5 ]- k- s+ M?????????? }/ D) Z. }! v* R2 U
?????????? else {
* y+ R' W! O$ X- }?????????????? form_set_error('upload_file', t('Import failed: file was not uploaded.'));. ~: o" t# ?% C1 X- a, ~) l
?????????? }
/ m4 g8 T4 V9 s}
$ w' M+ _: y& I; F: }
* y+ ~5 L( k9 C# y8 G
  }/ D% l) D. e4 W/ n, P3 n* G& V& J

' b6 M/ h( D3 u% {5 r8 O0 rfunction parseMol($mvalues) {
. X1 A/ F+ \3 T2 Q/ B???? for ($i=0; $i < count($mvalues); $i++)' T' `' o5 z: c# C* X
???????????? $mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];6 }6 \5 ?) k, j; S8 G' ]& O
???? return new ImportXml($mol);
* A: M( ]; g3 l8 @) K}
- f2 M: ~! O; D* l9 n
4 ?  X3 I# D7 {* t1 ~6 T) Y
8 e7 E( f) y1 f$ l0 ]& @) F6 ^class ImportXml {
" G* e# V) ?& e??
' f# d( L9 Y" G4 Q$ V( s???? var $tushushangpin;??& Y" B0 r  p+ U6 T7 F) r
???? var $shangpindaima;??????
  S* f( d4 W( C: e???? var $shuming;
9 q& V$ o9 j- W/ N???? var $congshuming;' k, K6 U- z7 @! U( X
???? var $fushucongshuming;8 U' U/ \0 S6 _+ ^3 k- z8 u3 R
???? var $zhuzuozhe;3 @6 Q; P" q8 m. m  Z- U6 W
???? var $chubanzhe;??- s4 d- o9 d3 J1 Z$ }
???? var $benbanbanci;??????3 |: `+ ?$ Y/ F! @
???? var $yinci;
" v: D+ d2 f' n1 x???? var $dingjia;
  d! z: |" z, u+ n2 k( e/ f8 [6 \* S/ V
4 r% d3 ]3 c; c# _% G7 ?1 Z; B
???? function ImportXml ($aa) {& O6 q) z# h" _; f: I0 k
???????????? foreach ($aa as $k=>$v)
- i" f% W) k+ `$ d( K???????????????????? $this->$k = $aa[$k];
) g0 p. \5 m; b???? }
2 f( `/ e2 w' d}
) D$ m# j0 q5 h, V4 x0 A0 q5 s
" S, n" r1 z! F
6 r- k0 L; J$ I! |+ ?" \- F- w9 t' x! ?0 ^
) N/ K# s; u- A# [
function import_xml_invoke_import(&$text) {3 o- g/ Y2 ]" [, S1 i+ A

$ y+ Y7 K$ X, N: q6 F// parse the data:
  p8 F8 N, {7 s, {' {?? $xml_parser = drupal_xml_parser_create($text);& G/ ]8 ], g, c( E( j
?? xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0);
! O* [1 a& Z% X' y) u?? xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE,1);
, J5 j# X, R8 V! I: G# k?? xml_parse_into_struct($xml_parser,$text,$values,$tags);, x% Y% e, j$ {* N' l
?? xml_parser_free($xml_parser);
3 M' C2 s8 s' _/ t* s
- a! i/ B" V! q. o3 _// now begin fetch the value
1 C, j% G' ^- p! Q9 @, G" s9 s. Y9 B5 s( W. N
foreach ($tags as $key=>$val) {& Z3 f9 R/ ~4 |( d  @6 ?& b
4 {( k. C4 b! D# Z( [, S% Y
???????????? if ($key == "tushushangpin") {8 n5 F* o0 Q6 y) }7 }8 D

- d8 B: `" ]2 s9 t7 N???????????????????? $molranges = $val;$ H0 X4 ^. q: p7 e
???????????????????? for ($i=0; $i < count($molranges); $i+=2) {
4 G) ?$ J, ~* r; `% T9 J???????????????????????????????????? $offset = $molranges[$i] + 1;4 J0 W1 m; b; K( }; m: R
???????????????????????????? $len = $molranges[$i + 1] - $offset;  r, ]9 F5 W9 R  V- R# w$ @
???????????????????????????? $tdb[] = parseMol(array_slice($values, $offset, $len));/ `9 S) W2 B- B
???????????????????? }' P2 I- Q. [# o- P) F
???????????? } else {
, u* u3 L$ q0 {  ]& O2 m( ~???????????????????? continue;
5 ]* Y" @* u1 J% q" @, L???????????? }
+ u$ J" g! d. S???? }3 R1 _5 F/ @+ l

! y( b4 K) @" \foreach($tdb as $value){
* S+ m8 V0 e$ b/ T. i, `* L: H  t# I5 P
?? $node = array();) N6 p7 d  U. O# ^" ^1 y; a
?? $node = new stdClass;2 I% h& m* O% c: e- }
?? $node->type = "product";0 p- N0 i. `6 ]! G# Z6 A) [
?? $node->status = 1;" K. R. T- ^- {
?? $node->uid = 1;" x7 O. b9 R7 g4 ?2 S% _
?? $node->title = $value->shuming;
+ K- A' F- o. k' e2 t$ g* w// $node->body = $value->neirongtiyao;
7 e# D3 K9 G- g& o# H. {  l( e
- J8 c; G/ y8 J% e?? $node->field_product_shangpindaima[0]['value'] = $value->shangpindaima;??, G/ x9 E& V& B* s  {
?? $node->field_product_shuming[0]['value'] = $value->shuming;?????????????????????? // use ubercart, h6 [& T2 ]* y$ H
?? $node->field_product_congshuming[0]['value'] = $value->congshuming;
( j- s( ^, i8 a5 c6 G& U1 m1 q?? $node->field_product_fushucongshuming[0]['value'] = $value->fushucongshuming;6 l6 O- E) Q0 l8 ?) M' c
?? $node->field_product_zhuzuozhe[0]['value'] = $value->zhuzuozhe;% p3 p3 e, s" g- z
?? $node->field_product_chubanzhe[0]['value'] = $value->chubanzhe;
* V$ p/ p- `; b, N" Q?? $node->field_product_benbanbanci[0]['value'] = $value->benbanbanci;
+ a! m+ e. A# e+ }4 m) s?? $node->field_product_yinci[0]['value'] = $value->yinci;
( v1 o6 B$ D6 n7 E3 q0 j$ a9 d?? $node->field_product_dingjia[0]['value'] = $value->dingjia;
: B% q9 Q6 d' j7 c( u6 ~??, {  c+ J! a7 [; R) o( b
// if $value->tongjifenlei is not null then :7 e, E: B; V3 _4 n3 C% k+ n

8 y. G+ w' \: d# ]6 I?? if($value->tongjifenlei){- J& j+ z0 u' P" `2 W4 {

" k+ i1 }* x# \* K/ u1 P# P6 n0 V, O?? $tj_vid = 1;$ [3 I8 b, H  Y/ l
0 x, x! d: R1 c0 q: L
?? if($tid = (int) db_result(db_query('SELECT tid FROM {term_data} WHERE name = "%s" AND vid = %d', $value->tongjifenlei,$tj_vid))){????( q! }; ~# m; B9 ?
???????? $tj_tid = $tid;$ Z% i( ~' T! B) ^) G. f" q
???? }else{, g$ j9 t. |6 I5 ?6 y

; n1 S! x( [1 h! _( P/ z$ s- M???????????? // vocabulary ID is hard coded for this example
( v3 U, [9 M0 ]?????? $autoterm = array(% b& f: }6 Z) X! `: R! x
???????? 'name' => $value->tongjifenlei,?? // or whatever you want the auto-term to be named4 d/ t# a4 Q2 f8 \8 N- Q
???????? 'parent' => 0,
+ T# R& M% g3 x- N! B, w???????? 'vid' => $tj_vid,
  f8 C* S' `2 w4 a# ~& @% f- P?????? );3 r9 o) r% T  ]4 F: H) @9 [' F# \
???????? taxonomy_save_term($autoterm);
8 @! Y) E9 u+ V5 v7 v9 P* \' y???????? $tj_tid = (int) db_result(db_query('SELECT MAX(tid) FROM {term_data} WHERE vid = %d', $vid));
+ X5 k* j9 |. {/ y) H  i???? }
  {: e/ Y" s7 q/ {7 |???? $node->taxonomy[$tj_vid][$tj_tid] = $tj_tid;' W6 l. X' z8 h  d  H
; @0 t) s# o; b+ g1 r) ^! b, ^
?? }$ T3 T7 p& n+ O
& G! }2 Y: ]# P7 Q
?? node_save($node);0 t( C: d6 I- O2 i) @: I3 [2 ^

# s+ v/ n' ?9 [) l}??
, S% F) O) ~0 y5 t# G" _" ?
4 l0 v$ E8 Z. [! ^! G* c; Ndrupal_set_message("Import Successful!");  J* ^' S; {# @. \& S% ?
}
6 d5 x5 n5 v3 d4 U?>
* |  k% K& |. A; T; h$ e2 q& C$ H) b# B. {( C5 {% u, e/ q2 R! c, X
) K9 W+ I) x  i+ e8 o9 _

. l& R8 w) s6 j1 r
" ?& ]' r! o8 H5 E& f# t# S
  m6 g5 y6 e( _' E+ Y- o

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

GMT+8, 7-7-2025 07:48 , Processed in 0.636766 second(s), 261 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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