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

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

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

[复制链接]
发表于 2-1-2012 22:03 | 显示全部楼层 |阅读模式
如果你想把其它网站的数据批量导入到drupal系统中,下面代码对你有可能适用。前提条件是,你要把原来网站的数据生成XML格式!
& p& F) Q- ]# @1 C: R0 f9 d生成XML的工具有很多,有个叫 xml.class.php的类,可以试用一下,你也可以自己写PHP代码来实现。
! L/ a  n# f# s( J5 J/ I) s+ I生成XML文件后,通过这个模块,直接上传,就可以把它导入到drupal系统了。' j" d+ `0 o7 C$ V7 c" J. u; Z
该模块还可以对你导入的数据进行自动分类(Taxonomy整合)。$ y1 r. ^0 H6 ]- a
以下为该模块的部分精华源代码,欢迎发信问问题和提出各种修改建议。- K/ p  R' ~4 b1 t  ^3 F2 k
如需要完整模块,请向站长索取。0 D. J; \9 X$ D7 S
& ], L9 q5 }7 [, w
<?php
: B9 b7 r! J1 J7 Y# X5 T0 ~function import_form_submit($form, &$form_state) {
" J4 M. b& k" {" X
3 R* I; T1 L; L7 z  a?????????? $validators = array('file_validate_extensions' => array('upload_file'),);
" y/ Q" g! S' B% ^$ W8 W- A?????????? if ($file = file_save_upload('upload_file', $validators)) {3 I8 o: y$ Z# p4 n6 G
?????????????? $fd = fopen($file->filepath, "rb");
# O. }$ S! Q0 g  C, E1 b?????????????? if (!$fd) {
5 ?. z# Y1 o- N0 o: u  P: o3 v: d?????????????????? form_set_error('upload_file', t('Import failed: file %filename cannot be read.', array('%filename' => $file->filename)));$ L1 }! `9 [, P5 u; m/ c+ b
?????????????? }
5 r( k, A2 \0 x1 [5 ^% H! _?????????????? else {
! u. S& X  {7 ^2 c?????????????????? $info = fstat($fd);4 o3 U1 ?/ y" p/ S% L6 }0 ?
?????????????????? $len = $info["size"];
' N0 b2 \$ G; A5 j7 N( s7 f?????????????????? $text = fread($fd, $len);
" g$ f0 r0 t1 }3 M?????????????????? fclose($fd);* D; R' g6 y4 O' J% W
?????????????????? drupal_set_message(t('Loaded file %filename. Now processing it.', array('%filename' => $file->filename)));4 }/ B) b0 b& I
?????????????????? $form_state['values']['file'] = $file;
1 O, k! g4 X' n( Y* p
" T7 M0 s* ^. d$ I?????????????????? import_xml_invoke_import($text, $form_state['values']);
; ?% M3 |- h+ m: Y) @+ c  ??????????????? }
$ _  ~7 w9 ]( f4 p$ ?! M?????????? }
) o' |/ U) }8 F1 d! {?????????? else {& f9 y3 f( o5 Y& G+ c
?????????????? form_set_error('upload_file', t('Import failed: file was not uploaded.'));
  L. s( X$ `% D?????????? }
0 I, V# {* ?4 b, B6 l}! ^" c' L. e$ r5 }- D" c: ?$ Y8 R
% x" I) [% o: D& Z
4 g1 Z, y; R- e0 A, M

' w# p! ?4 x! e& U/ x! g4 X6 [( d: }5 O, {+ b" j" i
function parseMol($mvalues) {
) y8 Q2 ~* V& l, Y/ E" X! d& T* b???? for ($i=0; $i < count($mvalues); $i++)
$ ?1 M. U5 [  D  U6 d" {9 w???????????? $mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];
) T6 G8 }3 k3 ^) v1 _$ M) c, z???? return new ImportXml($mol);
* D  s* G" r$ B5 X5 S}* ?% ]0 |. r& P: I, e# C

# @6 p/ Y% f; h% Y$ r( e' u, M, v7 r. q
class ImportXml {
% \* N% l, v9 z; T1 b) H??
( d; @7 z+ w8 P6 ]8 d8 {???? var $tushushangpin;??2 t( o; m" Q& }* H9 Y0 c7 c4 K
???? var $shangpindaima;??????- Q6 j- B+ T0 l4 ]4 B
???? var $shuming;& Y2 n2 n0 s3 @8 m# c
???? var $congshuming;
$ P7 G8 f; j: W2 O) z5 Q???? var $fushucongshuming;
+ }" m% ^6 g8 x) l3 N! q. j???? var $zhuzuozhe;
# X! S0 L1 A. r4 \+ J% u, L1 [???? var $chubanzhe;??. t& T" L; V& V) B
???? var $benbanbanci;??????
) i& c' n, v; r9 w2 b: C" Q???? var $yinci;
4 L& L. h% L; N! {9 K???? var $dingjia;0 S- ]" Q+ C5 n; j

* Z5 o2 n* e3 l6 u. t% P, B0 v. X0 h& e4 ]7 ?1 f9 e
???? function ImportXml ($aa) {( E+ E" Q7 `! w' j: j1 }
???????????? foreach ($aa as $k=>$v)* F3 v& w% H+ k1 w
???????????????????? $this->$k = $aa[$k];
! v5 g! n$ `7 ]% P! ~???? }9 y6 T/ @: v; Y9 K, a
}
: ]/ S5 X9 I0 x: [6 w
- m+ s( m/ b6 s9 C/ ~- ^
' X5 J6 p, X. _8 h/ N
( A0 S) |- e6 W. f" g! j+ c, K- E# c7 u' S0 V& c$ j& P3 [
function import_xml_invoke_import(&$text) {8 ~" j9 h* T% D" u/ w% X% u

+ {+ d# Y  H, i* x6 S! m' M5 V// parse the data:5 L- }' H! g+ E& @8 ?6 R; `
?? $xml_parser = drupal_xml_parser_create($text);
: ^" a8 M+ L# l9 s?? xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0);0 R1 T% x/ q8 k$ Q2 a. }0 }
?? xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE,1);
9 b. _% h5 G0 `# P) o: v& |* `?? xml_parse_into_struct($xml_parser,$text,$values,$tags);4 G* H9 j7 n# P; R7 D; m: _5 B
?? xml_parser_free($xml_parser);7 ?; q  @, d0 D& X+ e" ~3 T: d
' P) Z2 E$ K8 S5 u) N4 s# p
// now begin fetch the value
2 D6 K* m7 z3 e# x% u0 ?% q* _5 ]- O! U  Z* U$ q" \% e8 }0 C
foreach ($tags as $key=>$val) {2 j8 _% @7 D0 ^4 {% T- S, I2 ^1 W

# p  I: e6 d# ]???????????? if ($key == "tushushangpin") {8 w) R+ x: W- l  `. N$ d9 Q( {

) s# i$ Z* z: G! _% w; I( `% _???????????????????? $molranges = $val;) n8 B7 A* G/ |
???????????????????? for ($i=0; $i < count($molranges); $i+=2) {
$ A5 M6 }3 H( W???????????????????????????????????? $offset = $molranges[$i] + 1;
2 ]9 q: u4 G: j% [$ e" F???????????????????????????? $len = $molranges[$i + 1] - $offset;# ~- m3 @+ Q7 j0 h# v
???????????????????????????? $tdb[] = parseMol(array_slice($values, $offset, $len));/ o- J. g+ Y* V8 Y
???????????????????? }
& I% j4 o' M. _2 D: {; Q- d9 D???????????? } else {4 o- ^# |! P1 ?2 ^* q
???????????????????? continue;
6 Q. I1 G& W; R: j* R" S) s) j???????????? }/ {* S$ {6 [5 n* \: V0 m6 s- ]
???? }
; l! P5 y8 W6 f# d
! H" |% P- P9 _$ |/ {! Iforeach($tdb as $value){1 h0 [9 b( ?4 `
- D  `7 U3 z; ]9 i% V( b, N  X, V
?? $node = array();
  f: t- E+ ~8 M, ]?? $node = new stdClass;
* V& V" \4 K7 J?? $node->type = "product";
) {8 `, Z; O9 A3 O* X1 M8 F?? $node->status = 1;* T7 Z8 m* t7 X8 S, ^
?? $node->uid = 1;5 ?& q! X1 ?% H$ H
?? $node->title = $value->shuming;& Q6 H. o. g% f3 r- N- d5 I9 `
// $node->body = $value->neirongtiyao;# m4 F' v0 h% R6 c
* T6 R1 t& Q$ l8 i5 B' {& d
?? $node->field_product_shangpindaima[0]['value'] = $value->shangpindaima;??  K! s- |+ q+ x) N# E
?? $node->field_product_shuming[0]['value'] = $value->shuming;?????????????????????? // use ubercart0 Z$ N5 t0 J7 \
?? $node->field_product_congshuming[0]['value'] = $value->congshuming;
; O/ f! k# ~1 R0 \?? $node->field_product_fushucongshuming[0]['value'] = $value->fushucongshuming;
3 Q2 e# p/ Z  Y0 B5 k$ M  Q9 t?? $node->field_product_zhuzuozhe[0]['value'] = $value->zhuzuozhe;7 Z) j+ c9 M% L" H2 ~
?? $node->field_product_chubanzhe[0]['value'] = $value->chubanzhe;
2 x2 Z% U9 l! M  E3 y2 g?? $node->field_product_benbanbanci[0]['value'] = $value->benbanbanci;& c; W: X' t# `1 _- x
?? $node->field_product_yinci[0]['value'] = $value->yinci;
' W' x. M; f6 P6 K?? $node->field_product_dingjia[0]['value'] = $value->dingjia;
6 h* B& c" H/ t6 s??
. u- c9 F5 C4 f, o/ E1 p7 }' `$ G// if $value->tongjifenlei is not null then :
/ r: p! R1 r- _5 Z/ ^( h7 x  K2 x" F/ i$ h
?? if($value->tongjifenlei){
9 x3 f3 V+ J! K/ U  R* Z
: l/ n& B' i: K6 x# A% u; Q7 K?? $tj_vid = 1;& a, |; {" [1 u: C& v7 r
. u8 W: I7 R# \/ ^3 D2 W# T3 I5 r
?? if($tid = (int) db_result(db_query('SELECT tid FROM {term_data} WHERE name = "%s" AND vid = %d', $value->tongjifenlei,$tj_vid))){????
/ o# q4 A& _+ i6 M; O/ g) }6 ^$ J???????? $tj_tid = $tid;& @% B4 Z) h* l  K  {4 I
???? }else{1 m# k& a) D7 ~" a1 l0 j

( U% ^2 W$ g  a3 v. D" Q$ W???????????? // vocabulary ID is hard coded for this example4 z9 {! o0 Y* Y* [# H9 w! \9 |1 J: m
?????? $autoterm = array(
/ f0 e+ Q0 d& h& N???????? 'name' => $value->tongjifenlei,?? // or whatever you want the auto-term to be named" @  B5 u/ V$ S" S+ |3 Z, e
???????? 'parent' => 0,9 g- W* ~$ Q" h- ?" q' G$ }* z: E
???????? 'vid' => $tj_vid,
6 l0 s; D) N- a# K?????? );
7 h, `4 J! N$ Q5 j: @1 J???????? taxonomy_save_term($autoterm);! P) P& Z6 j5 j/ c+ m- L
???????? $tj_tid = (int) db_result(db_query('SELECT MAX(tid) FROM {term_data} WHERE vid = %d', $vid));% H/ _$ h1 n7 P3 W2 P( O) V0 _) `
???? }! g# o( w9 I9 k
???? $node->taxonomy[$tj_vid][$tj_tid] = $tj_tid;
3 n- u# q/ e. ^: L2 ^( I; f6 o5 ?; H- d
?? }
$ o% B8 T6 L0 s2 ]& {$ n$ C: V% f) c) P  G! A2 ?
?? node_save($node);
6 ]- g2 m* b4 \  g$ }7 X
! L( ~2 m; M! A}??
/ `$ U' n4 C$ N( G  r7 }( q) h4 G6 Y- a
drupal_set_message("Import Successful!");
3 n$ v+ j7 U- E' k}
/ L/ A3 N  J! X1 R. y& t?>3 t0 e  ^! C- V& B7 [

) ^2 H$ q8 u: ^3 P# z) x
& m( k6 P6 m9 n& h2 @% V3 _4 g' a' |. m$ _  i
8 g' P# P5 |4 ]
; F# v0 ~8 D3 _+ p$ f5 J

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

GMT+8, 4-17-2025 04:03 , Processed in 0.378135 second(s), 260 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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