Skip to content

Instantly share code, notes, and snippets.

@dave1010
Created August 9, 2011 14:02
Show Gist options
  • Save dave1010/1134119 to your computer and use it in GitHub Desktop.
Save dave1010/1134119 to your computer and use it in GitHub Desktop.
HtmlNode.php - generate HTML from PHP
<?php
/**
* Quick and dirty HTML generation for PHP
*/
class HtmlNode {
public $element = 'div';
public $content = null;
public $attrs = array();
public function __construct($element=null, $content=null, $attrs=null, $closing=null, $shortclosing=' /') {
$this->element = $element;
$this->closing = $closing ? $closing : '/' . $element; // hack for comment nodes
$this->shortclosing = $shortclosing;
$this->content = $content;
$this->attrs = $attrs;
}
private function attrs() {
$r = '';
foreach ($this->attrs as $name => $val) {
$r .= ' ' . (is_string($name) ? $name . '="' : '')
. htmlspecialchars($val)
. (is_string($name) ? '"' : '');
}
return $r;
}
private function content() {
return is_array($this->content) ? implode('', $this->content) : $this->content;
}
public function __toString() {
if (empty($this->content)) {
// self closing
return "<$this->element"
. $this->attrs()
. $this->shortclosing . ">";
}
return "<$this->element" . $this->attrs() . ">"
. $this->content()
. "<$this->closing>";
;
}
}
// all html5 elements
// these don't follow the rules
function comment ($c=null, $a=array()) {return new HtmlNode('!-- ', $c, $a, ' --');} // slightly broken
function doctype ($c=null, $a=array()) {return new HtmlNode('!doctyle', $c, $a, null, '');} // shouldn't have closing /
// reserved words
function dl_ ($c=null, $a=array()) {return new HtmlNode('dl', $c, $a);}
function header_ ($c=null, $a=array()) {return new HtmlNode('header', $c, $a);}
function link_ ($c=null, $a=array()) {return new HtmlNode('link', $c, $a);}
function time_ ($c=null, $a=array()) {return new HtmlNode('time', $c, $a);}
function var_ ($c=null, $a=array()) {return new HtmlNode('var', $c, $a);}
function a ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function abbr ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function address ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function area ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function article ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function aside ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function audio ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function b ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function base ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function bb ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function bdo ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function blockquote ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function body ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function br ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function button ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function canvas ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function caption ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function cite ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function code ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function col ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function colgroup ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function command ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function datagrid ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function datalist ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function dd ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function del ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function details ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function dfn ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function div ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function dt ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function em ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function embed ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function eventsource ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function fieldset ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function figcaption ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function figure ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function footer ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function form ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function h1 ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function h2 ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function h3 ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function h4 ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function h5 ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function h6 ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function head ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function hgroup ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function hr ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function html ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function i ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function iframe ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function img ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function input ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function ins ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function kbd ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function keygen ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function label ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function legend ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function li ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function mark ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function map ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function menu ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function meta ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function meter ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function nav ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function noscript ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function object ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function ol ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function optgroup ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function option ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function output ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function p ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function param ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function pre ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function progress ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function q ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function ruby ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function rp ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function rt ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function samp ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function script ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function section ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function select ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function small ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function source ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function span ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function strong ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function style ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function sub ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function summary ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function sup ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function table ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function tbody ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function td ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function textarea ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function tfoot ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function th ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function thead ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function title ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function tr ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function ul ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function video ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
function wbr ($c=null, $a=array()) {return new HtmlNode(__FUNCTION__, $c, $a);}
// quick example
$google_link = a('click here', array('href' => 'http://www.google.com', 'foo'));
// without clone, changing properties in 1 object changes both objects
$github_link = clone $google_link;
$github_link->attrs['href'] = 'https://github.com/?' . http_build_query(array(
'id' => 123,
'title' => 'bar',
'time' => '23:59',
));
$github_link->attrs['style'] = 'color: orange';
$head = head(array(
title('HtmlNode test') . "\n",
meta(null, array('charset' => 'utf-8')) . "\n",
style('a { font-weight: bold; }') . "\n",
script('alert("hi");') . "\n",
)) . "\n";
$p = p(array(
"\n" . $google_link . "\n",
"or " . br() . "\n",
$github_link . "\n",
));
echo doctype(null, array('html')) . "\n";
echo html(array(
$head,
comment('this is a test') . "\n",
body(div($p)) . "\n",
)) . "\n";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment