Created
August 9, 2011 14:02
-
-
Save dave1010/1134119 to your computer and use it in GitHub Desktop.
HtmlNode.php - generate HTML from PHP
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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