<?php
//////////////////////////////////////////////////////////////////////////////
// Class: htRoundedMenus
//
// Make sure you get the GIFs for the corners and the 1x1 transparent pixel.
// Otherwise, the menus won't look right.
// The GIFs, this file, and example usage are available at:
// http://www.harrytravis.com/htRoundedMenus/htRoundedMenus.zip
//
// Add menus with rounded corners to your web page.
// See rounded.php for example usage.
// This is fairly procedural instead of OO, but some things should be...
//
// This is absolutely free.
// Use it at your own risk.
// Do whatever you want with it.
//
// I'd be interested to hear if you find it useful.
//
// Author: Harry Travis, me@harrytravis.com
//////////////////////////////////////////////////////////////////////////////
class htRoundedMenus
{
///////////////////////////////////////////////////////////////////////////
// Instantiate one htRoundedMenus object per page.
function htRoundedMenus()
{
// overwrite these values to customize your menus
$this->background_color = "99CCCC";
$this->foreground_color = "FFFF99";
$this->title_font_style = "color:ffff99; text-decoration:none; font-weight:bold; font-size:12pt; font-family:trebuchet,trebuchet MS,arial,sans-serif;";
$this->option_font_style = "color:99cccc; text-decoration:none; font-size:12pt; font-family:trebuchet,trebuchet MS,arial,sans-serif;";
// width of the menu (pixels)
$this->menu_width = 150;
// space between menus
$this->menu_padding = 3;
// URLs for left and right rounded corners
$this->left_corner = "left_corner.gif";
$this->right_corner = "right_corner.gif";
$this->one_by_one = "1x1.gif";
}
///////////////////////////////////////////////////////////////////////////
// For each menu on your page, call this method.
// URL is optional.
function NewMenu($title_text,$title_url="")
{
$this->title_text = $title_text;
$this->title_url = $title_url;
$this->options = array();
$this->inner_html = "";
}
///////////////////////////////////////////////////////////////////////////
// For each option on a menu, call this method.
// URL is optional.
// Do not add two options with same title to a menu.
function AddOption($text,$url="")
{
$this->options[$text] = $url;
}
///////////////////////////////////////////////////////////////////////////
// Setting inner HTML replaces all options.
// Options and inner HTML are mutually exclusive.
function SetInnerHTML($html)
{
$this->inner_html = $html;
}
///////////////////////////////////////////////////////////////////////////
function OpenMenu()
{
if ( $this->title_url )
{
$title = "<a style='".$this->title_font_style."' ".
"href='".$this->title_url."'>".$this->title_text."</a>";
}
else
{
$title = "<font style='".$this->title_font_style."'>".
$this->title_text."</font>";
}
?>
<table border=0 cellpadding=0 cellspacing=0 bgcolor="<?=$this->background_color?>">
<tr>
<?php // each corner is 4 pixels wide, so subtract 8 from menu width for title cell ?>
<td><img src="<?=$this->left_corner?>" width=4 height=25 border=0></td>
<td width="<?=$this->menu_width-8?>" style="<?=$this->title_font_style?>" valign="middle">
<?=$title?>
</td>
<td><img src="<?=$this->right_corner?>" width=4 height=25 border=0></td>
</tr>
<?php
}
///////////////////////////////////////////////////////////////////////////
function CloseMenu()
{
// the height of this img sets the spacing between menus
?>
<tr><td colspan=3><img src="<?=$this->one_by_one?>" width="<?=$this->menu_width?>" height="<?=$this->menu_padding?>" border=0></td></tr>
</table>
<?php
}
///////////////////////////////////////////////////////////////////////////
function WriteMenuBody()
{
// do nothing if no options and no HTML
if ( !$this->inner_html && count($this->options) == 0 )
{
return;
}
// open menu body
?>
<tr>
<td colspan=3>
<table bordercolor="<?=$this->background_color?>" bgcolor="<?=$this->foreground_color?>" border=1 borderstyle="solid" cellpadding=3 cellspacing=0 width="100%">
<tr><td>
<?php
// write inner HTML
if ( $this->inner_html )
{
echo "<font style='".$this->option_font_style."'>";
echo $this->inner_html;
echo "</font>\n";
}
// write options
else if ( count($this->options) > 0 )
{
foreach ($this->options as $text => $url )
{
if ( $url )
{
$op = "<a style='".$this->option_font_style."' href='$url'>$text</a>\n";
}
else
{
$op = "<font style='".$this->option_font_style."'>$text</font>";
}
echo " $op<br>";
}
}
// close menu body
?>
</td></tr>
</table>
</td>
</tr>
<?php
}
///////////////////////////////////////////////////////////////////////////
// After all options have been added to a menu, call this method.
// It prints out the HTML for the menu.
function WriteMenu()
{
$this->OpenMenu();
$this->WriteMenuBody();
$this->CloseMenu();
return;
}
}
?>
|