Hi All,
I have been using some code from a company called 'Milonic' that uses Javascript to create menus. It works very well, but I am attempting to use the PHP version of their software. I would prefer to use the PHP version over the HTML coded version for obvious reason, ie PHP is the best.
My challenge is with the code they wrote, which the Tech people and Forum users are helpful, but they are not experts in PHP, needs some tweaking and they use functions to draw the menus.
One of the forum users suggested adding some settings to the code but I cannot tweak the php script to get what she suggests.
Here is the link to her/my post ( look at the response from Ruth where she suggested some 'code' in the box in her post)...
Milonic Post
Here is the code that creates the menus...
<?php
/*
Milonic DHTML Menu PHP Function Module mm_phpmenu.php version 1.2 - August 3 2005
This module is only compatible with the Milonic DHTML Menu version 5.62 or higher
Copyright 2005 (c) Milonic Solutions Limited. All Rights Reserved.
This is a commercial software product, please visit http://www.milonic.com/ for more information.
*/
$menuData="";
class mmenuStyle
{
function createMenuStyle($styleName)
{
global $menuData;
$styleArray=get_object_vars($this);
$menuData.="with($styleName=new mm_style()){\n";
foreach ($styleArray as $k => $v)
{
if(ereg("color",$k))
{
if(substr($v,0,1)!="#")$v=$v;//$v="#".$v;
}
$menuData.= "$k=\"$v\";\n";
}
$menuData.= "}\n\n";
}
}
class mMenu
{
var $menuItems;
function createMenu($menuName)
{
global $menuData;
$menuArray=get_object_vars($this);
$menuData.= "with(milonic=new menuname(\"$menuName\")){\n";
$tempMenuItems="";
foreach ($menuArray as $k => $v)
{
global $menuData;
if($k!="menuItems")
{
if($k=="style")
{
$menuData.= "$k=$v;\n";
}
else
{
$menuData.= "$k=\"$v\";\n";
}
}
else
{
if($k=="menuItems")$tempMenuItems=$v;
}
}
$menuData.= $tempMenuItems."\n";
$menuData.= "}\n\n";
}
function addItemFromText($itemText)
{
global $menuData;
$this->menuItems.="aI(\"".$itemText . "\");\n";
}
function addItemFromItem($menuItem)
{
global $menuData;
$tempVar="";
foreach ($menuItem as $k => $v)
{
if(ereg("color",$k))
{
if(substr($v,0,1)!="#")$v="#".$v;
}
$tempVar.="$k=$v;";
}
$this->menuItems.="aI(\"".$tempVar . "\");\n";
}
}
class mItem
{
function addItemElement($mtype,$mval)
{
$this->$mtype=$mval;
}
}
function drawMenuCode()
{
global $menuVars,$menuCodeDrawn;
if($menuCodeDrawn==0)
{
echo "
<SCRIPT language=\"JavaScript\" src=\"$menuVars[pathToCodeFiles]$menuVars[file_milonicsrc]\" type=\"text/javascript\"></SCRIPT>
<script language=\"JavaScript\">
if(ns4)_d.write(\"<scr\"+\"ipt language=JavaScript src=$menuVars[pathToCodeFiles]$menuVars[file_mmenuns4]><\/scr\"+\"ipt>\");
else _d.write(\"<scr\"+\"ipt language=JavaScript src=$menuVars[pathToCodeFiles]$menuVars[file_mmenudom]><\/scr\"+\"ipt>\");
</script>
";
}
flush();
$menuCodeDrawn++;
}
$drawCount=0;
$menuCodeDrawn=0;
function drawMenus()
{
global $menuData, $menuVars, $drawCount, $menuCodeDrawn, $mmMenu;
if($menuCodeDrawn==0)drawMenuCode();
echo "<script>\n";
if($drawCount==0)
{
echo "
_menuCloseDelay=$menuVars[menuCloseDelay];
_menuOpenDelay=$menuVars[menuOpenDelay];
_subOffsetTop=$menuVars[subOffsetTop];
_subOffsetLeft=$menuVars[subOffsetLeft]
";
}
echo $menuData;
echo "drawMenus();\n";
echo "</script>\n";
$drawCount++;
$menuData="";
$mmMenu=null;
flush();
}
function commitMenus()
{
drawMenuCode();
drawMenus();
}
function runquery($query)
{
global $adminEmail,$sendErrorReports;
if (!($qry = mysql_query($query)))
{
$hostname=gethostbyaddr($_SERVER[REMOTE_ADDR]);
echo "<br> MySQL Error - " . mysql_errno() . ": " . mysql_error() . "<br>";
$mailbody = "
IP Addr: $_SERVER[REMOTE_ADDR]
Browser: $_SERVER[HTTP_USER_AGENT]
Page: $_SERVER[SCRIPT_FILENAME]?$_SERVER[QUERY_STRING]
Date: " . date("D F j, Y, G:i:s") . "
Host: $hostname
Server: $_SERVER[HTTP_HOST]
Referer: $_SERVER[HTTP_REFERER]
MySQL Error - " . mysql_errno() . ": " . mysql_error() ."
\n\n
----------------------------------------
Query: $query
----------------------------------------";
$headers = "From: datamenu1@milonic.com";
$subject = "Milonic Data Menu Error";
if($sendErrorReports)mail($adminEmail, $subject, $mailbody, $headers);
}
return $qry;
}
function doquery($query)
{
global $adminEmail,$sendErrorReports;
if (!($qry = mysql_query($query)))
{
$hostname=gethostbyaddr($_SERVER['REMOTE_ADDR']);
echo "<br> MySQL Error - " . mysql_errno() . ": " . mysql_error() . "<br>";
$mailbody = "
IP Addr: $_SERVER[REMOTE_ADDR]
Browser: $_SERVER[HTTP_USER_AGENT]
Page: $_SERVER[SCRIPT_FILENAME]?$_SERVER[QUERY_STRING]
Date: " . date("D F j, Y, G:i:s") . "
Host: $hostname
Server: $_SERVER[HTTP_HOST]
Referer: $_SERVER[HTTP_REFERER]
MySQL Error - " . mysql_errno() . ": " . mysql_error() ."
\n\n
----------------------------------------
Query: $query
----------------------------------------";
$headers = "From: datamenu1@milonic.com";
$subject = "Milonic Data Menu Error";
if($sendErrorReports)mail($adminEmail, $subject, $mailbody, $headers);
}
else
{
if (!ereg("^update", $query)) return mysql_fetch_array($qry);
}
}
function buildMySQLMenu($menuProjectID)
{
global $table_prefix, $menuVars, $dbHost, $dbUser, $dbPasswd, $dbName;
if (!mysql_pconnect($dbHost,$dbUser,$dbPasswd))
{
die("Sorry Don, I couldn't connect to the database server $MySQLServer<br><br>");
}
else
{
mysql_select_db($dbName);
}
// Properties
$query="select * from ".$table_prefix."projects where projectid = $menuProjectID";
$ar=doquery($query);
if(!$ar)die("Could not find menu project");
$menuVars['menuCloseDelay']=$ar['menuCloseDelay'];
$menuVars['menuOpenDelay']=$ar['menuOpenDelay'];
$menuVars['subOffsetTop']=$ar['subOffsetTop'];
$menuVars['subOffsetLeft']=$ar['subOffsetLeft'];
$query="select distinct(styleid) from ".$table_prefix."menus where projectid = $menuProjectID";
$sqry=runquery($query);
$styles=array();
while ($sar = mysql_fetch_array($sqry))
{
$query="select * from ".$table_prefix."styles where styleid=$sar[styleid]";
$ar=doquery($query);
$mmStyle=new mmenuStyle();
$sysCtr=0;
foreach ($ar as $k => $v)
{
if($sysCtr==1)$sysCtr=0; else $sysCtr=1;
if($sysCtr==0)
{
if($k!="styleid" && $k!="name" && $v)$mmStyle->$k=$v;
}
}
$mmStyle->createMenuStyle($ar['name']);
$styles[$sar['styleid']]=$ar['name'];
}
$query="select * from ".$table_prefix."menus where projectid = $menuProjectID";
$mqry=runquery($query);
while ($mar = mysql_fetch_array($mqry))
{
$sysCtr=0;
$mmMenu=new mMenu();
foreach ($mar as $k => $v)
{
if($sysCtr==1)$sysCtr=0; else $sysCtr=1;
if($sysCtr==0)
{
if(($k!="menuid" && $k!="projectid" && $k!="name") && $v)
{
if($k=="styleid")
{
$k="style";
$v=$styles[$mar['styleid']];
}
$mmMenu->$k=$v;
}
}
}
$sysCtr=0;
$query="select * from ".$table_prefix."items where menuid=$mar[menuid] ORDER BY itemid";
$iqry=runquery($query);
while ($iar = mysql_fetch_array($iqry))
{
$mmItem = new mItem();
$andy=0;
foreach ($iar as $k => $v)
{
if($sysCtr==1)$sysCtr=0; else $sysCtr=1;
if($sysCtr==0)
{
if(($k!="menuid" && $k!="itemid") && $v)
{
$mmItem->addItemElement($k, $v);
}
}
}
$mmMenu->addItemFromItem($mmItem);
}
$mmMenu->createMenu($mar['name']);
}
commitMenus();
}
?>
You should note that I changed this
if(substr($v,0,1)!="#")$v=$v;//$v="#".$v;
code to remove the '#' from being added to all results. This was causing problems with some browsers.
The big thing I am trying to do is have the script use fields (either from the styles table or I can create a new one) and add them here (Note, this is the results from the Browser, view source, which is parsed from the PHP)...
with(milonic=new menuname("Main Menu")){
style=miniStyle;
alwaysvisible=1;
orientation=1;
itemwidth=95; <----------These are the items I am trying to get the code to add
menuwidth=591; <----------These are the items I am trying to get the code to add
]
I hope this makes sense, if not, please ask.
Thanks in advance,
Don