Advertisement
Guest User

taxonomy_tree

a guest
Sep 30th, 2012
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. // -----------------------------------------------------
  3.  
  4. header("Content-Type: text/html; charset=utf-8");
  5.  
  6. ##### $source = 'http://www.google.com/basepages/producttype/taxonomy.de-DE.txt';
  7.  
  8. $filename = 'taxonomy.de-DE.txt'; // ---- local copy of source ----
  9.  
  10. $color1 = '#ACACAC';    // ----- Hintergrund-Farbe 1 -----
  11. $color2 = '#FFFFFF';    // ----- Hintergrund-Farbe 2 -----
  12.  
  13. // -----------------------------------------------------
  14. ?>
  15. <html>
  16. <head>
  17. <title>Taxonomy Tree</title>
  18. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  19.  
  20. <script type="text/javascript">
  21.  
  22. function show(id) {
  23.     if (document.getElementById(id).style.display == "none") {
  24.         document.getElementById(id).style.display = "block";
  25.     } else {
  26.         document.getElementById(id).style.display = "none";
  27.     }
  28. }
  29.  
  30. </script>
  31.  
  32.  
  33. <style type="text/css">
  34. <!--
  35. .ktext { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; }
  36. .utext { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; }
  37.  
  38. #kat_tree ul { margin:10px 0px 10px 8px; padding:6px 0px 10px 20px; }
  39.  
  40. -->
  41. </style>
  42.  
  43.  
  44. </head>
  45.  
  46. <body bgcolor="#FFFFFF" text="#000000">
  47.  
  48.  
  49. <?php
  50. // -----------------------------------------------------------------
  51. // -----------------------------------------------------------------
  52.  
  53.  
  54. $fdata1 = file($filename, FILE_IGNORE_NEW_LINES);
  55.  
  56.  
  57. // -----------------------------------------------------------------
  58.  
  59. $kat_temp = array();   // ---  Hilfs-Array ID->Name
  60. $kat_data = array();   // ---  Ergebnis-Array Daten
  61.  
  62. $max_deep = 0;  // --- max. Tiefe der Kategorie-Ebenen
  63.  
  64. // -----------------------------------------------------------------
  65.  
  66. foreach($fdata1 as $key => $line) {
  67.  
  68.     if ($key > 0) {
  69.    
  70.     // ------ Kategorie Ebene ($level) ermitteln -----
  71.     $nx = substr_count($line, '>');
  72.     $nxd = ($nx+1);    
  73.     if ($nxd > $max_deep) { $max_deep = $nxd; }
  74.     $level = $nx;
  75.    
  76.     // ------ Element in Array $kat_temp erstellen -----
  77.     $subarray = explode('>', $line);
  78.     $kat_name = trim($subarray[$nx]);
  79.     $kat_temp[$key] = $kat_name;
  80.    
  81.     // ------ parent_id aus $kat_temp ermitteln -----
  82.     if ($nx > 0) {
  83.         $ny = ($nx-1);
  84.         $kat_pren = trim($subarray[$ny]);
  85.         $kat_prek = array_search($kat_pren, $kat_temp);
  86.     }
  87.     else {
  88.         $kat_pren  = 'root';
  89.         $kat_prek = '0';
  90.     }
  91.    
  92.     // ------ Neues Array-Element erstellen -----
  93.     $kat_data[$key] = array(
  94.         'id' => $key,
  95.         'parent_id' => $kat_prek,
  96.         'level' => $level,
  97.         'name' => $kat_name
  98.     );
  99.    
  100.     unset($subarray);
  101.     }
  102.  
  103. }
  104.  
  105. unset($kat_temp);
  106.  
  107. // -----------------------------------------------------------------
  108.  
  109.  
  110. // ------------ DEBUG -----------
  111. ## print "<pre style=\"margin:8px; padding:6px; background:#DEDEDE;\">\n";
  112. ## print_r($kat_data);
  113. ## print "</pre>\n";
  114.  
  115. // -----------------------------------------------------------------
  116.  
  117. echo "<br />\n";
  118. echo "<br />Max Deep: ".$max_deep."\n";
  119. echo "<br />\n";
  120.  
  121.  
  122.  
  123. // -----------------------------------------------------------------
  124.  
  125. if (!empty($_REQUEST['d'])) {
  126. $go_d = trim($_REQUEST['d']);
  127. }
  128. else {
  129. $go_d = '1';
  130. }
  131.  
  132. // ------------ Ebenen - Menue -----------
  133.  
  134.  
  135. print "<div id=\"level_menu\" class=\"ktext\">\n";
  136. print "<ul>\n";
  137.  
  138. for ($dx=1; $dx<=$max_deep; $dx++) {
  139.     if ($dx == $go_d) { echo "  <li><strong>zeige ".$dx." Ebene(n)</strong></li>\n"; }
  140.     else { echo "  <li><a href=\"?d=".$dx."\">zeige ".$dx." Ebene(n)</a></li>\n"; }
  141. }
  142.  
  143. print "</ul>\n";
  144. print "</div>\n";
  145.  
  146. print "<hr />\n";
  147.  
  148. // -----------------------------------------------------------------
  149. // -----------------------------------------------------------------
  150.  
  151. $outArray = array();
  152. $nodeRefs = array(0 => &$outArray);
  153.  
  154. foreach ($kat_data as $element) {
  155.     $parent = &$nodeRefs[$element['parent_id']];
  156.     $parent[$element['id']] = array( 'name' => $element['name'], 'parent_id' => $element['parent_id'], 'sub' => array() );
  157.     $nodeRefs[$element['id']] = &$parent[$element['id']]['sub'];
  158. }
  159.  
  160. // ------------ DEBUG -----------
  161. ## print "<pre style=\"margin:8px; padding:6px; background:#DEDEDE;\">\n";
  162. ## print_r($outArray);
  163. ## print "</pre>\n";
  164.  
  165.  
  166.  
  167. // -----------------------------------------------------------------
  168. // -------------------- Ebenen Hintergrund-Farben ------------------
  169. // -----------------------------------------------------------------
  170.  
  171. function tree_color_data($color1, $color2, $max_deep) {
  172.  
  173. // -------- Ebenen Hintergrund-Farben --------
  174.  
  175. $r1 = hexdec(substr($color1,1,2));
  176. $g1 = hexdec(substr($color1,3,2));
  177. $b1 = hexdec(substr($color1,5,2));
  178.  
  179. $r2 = hexdec(substr($color2,1,2));
  180. $g2 = hexdec(substr($color2,3,2));
  181. $b2 = hexdec(substr($color2,5,2));
  182.  
  183. $diff_r = ($r2-$r1);
  184. $diff_g = ($g2-$g1);
  185. $diff_b = ($b2-$b1);
  186.  
  187. $bgcolorarr = array();
  188.  
  189. for ($i=1; $i<=$max_deep; $i++) {
  190. $factor = ($i / $max_deep);
  191.  
  192. $r = round($r1 + $diff_r * $factor);
  193. $g = round($g1 + $diff_g * $factor);
  194. $b = round($b1 + $diff_b * $factor);
  195.  
  196. ## $xcolor = '#' . sprintf('%02X',$r) . sprintf('%02X',$g) . sprintf('%02X',$b);
  197.  
  198. $xcolor = '#' . dechex($r) . dechex($g) . dechex($b);
  199.  
  200. $bgcolorarr[$i] = $xcolor;
  201.  
  202. }
  203.  
  204. return $bgcolorarr;
  205. }
  206.  
  207. // -----------------------------------------------------------------
  208. // -----------------------------------------------------------------
  209.  
  210. // ---- die Variable $max_deep (int) ist aus vorherigem Script vorhanden
  211.  
  212. ## $color1 = '#ACACAC';     // ----- Hintergrund-Farbe 1 -----
  213. ## $color2 = '#FFFFFF';     // ----- Hintergrund-Farbe 2 -----
  214.  
  215. if (!isset($bgcolor)) {
  216. $bgcolor = tree_color_data($color1, $color2, $max_deep);
  217. $bgcolor[0] = $color1;
  218. }
  219.  
  220.  
  221. // ------------ DEBUG -----------
  222. ## print "<pre style=\"margin:8px; padding:6px; background:#DEDEDE;\">\n";
  223. ## print_r($bgcolor);
  224. ## print "</pre>\n";
  225.  
  226.  
  227.  
  228. // -----------------------------------------------------------------
  229.  
  230.  
  231. // -----------------------------------------------------------------
  232. // ------------------- print_tree() --- Version: 3 -----------------
  233. // -----------------------------------------------------------------
  234.  
  235. function print_tree($array, $level=0, $view=1) {
  236.  
  237. global $bgcolor;    // ---- Ebenen Hintergrund-Farben ----
  238.  
  239. $anzkat = 1;        // ---- Kategorie Zaehler ----
  240. $prefix = 'kat';    // ---- Prefix fuer ul ID ----
  241. $cspace = "\t";     // ---- Quellcode Spacer ----
  242.  
  243. $spacer = str_repeat($cspace, (($level+1)*2));
  244.  
  245. // -------- Ebene 1 --- START --------
  246. if ($level == 0) {
  247. print "\n<ul id=\"".$prefix."_root\" style=\"display:block; background:".$bgcolor[0].";\">\n";
  248. }
  249.  
  250. // -------- Baum aus Array --- START --------
  251. foreach($array as $key => $val) {
  252. $prelevel = $level;
  253. $level++;
  254.  
  255. if ( isset($val['sub']) && !empty($val['sub']) ) {
  256.  
  257. $subcount = count($val['sub']);
  258.  
  259. $preid = $val['parent_id'];
  260.  
  261. $switch_link = "<a href=\"javascript:show('".$prefix.$key.$level."')\">open/close:</a> + ".$subcount."";
  262.  
  263. // -------- Listen-Element mit Unter-Ebene --- START --------
  264.  
  265.  
  266. print $spacer."<li>Level: ".$level." --- ID: ".$key." --- (". str_pad($anzkat,2,'0',STR_PAD_LEFT) .") --- <strong>".$val['name']."</strong> [".$switch_link."] ";
  267.  
  268. $anzkat++;
  269.  
  270. $ulcolor = 'background:'.$bgcolor[$level].';';
  271.  
  272. if ($level >= $view) { $ulview = 'display:none;'; }
  273. else { $ulview = 'display:block;'; }
  274.  
  275. $ulstyle = 'style="'.$ulview.' '.$ulcolor.'"';
  276.  
  277. // -------- Sub-Ebene --- START --------
  278. print "\n".$spacer."<ul id=\"".$prefix.$key.$level."\" ".$ulstyle.">\n";
  279.  
  280. print_tree($val['sub'], $level, $view);     // ---- rekursiver Funktions-Aufruf  ----
  281.  
  282.  
  283. print $spacer."</ul>\n";
  284. // -------- Sub-Ebene --- ENDE --------
  285.  
  286. print $spacer."</li>\n\n";
  287. // -------- Listen-Element mit Unter-Ebene --- ENDE --------
  288.  
  289. }
  290. else {
  291.  
  292. // -------- Listen-Element ohne Unter-Ebene --------
  293.  
  294. print $spacer."<li>Level: ".$level." --- ID: ".$key." --- (". str_pad($anzkat,2,'0',STR_PAD_LEFT) .") --- <strong>".$val['name']."</strong></li>\n";
  295.  
  296. $anzkat++;
  297.  
  298. }
  299.  
  300. $level--;
  301.  
  302. }
  303. // -------- Baum aus Array --- ENDE --------
  304.  
  305.  
  306. if ($level == 0) { print "</ul>\n"; }
  307. // -------- Ebene 1 --- ENDE --------
  308.  
  309.  
  310. }
  311.  
  312.  
  313. // -----------------------------------------------------------------
  314. // -----------------------------------------------------------------
  315. // -----------------------------------------------------------------
  316.  
  317. print "<br />\n";
  318. print "<br />\n";
  319. print "<br />\n";
  320.  
  321.  
  322. print "<div id=\"kat_tree\" class=\"utext\">\n";
  323.  
  324. print_tree($outArray, 0, $go_d);
  325.  
  326. print "</div>\n";
  327.  
  328.  
  329. print "<br />\n";
  330. print "<br />\n";
  331. print "<br />\n";
  332.  
  333. // -----------------------------------------------------------------
  334. // -----------------------------------------------------------------
  335. // -----------------------------------------------------------------
  336. ?>
  337.  
  338.  
  339. </body>
  340. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement