Output.class.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace App\Core\Template;
  3. class Output {
  4. private static $_instance;
  5. private $view = false;
  6. protected $values = Array();
  7. private $_template = '';
  8. private $_extension = '';
  9. private function __construct() {
  10. $this->_template = ( defined('TEMPLATE_DEFAULT') ) ? TEMPLATE_DEFAULT : 'DefaultTemplate';
  11. $this->_extension = ( defined('TEMPLATE_FILETYPE') ) ? TEMPLATE_FILETYPE : '.mustache';
  12. }
  13. private static function newObj() {
  14. if (!isset(self::$_instance)) {
  15. self::$_instance = new Output();
  16. }
  17. return self::$_instance;
  18. }
  19. public function getInstance() {
  20. if (!isset(self::$_instance)) {
  21. return self::newObj();
  22. }
  23. return self::$_instance;
  24. }
  25. public function setTemplate($template = 'DefaultTemplate') {
  26. self::getInstance()->_template = $template;
  27. // self::getInstance()->_template = '';
  28. return self::getInstance();
  29. }
  30. public static function renderView($name, $values = null, $location = null) {
  31. if (!$location) {
  32. $segments = explode('/', debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)[0]['file']);
  33. array_pop($segments);
  34. $location = implode('/', $segments) . '/views/';
  35. }
  36. self::getInstance()->setView($name, $values, $location)->render();
  37. }
  38. public static function setView($name, $values = Array(), $location = null) {
  39. $instance = self::getInstance();
  40. $folder = '';
  41. if (!$location) {
  42. $segments = explode('/', debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)[0]['file']);
  43. array_pop($segments);
  44. $location = implode('/', $segments) . '/views/';
  45. }
  46. $folder = $location;
  47. $location .= $name;
  48. if (strpos($instance->_extension, $location) == 0) {
  49. $location .= $instance->_extension;
  50. }
  51. $instance->view = Array();
  52. $instance->view['location'] = $location;
  53. $instance->view['folder'] = $folder;
  54. $instance->view['values'] = $values;
  55. return self::getInstance();
  56. }
  57. public static function addValue($key, $value){
  58. self::getInstance()->view['values'][$key] = $value;
  59. }
  60. public static function render() {
  61. $instance = self::getInstance();
  62. if(!is_file(__DIR__."/classes/".strtolower($instance->_template)."/".$instance->_template.'.php') ){
  63. $instance->_template = 'DefaultTemplate';
  64. }
  65. include_once __DIR__."/classes/".strtolower($instance->_template)."/".$instance->_template.'.php';
  66. $class = new $instance->_template;
  67. $class->setView($instance->view)->render();
  68. }
  69. }