Help Parsing
Posted: Thu Dec 07, 2006 7:33 pm
http://pastebin.ca/271081
This is the data I want to parse
Basically what I want to do is parse through the text file above and generate a DHTML based menu off it. I've got it working (barely) but I wonder if there's anyway to streamline the above code, its rather messy for now =(
This is the data I want to parse
Code: Select all
<html>
<head>
<link rel="stylesheet" type="text/css" href="demo.css" />
<link rel="stylesheet" type="text/css" href="office_xp/office_xp.css" />
<script type="text/javascript" src="jsdomenu.js"></script>
<script type="text/javascript" src="jsdomenubar.js"></script>
<script type="text/javascript">
<?php
include("config.php");
//temp variables delete later please
$SCRIPT_PATH = ".";
$menuid = "SMS100000";
$lang = "BC";
//end temp
$cache = "$SCRIPT_PATH/cache";
$filename = "$cache/$menuid$lang";
if (file_exists($filename)) {
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
$data = unserialize($contents);
echo $data;
} else {
$js = 'function createjsDOMenu() { '.chr(13);
//please substitue this function to retrieve data from database
$arrInput = file("menu2.txt");
$strInput = flatten($arrInput);
//end substitiion
/*
Sample
$data = dbSelect("Select * from menubar where something = 'something'");
$strInput = $data[1][menuitem];
*/
preg_match_all('/{.*}/',$strInput, $match);
$arrMenu = clearBlanks($match[0]);
$mainmenu = getChild(0);
//submenu
for ($mainctr=0;($mainctr<=count($mainmenu)-1);$mainctr++) {
$js .= createJS(1,($mainmenu[$mainctr]+1),($mainmenu[($mainctr+1)]));
}
//main menu
$js .= ' absoluteMenuBar = new jsDOMenuBar("static", "staticMenuBar");
with (absoluteMenuBar) {';
for ($k=0;$k<(count($mainmenu));$k++) {
$dat = getName($arrMenu[($mainmenu[$k])]);
$js .= 'addMenuBarItem(new menuBarItem("'.$dat[name].'", absoluteMenu'.$k.'));'.chr(13);
}
$js .= '}'.chr(13);
//end main menu
$js .= $ccjs.chr(13);
$js .= $ccjs2.chr(13);
$js .= $ccjs3.chr(13);
$js .= $linking.chr(13);
$js .= $exlink.chr(13);
$js .= $exlink2.chr(13);
$js .= '} '.chr(13);
//Prints out the JS
$data = ($js);
$handle = fopen($filename,"w+");
fwrite($handle,$data);
fclose($handle);
}
?>
</script>
</head>
<body onLoad="initjsDOMenu()">
<div id="staticMenuBar"></div>
<pre>
<?php
echo $filename;
function createJS($level,$start=0,$stop=0) {
global $arrMenu,$mainctr,$mainmenu,$ccjs,$done,$childcounter,$linking,$done2;
$childcounter=0;
$done = false;
$men = 110 + $mainctr * 10;
$absmen = 'absoluteMenu'.$mainctr;
$js .= $absmen.' = new jsDOMenu('.$men.', "absolute");'.chr(13);
$js .= ' with ('.$absmen.') {'.chr(13);
$menu1 = getChild($level,$start,$stop);
$done = $menu1;
//print_r($menu1);
for ($j=0;$j<(count($menu1));$j++) {
$dat = getName($arrMenu[$menu1[$j]]);
if (hasChild($arrMenu[$menu1[$j]])==true) {
$xtra = 'Item'.$mainctr.'_'.$j;
$done2 = $j;
$jj = $j+1;
if ($jj >= count($menu1) ) {
$kk = $mainmenu[($mainctr+1)];
} else {
$kk = $menu1[$j+1];
}
$sub = getChild($level+1,$menu1[$j],$kk);
$lev[0]=$j;
//echo "<<$j>>";
$ccjs .= createJS1($sub,$lev);
//$linking .=
//print_R($sub);
$childcounter++;
} else {
$xtra = '';
}
$js .= 'addMenuItem(new menuItem("'.$dat[name].'", "'.$xtra.'", "'.$dat[url].'"));'.chr(13);
}
$js .= '}'.chr(13);
return $js;
}
function createJS1($arrInput,$lev) {
global $arrMenu,$mainctr,$ccjs,$done,$childcounter,$linking,$done2,$temp,$mainmenu,$ccjs2;
$men = 110 + $mainctr * 10;
$absmen = 'absoluteMenu'.$mainctr;
$items = $mainctr;
foreach ($lev as $arr) {
$absmen .= '_'.$arr;
$items .= '_'.$arr;
}
$lalala = "";
//echo "<<!!!!!!!!!!!!!!!!!!!!!>>";
//print_r($lev);
for($i=1;$i<count($lev);$i++) {
$lalala .= "_".$lev[$i];
}
$xx = count($lev);
$level = $xx + 1;
//echo $level."!!!!!!!<br/>";
$js .= $absmen.' = new jsDOMenu('.$men.', "absolute");'.chr(13);
$js .= ' with ('.$absmen.') {'.chr(13);
for ($j=0;$j<(count($arrInput));$j++) {
$dat = getName($arrMenu[$arrInput[$j]]);
$temp = $arrInput[($j+1)];
if (!isset($arrInput[($j+1)])) {
$temp = $mainmenu[$mainctr+1];
}
if (hasChild($arrMenu[$arrInput[$j]])==true) {
$xtra = 'Item'.$items.'_'.$j;
$jj = $j+1;
if ($jj >= count($menu1) ) {
$kk = $done[($done2+1)];
} else {
$kk = $arrInput[$j+1];
}
$sub = getChild2(($level+1),$arrInput[$j],$temp);
$lev[$xx] = $j;
$ccjs2 .= createJS2($sub,$lev);
} else {
$xtra = '';
}
$js .= 'addMenuItem(new menuItem("'.$dat[name].'", "'.$xtra.'", "'.$dat[url].'"));'.chr(13);
}
$js .= '}'.chr(13);
$linking .= 'absoluteMenu'.$mainctr.$lalala.'.items.Item'.$items.'.setSubMenu('.$absmen.');'.chr(13);
return $js;
}
function createJS2($arrInput,$lev) {
global $arrMenu,$mainctr,$ccjs,$done,$childcounter,$linking,$done2,$temp,$mainmenu,$exlink,$ccjs3;
$men = 110 + $mainctr * 10;
$absmen = 'absoluteMenu'.$mainctr;
$items = $mainctr;
foreach ($lev as $arr) {
$absmen .= '_'.$arr;
$items .= '_'.$arr;
}
$lalala = "$mainctr";
$lalala .= "_".$lev[0];
$xx = count($lev);
$level = $xx + 1;
$js .= $absmen.' = new jsDOMenu('.$men.', "absolute");'.chr(13);
$js .= ' with ('.$absmen.') {'.chr(13);
for ($j=0;$j<(count($arrInput));$j++) {
$dat = getName($arrMenu[$arrInput[$j]]);
$temp = $arrInput[($j+1)];
if (!isset($arrInput[($j+1)])) {
$temp = $mainmenu[$mainctr];
}
if (hasChild($arrMenu[$arrInput[$j]])==true) {
$xtra = 'Item'.$items.'_'.$j;
$jj = $j+1;
if ($jj >= count($menu1) ) {
$kk = $done[($done2+1)];
} else {
$kk = $arrInput[$j+1];
}
$sub = getChild2(($level+1),$arrInput[$j],$temp);
$lev[$xx] = $j;
$ccjs3 .= createJS3($sub,$lev);
} else {
$xtra = '';
}
$js .= 'addMenuItem(new menuItem("'.$dat[name].'", "'.$xtra.'", "'.$dat[url].'"));'.chr(13);
}
$js .= '}'.chr(13);
$exlink .= 'absoluteMenu'.$lalala.'.items.Item'.$items.'.setSubMenu('.$absmen.');'.chr(13);
return $js;
}
function createJS3($arrInput,$lev) {
global $arrMenu,$mainctr,$ccjs,$ccjs3,$done,$childcounter,$linking,$done2,$temp,$mainmenu,$exlink,$ccjs2,$exlink2;
$men = 110 + $mainctr * 10;
$absmen = 'absoluteMenu'.$mainctr;
$items = $mainctr;
foreach ($lev as $arr) {
$absmen .= '_'.$arr;
$items .= '_'.$arr;
}
$lalala = "$mainctr";
$lalala .= "_".$lev[0]."_".$lev[1];
$xx = count($lev);
$level = $xx + 2;
$js .= $absmen.' = new jsDOMenu('.$men.', "absolute");'.chr(13);
//echo $absmen.' = new jsDOMenu('.$men.', "absolute");'.chr(13)."!!!!!!!!!!!!!!!!!!!!!!!!!!AAAAAAAAAAAAAAAAAAAAAA";
$js .= ' with ('.$absmen.') {'.chr(13);
for ($j=0;$j<(count($arrInput));$j++) {
$dat = getName($arrMenu[$arrInput[$j]]);
$js .= 'addMenuItem(new menuItem("'.$dat[name].'", "'.$xtra.'", "'.$dat[url].'"));'.chr(13);
}
$js .= '}'.chr(13);
$exlink2 .= 'absoluteMenu'.$lalala.'.items.Item'.$items.'.setSubMenu('.$absmen.');'.chr(13);
//echo $js;
return $js;
}
function createJS4($arrInput,$lev) {
echo "lalala";
}
function getChild($level,$start=0,$stop=0) {
global $arrMenu;
if ($stop==0) {
$stop=count($arrMenu);
}
for ($i=$start;$i <= $stop;$i++) {
if (isset($arrMenu[$i])) {
if (getCount($arrMenu[$i])==$level) {
$ret[] = $i;
}
}
}
return $ret;
}
function getChild2($level,$start=0,$stop=0) {
global $arrMenu,$temp;
if ($stop==0) {
$stop=$temp;
}
for ($i=$start;$i <= $stop;$i++) {
if (isset($arrMenu[$i])) {
if (getCount($arrMenu[$i])==$level) {
$ret[] = $i;
}
}
}
return $ret;
}
function hasChild($strData) {
global $arrMenu;
$data = explode(",",$strData);
if (isset($data[1])) {
return false;
} else {
return true;
}
}
function getCount($strData) {
$data = explode("|",$strData);
$cnt = (count($data)-1);
return $cnt;
}
function getName($strData) {
$data = explode(",",$strData);
if (isset($data[1])) {
$ret[name] = str_replace("|","",$data[0]);
$ret[url] = $data[1];
} else {
$ret[name] = str_replace("|","",$data[0]);
$ret[url] = "blank.htm";
}
return $ret;
}
function flatten($array) {
$txt = "";
foreach ($array as $arr) {
$txt .= $arr;
}
return $txt;
}
function clearBlanks($arrInput) {
foreach ($arrInput as $arr) {
if (strstr($arr, chr(13))==false) {
$arr = str_replace("{","",$arr);
$arr = str_replace("}","",$arr);
$retData[] = $arr;
}
}
return $retData;
}
?>
</pre>
</body>
</html>