<?php
/*
The documentation in this file conforms to PHPDoc beta 1 standard, see http://www.phpdoc.de/ for more info.
IMPORTANT! Mind that this file presumes a certain number of things, like:
-it can generate HTML 4.01 Transitional or XHTML 1.0 Transitional output
-the character set used is UTF-8
-the language used is English
-the inline client-side scripts are of type JavaScript
-etc., etc....
Just change the class variables as needed further up in this file. Most of them are used in method meta().
*/
/**
* constant for use with robot meta tag
*
* @const ROBOTS_NOINDEX
* @access public
* @see meta()
*/
define("ROBOTS_NOINDEX", 1);
/**
* constant for use with robot meta tag
*
* @const ROBOTS_NOFOLLOW
* @access public
* @see meta()
*/
define("ROBOTS_NOFOLLOW", 2);
/**
* constant for use with robot meta tag
*
* @const ROBOTS_INDEX_NOFOLLOW
* @access public
* @see meta()
*/
define("ROBOTS_INDEX_NOFOLLOW", 3);
/**
* constant for use with robot meta tag
*
* @const ROBOTS_NOINDEX_FOLLOW
* @access public
* @see meta()
*/
define("ROBOTS_NOINDEX_FOLLOW", 4);
/**
* constant for use with robot meta tag
*
* @const ROBOTS_NOINDEX_NOFOLLOW
* @access public
* @see meta()
*/
define("ROBOTS_NOINDEX_NOFOLLOW", 5);
/**
* methods that generate globally needed HTML tags
*
* Note: the documentation in this file conforms to the PHPDoc standard (see www.phpdoc.de)
* Usage:<br>
* first of all, include this file in your script
* $g = new Globals;
* $g->set("xhtml", true); // generate XHTML 1.0 output
* // Print DTD, «HTML» tag and title, but no «HTML» tag if no parameter!
* $g->dtd("Title");
* // Print meta tags and headers
* $g->meta("Description", "keyword1, keyword2", ROBOTS_NOINDEX, true, false);
* <br>
* License: GPL, see GPL.txt
*
* @author Richard Vrijhof <R.J.Vrijhof@bigfoot.com>
* @version 1.1
* @access public
*/
class Globals {
/***************************************************************************************************
Public variables. Get or set them with get() and set() (except $self and $self_result).
***************************************************************************************************/
/**
* automatically generated by method <code>setSelf</code>.
* <p>Contains path to the script calling this class.</p>
*
* @var string $var
* @access public
* @see setSelf()
*/
var $self = "";
/**
* tells class <code>Globals</code> to generate XHTML 1.0 output
*
* @var boolean $xhtml
* @access public
*/
var $xhtml = false;
/***************************************************************************************************
Private variables.
***************************************************************************************************/
/**
* automatically generated by constructor method.
* <p>Contains result of method <code>setSelf</code>.</p>
*
* @var integer $self_result
* @access private
* @see setSelf()
*/
var $self_result = 0;
/**
* first required line in HTML body when conforming to XHTML 1.0
*
* @var string $xml
* @access private
* @see dtd()
*/
var $xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
/**
* document type definition, either HTML 4.01 or XHTML 1.0
*
* @var string $dtd
* @access private
* @see dtd()
*/
var $dtd = array(
"xhtml" => "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"DTD/xhtml1-transitional.dtd\">\n",
"html" => "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n\n<html>\n"
);
/**
* XML namespace tag
*
* @var string $xmlns
* @access private
* @see dtd()
*/
var $xmlns = "\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n";
/**
* content-type header
*
* @var string $content
* @access private
* @see meta()
*/
var $content = "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"";
/**
* content-script-type header
*
* @var string $contentST
* @access private
* @see meta()
*/
var $contentST = "<meta http-equiv=\"content-script-type\" content=\"text/javascript\"";
/**
* copyright meta tag
*
* @var string $copyright
* @access private
* @see meta()
*/
var $copyright = "<meta name=\"copyright\" content=\"2001 Put your name here\"";
/**
* reply-to meta tag
*
* @var string $reply
* @access private
* @see meta()
*/
var $reply = "<meta name=\"reply-to\" content=\"Put your name here - email@address.com\"";
/**
* generator meta tag
*
* @var string $generator
* @access private
* @see meta()
*/
var $generator = "<meta name=\"generator\" content=\"Put the name and version of your text/HTML editor here\"";
/**
* PICS-Label header
*
* @var string $reply
* @access private
* @see meta()
*/
var $pics = "Get your own PICS-Label on http://www.icra.org/ before ever using this class or change the code in method meta() further up!!!";
/**
* Cache-control header
*
* @var string $nocache
* @access private
* @see meta()
*/
var $nocache = "<meta http-equiv=\"cache-control\" content=\"no-cache, must-revalidate\"";
/**
* Pragma header
*
* @var string $nocache1
* @access private
* @see meta()
*/
var $nocache1 = "<meta http-equiv=\"pragma\" content=\"no-cache\"";
/**
* Expires header
*
* @var string $expires
* @access private
* @see meta()
*/
var $expires = "<meta http-equiv=\"expires\" content=\"Sat, 01 Jan 2000 00:00:00 GMT\"";
/**
* Last-modified header
*
* @var string $last_modified
* @access private
* @see meta()
*/
var $last_modified = "<meta http-equiv=\"last-modified\" content=\"";
/***************************************************************************************************
Public methods.
***************************************************************************************************/
/**
* retrieves a class variable
*
* @param string $var name of the class variable
* @return mixed value of the class variable
* @access public
*/
function get($var) {
return($this->$var);
}
/**
* sets a class variable
*
* @param string $var name of the class variable
* @param mixed $val value of the class variable
* @access public
*/
function set($var, $val) {
$this->$var = $val;
}
/**
* prints a Document Type Definition (and the «html» tag)
* <p>As an added bonus, it can also print the title (and so, of course, it
* also has to print the «head» tag).</p>
*
* @param string $title name of the class variable
* @access public
*/
function dtd($title = "") {
if ($this->xhtml) {
echo $this->xml;
echo $this->dtd["xhtml"];
echo $this->xmlns;
} else
echo $this->dtd["html"];
if ($title)
echo "\n<head>\n\n<title>$title</title>\n";
}
/**
* prints the meta tags defined in the meta tag class variables
* <p>Can also print description and keywords meta tags, if desired.</p>
*
* @param string $description description meta tag content
* @param string $keywords keywords meta tag content
* @param int $robots whether a robots meta tag must be printed and which (use 0 to disable)
* @param boolean $nocache whether the no-cache meta tags must be printed
* @param boolean $last_modified whether the last-modified meta tag must be printed
* @access public
*/
function meta($description = "", $keywords = "", $robots = 0, $nocache = false, $last_modified = false) {
if ($this->xhtml) {
echo "$this->content />\n";
echo "$this->contentST />\n";
echo "$this->copyright />\n";
echo "$this->reply />\n";
if ($description)
echo "<meta name=\"description\" content=\"$description\" />\n";
if ($keywords)
echo "<meta name=\"keywords\" content=\"$keywords\" />\n";
echo "$this->generator />\n";
echo "$this->pics />\n";
switch ($robots) {
case ROBOTS_NOINDEX :
echo "<meta name=\"robots\" content=\"noindex\" />\n";
break;
case ROBOTS_NOFOLLOW :
echo "<meta name=\"robots\" content=\"nofollow\" />\n";
break;
case ROBOTS_INDEX_NOFOLLOW :
echo "<meta name=\"robots\" content=\"index,nofollow\" />\n";
break;
case ROBOTS_NOINDEX_FOLLOW :
echo "<meta name=\"robots\" content=\"noindex,follow\" />\n";
break;
case ROBOTS_NOINDEX_NOFOLLOW :
echo "<meta name=\"robots\" content=\"noindex,nofollow\" />\n";
}
if ($nocache) {
echo "$this->nocache />\n";
echo "$this->nocache1 />\n";
echo "$this->expires />\n";
}
if ($last_modified)
echo $this->last_modified.gmdate("D, d M Y H:i:s")." GMT\" />\n";
} else {
echo "$this->content>\n";
echo "$this->contentST>\n";
echo "$this->copyright>\n";
echo "$this->reply>\n";
if ($description)
echo "<meta name=\"description\" content=\"$description\">\n";
if ($keywords)
echo "<meta name=\"keywords\" content=\"$keywords\">\n";
echo "$this->generator>\n";
// Get your own PICS-Label or comment this out:
echo "$this->pics>\n";
switch ($robots) {
case ROBOTS_NOINDEX :
echo "<meta name=\"robots\" content=\"noindex\">\n";
break;
case ROBOTS_NOFOLLOW :
echo "<meta name=\"robots\" content=\"nofollow\">\n";
break;
case ROBOTS_INDEX_NOFOLLOW :
echo "<meta name=\"robots\" content=\"index,nofollow\">\n";
break;
case ROBOTS_NOINDEX_FOLLOW :
echo "<meta name=\"robots\" content=\"noindex,follow\">\n";
break;
case ROBOTS_NOINDEX_NOFOLLOW :
echo "<meta name=\"robots\" content=\"noindex,nofollow\">\n";
}
if ($nocache) {
echo "$this->nocache>\n";
echo "$this->nocache1>\n";
echo "$this->expires>\n";
}
if ($last_modified)
echo $this->last_modified.gmdate("D, d M Y H:i:s")." GMT\">\n";
}
}
/**
* returns a hyperlink/anchor
* <p>Optionally with a text in the status bar (you know, with onmouseover()),
* an id (in case you want to make an anchor) and a target attribute (handy if
* you´re working with frames).</p>
* <p>It returns the HTML tag up to the first <em>></em> character (so it
* reads something like <em>«a href="" .....»</em>), but you
* can give it the parameter <code>$end</code> with whatever you want
* (but something like <em>click here«/a»</em> is what it´s
* actually meant for).</p>
*
* @param string $url URL you want to link to
* @param string $status text in the status bar when hovering over the link
* @param string $target target frame
* @param string $id ID/name if you want to make an anchor
* @param string $end text to print at the end
* @return string needed HTML tag
* @access public
*/
function a($url = "", $status = "", $target = "", $id = "", $end = "") {
$str = "<a";
if ($url)
$str .= " href=\"$url\"";
if ($id)
$str .= " name=\"$id\" id=\"$id\"";
if ($status)
$str .= " title=\"$status\" onmouseover=\"self.status='$status';return true;\" onmouseout=\"self.status='';return true;\"";
if ($target)
$str .= " target=\"$target\">";
else
$str .= ">";
$str .= $end;
return $str;
}
/**
* returns an IMG tag
* <p>Optionally with width, height, and alt attributes (border attribute is
* always printed though, but 0 if unset, so can't do any harm, I presume).</p>
* <p>It returns the HTML tag up to the first <em>></em> character (so it
* reads something like <em>«img src="" .....»</em>), but you can give
* it the parameter <code>$end</code> with whatever you want for some text to
* put after the img tag.</p>
* <p>The idea behind this is that if you want to make an image which is a
* link, you first put an <em>«a»</em> tag followed by an <em>«img»</em> tag.
* Then you want to have the extra text (namely <em>«/a»</em> at least) after the <em>«img»</em>
* tag, not after the <em>«a»</em> tag and some text. That´s why <code>img</code> also
* has the <code>$end</code> parameter.</p>
*
* @param string $url URL of the image
* @param int $width width of the image in pixels
* @param int $height height of the image in pixels
* @param string $alt text for the ALT attribute
* @param int $border width of the image border
* @param boolean $ismap whether the image is a server-side map or not
* @param string $end text to put after the <em>«img»</em> tag
* @return string needed HTML tag
* @access public
* @see Globals a()
*/
function img($url, $width = 0, $height = 0, $alt = "", $border = 0, $ismap = false, $end = "") {
$str = "<img src=\"$url\"";
if ($width > 0)
$str .= " width=\"$width\"";
if ($height > 0)
$str .= " height=\"$height\"";
if ($alt)
$str .= " alt=\"".addslashes($alt)."\"";
$str .= " border=\"$border\"";
if ($ismap)
if ($this->xhtml)
$str .= " ismap=\"ismap\"";
else
$str .= " ismap";
if ($this->xhtml)
$str .= " />";
else
$str .= ">";
$str .= $end;
return $str;
}
/***************************************************************************************************
Private methods. Do not call!
***************************************************************************************************/
/**
* sets the <code>$self</code> variable to a sensible value
* <p>Called automatically when the class is instantiated. Do not call yourself!</p>
*
* @return int
* 1 if used <code>REQUEST_URI</code> from the environment to set <code>$self</code><br>
* 2 if used <code>PATH_INFO</code> from the environment to set <code>$self</code><br>
* 3 if used <code>PHP_SELF</code> from the environment to set <code>$self</code><br>
* @access private
*/
function setSelf() {
if (eregi("^(.*[^\?])", getenv("REQUEST_URI"), $regs)) { // Should be present on both *NIX/Apache module & NT/CGI
$this->self = $regs[1];
return(1);
} elseif ($temp = getenv("PATH_INFO") != "") { // NT/CGI
$this->self = $temp;
return(2);
} else {
$this->self = getenv("PHP_SELF"); // If still NT/CGI, then this will be undesired (something like "/php4/php.exe/path/name.ext" instead of "/path/name.exe"), but should be left with *NIX/Apache module only now
return(3);
}
}
/**
* constructor, only calls method <code>setSelf</code> on instantiation
*/
function Globals() {
$this->self_result = $this->setSelf();
}
}
?>
|