Simple-Templates: The Template-Engine
<?php | |
/** | |
* | |
* Abstract class WP Simple Templater creates a copy of the template-class and | |
* provide the templates to the template-engine | |
* @author Ralf Albert | |
* | |
*/ | |
abstract class WP_Simple_Templater extends Formatter | |
{ | |
/** | |
* | |
* Instance of template-class | |
* @var object $templates_object | |
*/ | |
protected $templates_object = NULL; | |
/** | |
* | |
* Constructor | |
* Creates an instance of the template-class and setup the delimiters for Formatter | |
* @param WP_Simple_Templates $templates | |
*/ | |
public function __construct( WP_Simple_Templates $templates ){ | |
$this->templates_object = &$templates; | |
$this->set_delimiter( '%', '%' ); | |
} | |
/** | |
* | |
* Return a template by given type. Returns an wp-error on failure | |
* @param string $type | |
* @return string|bool Return a template-string if it was defined by the template-class. Or false if no such template was defined | |
*/ | |
protected function get_templates( $templatetype = '', $type = '' ){ | |
// error message | |
$err_msg = ''; | |
// if the sub-type is empty (e.g the template is a string not an array), use the template-type as sub-type | |
if( '' == $type ) | |
$type = $templatetype; | |
// first check if a template-type was set | |
if( '' == $templatetype ) | |
$err_msg = 'Empty template-type'; | |
// check if a template-class was loaded | |
elseif( NULL === $this->templates_object ) | |
$err_msg = 'No templates defined in <strong>' . get_class( $this ) . '</strong>'; | |
// we have a template-type and a template-class. get the template(s) | |
else { | |
$template = $this->templates_object->get_templates( $templatetype ); | |
// get error-message thrown by template-class | |
if( is_wp_error( $template ) ) | |
$err_msg = $template->get_error_message(); | |
// check the template. | |
// convert a string into an array. else check if the requested type is in the template-array | |
else { | |
if( ! is_array( $template ) ) | |
$template[$type] = $template; | |
elseif( ! in_array( $type, array_keys( $template ) ) ) | |
$err_msg = $type . ' is not defined.'; | |
} | |
} | |
// if a error occurs, return an error-object | |
if( '' != $err_msg ){ | |
return new WP_Error( | |
'template_error', | |
sprintf( | |
'<div class="error"><h4>Template Error</h4>%s</div>', | |
$err_msg | |
) | |
); | |
} | |
// finally all checks are ok, return the template-array | |
return $template; | |
} | |
} | |
/** | |
* | |
* The concrete class WP Simple HTML insert the data in the templates | |
* @author Ralf Albert | |
* | |
*/ | |
class WP_Simple_HTML extends WP_Simple_Templater | |
{ | |
/** | |
* | |
* Constructor overrides the delimiters in parent class | |
* @param WP_Simple_Templates $templates | |
*/ | |
public function __construct( WP_Simple_Templates $templates ){ | |
parent::__construct( $templates ); | |
$this->set_delimiter( '{', '}' ); | |
} | |
/** | |
* | |
* Create a html list (ul, ol or with div-tag) | |
* @param string $type The type of the list. ul, ol or div | |
* @param array $data Data to display inside the list | |
*/ | |
public function get_list( $type = '', $data = array() ){ | |
// get list templates | |
$templates = $this->get_templates( 'list', $type ); | |
if( is_wp_error( $templates ) ) | |
return $templates->get_error_message(); | |
// create list | |
$inner = new stdClass(); | |
$values = new stdClass(); | |
foreach( $data as $key => $value ){ | |
$values->key = $key; | |
$values->item = $value; | |
$inner->inner .= self::sprintf( $templates[$type]['inner'], $values ); | |
} | |
return self::sprintf( $templates[$type]['outer'], $inner ); | |
} | |
/** | |
* | |
* Prints a html-list (ul, ol or with div-tag) | |
* @param string $type The type of the list. ul, ol or div | |
* @param array $data Data to display inside the list | |
*/ | |
public function print_list( $type = '', $data = array() ){ | |
if( ! is_array( $data ) ) | |
$data = (array) $data; | |
echo $this->get_list( $type, $data ); | |
} | |
/** | |
* | |
* Create a H1-headline | |
* @param string $text | |
*/ | |
public function get_headline( $text = '' ){ | |
// get headline template | |
$template = $this->get_templates( 'hone' ); | |
if( is_wp_error( $template ) ) | |
return $template->get_error_message(); | |
$data = new stdClass(); | |
$data->headline = $text; | |
return self::sprintf( $template, $data ); | |
} | |
/** | |
* | |
* Print a H1-headline | |
* @param string $text | |
*/ | |
public function print_headline( $text = '' ){ | |
echo $this->get_headline( $text ); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment