<-? /* HTML page generator Lee Felarca http://www.zeropointnine.com/blog 4-2009 Source code licensed under a Creative Commons Attribution 3.0 License. http://creativecommons.org/licenses/by/3.0/ Some Rights Reserved. An example of parsing an XML file containing Flash site structure and content and generating HTML files from it. This isn't worth trying to adapt directly, but is here just to give you a sense of one way to go about doing it... */ $XMLFILE = "assets/content.xml"; $INCLUDEFILE_HEADER = "index_header.inc"; // load xml file $XML = simplexml_load_file($XMLFILE) or die("feed not loading"); $PAGETITLE = $XML['pageTitle']; // ------------------------------------------------- makeRootNodePage($XML); for ($i = 0; $i < sizeOf($XML->nav1); $i++) { $node1 = $XML->nav1[$i]; makeLevel1Page($node1); for ($j = 0; $j < sizeOf($node1->nav2); $j++) { $node2 = $node1->nav2[$j]; makeLevel2Page($node2, $node1); for ($k = 0; $k < sizeOf($node2->nav3); $k++) { $node3 = $node2->nav3[$k]; makeLevel3Page($node3, $node2, $node1); } } } // ------------------------------------------------- function dump($o) { echo "
";
		var_dump($o);
		echo "
"; } function saveFile($sFilename, $sText) { $s = ""; $s .= "
Filename:$sFilename
"; $s .= '
' . htmlspecialchars($sText) . '
'; echo $s; $fp = fopen($sFilename, 'w'); echo "fopen: " . $fp; echo " fwrite: " . fwrite($fp, $sText); fclose($fp); } function makeHeading($names) { // $names is an array of names from the root, going down the list to the current node global $PAGETITLE; global $INCLUDEFILE_HEADER; // html header $s = "\r\r"; $s .= "$PAGETITLE"; for ($i = 1; $i < sizeOf($names); $i++) { $s .= " > " . $names[$i]; } $s .= "\r"; $s .= file_get_contents($INCLUDEFILE_HEADER); $s .= "\r\r\r\r"; // site name at the top $s .= "
\r
\r\r"; $s .= "
$PAGETITLE
\r\r"; // parentnode names (used as crumbs) $s .= "
\r"; for ($i = 0; $i < sizeOf($names) - 1; $i++) { $href = ""; if ($i == 0) $href = "/?noflash"; // SPECIAL CASE else $href = makeSlashes(sizeOf($names) - $i - 1); $s .= "" . $names[$i] . "" . " > "; } $s .= "
\r\r"; // currentnode's name $s .= "
" . $names[ sizeOf($names)-1 ] . "
\r\r"; return $s; } function makeSlashes($num) { $s = ""; for ($i = 0; $i < $num; $i++) { $s .= "../"; } return $s; } function makeSubnav($array) { $s = ""; $s .= "\r\r"; return $s; } function makeBody($text) { return "
\r" . trim($text) . "\r
\r\r"; } function makeFooter($deeplink) { global $XML; $s = "\r\r"; $s .= "
\r
\r\r"; // #html and #all // SWFACTION! ================================================== $s .= " "; // ============================================================= $s .= "\r\r\r"; return $s; } function makeRootNodePage() { global $XML; $names = array($XML['name']); // header $s = makeHeading($names); // subnav $a = array(); for ($i = 0; $i < sizeOf($XML->nav1); $i++) { $nsub = $XML->nav1[$i]; $str = "" . $nsub["name"] . ""; array_push($a, $str); } $s .= makeSubnav($a); // body copy $s .= makeBody($XML); // footer $s .= makeFooter(""); // save file saveFile("index.php", $s); } function makeLevel1Page($node) // 'about', 'work', etc. { global $XML; // header $names = array($XML['name'], $node['name']); $s = makeHeading($names); // subnav $len = sizeOf($node->nav2); $a = array(); for ($i = 0; $i < $len; $i++) { $nsub = $node->nav2[$i]; $str = "" . $nsub["name"] . ""; array_push($a, $str); } $s .= makeSubnav($a); // body copy $s .= makeBody($node); // footer $s .= makeFooter($node['deeplink'] ); // save file if (! is_dir($node['deeplink'])) mkdir($node['deeplink'], 0755); // owner full access, user read-only access saveFile($node['deeplink'] . "/index.php", $s); } function makeLevel2Page($node, $parent) // eg, work > evb { global $XML; // header $names = array($XML['name'], $parent['name'], $node['name'] ); $s = makeHeading($names); // subnav $len = sizeOf($node->nav3); $a = array(); for ($i = 0; $i < $len; $i++) { $nsub = $node->nav3[$i]; $str = "
"; $str .= ""; $str .= "" . $nsub['name'] . ""; $str .= "
"; array_push($a, $str); } $s .= makeLevel2Subnav($a); // body copy $s .= makeBody($node); // footer $s .= makeFooter($parent['deeplink'] . "/" . $node['deeplink'] ); // save file $parentPath = $parent['deeplink']; $nodePath = $parentPath . "/" . $node['deeplink']; if (! is_dir($parentPath)) mkdir($parentPath, 0755); // shouldn't happen if (! is_dir($nodePath)) mkdir($nodePath, 0755); saveFile($nodePath . "/index.php", $s); } function makeLevel2Subnav($array) // not too useful but oh well { $s = "\r\r"; return $s; } function makeLevel3Page($node, $parent, $parent2) // eg, work > evb > tropicana { global $XML; // header $names = array($XML['name'], $parent2['name'], $parent['name'], $node['name']); $s = makeHeading($names); // body copy $s .= makeBody( "\r
" . $node["date"] . "
\r" . trim($node) ); // images $s .= makeImages($node); // footer $s .= makeFooter($parent2['deeplink'] . '/' . $parent['deeplink'] . '/' . $node['deeplink'] ); // save file - subdirs are assumed to already exist $path = $parent2['deeplink'] . "/" . $parent['deeplink'] . "/" . $node['deeplink']; if (! is_dir($path)) mkdir($path, 0755); saveFile($path . "/index.php", $s); } function makeImages($node) { /* Example node: */ $s = "
\r"; $a = array(); for ($i = 1; $i <= 10; $i++) { $image = $node['imageUrl' . $i]; if (strlen($image) > 0) { $s .= "

\r"; array_push($a, $str); } } $s .= "
\r\r"; return $s; } ?->