Skip to content
Snippets Groups Projects

view builder

Merged Krzysztof Dyszczyk requested to merge feature/builder into master
6 files
+ 120
1
Compare changes
  • Side-by-side
  • Inline
Files
6
+ 70
0
 
<?php
 
 
namespace WPDesk\View;
 
 
use WPDesk\View\Renderer\SimplePhpRenderer;
 
use WPDesk\View\Resolver\ChainResolver;
 
use WPDesk\View\Resolver\DirResolver;
 
use WPDesk\View\Resolver\WPThemeResolver;
 
 
/**
 
* Facilitates building of the default plugin renderer.
 
*
 
* @package WPDesk\View
 
*/
 
class PluginViewBuilder {
 
/** @var string */
 
private $plugin_dir;
 
 
/** @var string[] */
 
private $template_dirs;
 
 
/**
 
* @param string $plugin_dir Plugin directory path(absolute path)
 
* @param string|string[] $template_dir Directory or list of directories with templates to render
 
*/
 
public function __construct( $plugin_dir, $template_dir = 'templates' ) {
 
$this->plugin_dir = $plugin_dir;
 
if ( ! is_array( $template_dir ) ) {
 
$this->template_dirs = [ $template_dir ];
 
} else {
 
$this->template_dirs = $template_dir;
 
}
 
}
 
 
/**
 
* Creates simple renderer that search for the templates in plugin dir and in theme/child dir.
 
*
 
* For example if your plugin dir is /plugin, template dir is /templates, theme is /theme, and a child theme is /child
 
* the templates will be loaded from(order is important):
 
* - /child/plugin/*.php
 
* - /theme/plugin/*.php
 
* - /plugin/templates/*.php
 
*
 
* @return SimplePhpRenderer
 
*/
 
public function createSimpleRenderer() {
 
$resolver = new ChainResolver();
 
$resolver->appendResolver( new WPThemeResolver( basename( $this->plugin_dir ) ) );
 
foreach ( $this->template_dirs as $dir ) {
 
$dir = trailingslashit( $this->plugin_dir ) . trailingslashit( $dir );
 
$resolver->appendResolver( new DirResolver( $dir ) );
 
}
 
return new SimplePhpRenderer( $resolver );
 
}
 
 
/**
 
* Load templates using simple renderer.
 
*
 
* @param string $name Name of the template
 
* @param string $path Additional path of the template ie. for path "path" the templates would be loaded from /plugin/templates/path/*.php
 
* @param array $args Arguments for templates to use
 
*
 
* @return string Rendered template.
 
*/
 
public function loadTemplate( $name, $path = '.', $args = array() ) {
 
$renderer = $this->createSimpleRenderer();
 
 
return $renderer->render( trailingslashit( $path ) . $name, $args );
 
}
 
}
 
\ No newline at end of file
Loading