|
|
- <?php
- namespace SparkLib;
-
- class HTML {
- /**
- * spit out an HTML tag
- *
- * takes a tag name, an array of attribute name/values, and an
- * optional body.
- *
- * if an attribute value is a literal true instead of a string,
- * just the attribute name will be inserted. this probably isn't
- * valid XHTML, but i think it's valid HTML5
- *
- * @param string tag name
- * @param array attribute name/value pairs
- * @param string contents of the tag
- */
- protected function makeTag ($tagname, array $attributes, $contents = null)
- {
- $close = ($contents === null) ? true : false;
- $html = $this->startTag($tagname, $attributes, $close);
-
- // if we got something to put inside, wrap it up
- // otherwise put it in a self-closing tag
- // n.b., this is potentially flawed for <script>
- if ($close)
- return $html;
- else
- return $html . $contents . "</{$tagname}>";
- }
-
- /**
- * Make a start tag, optionally self-closing.
- */
- protected function startTag ($tagname, array $attributes = array(), $close = false)
- {
- // open the tag
- $html = '<' . $tagname;
-
- // handle attributes
- foreach ($attributes as $a => $v) {
- if ($v === null) continue; // nothing
- elseif ($v === true) $html .= ' ' . $a; // bare attribute, no value
- else $html .= ' ' . $a . '="' . htmlspecialchars($v) . '"'; // attribute="value"
- }
-
- if ($close)
- return $html . ' />';
- else
- return $html . '>';
- }
-
- }
|