mirror of
				https://bitbucket.org/jsuto/piler.git
				synced 2025-10-31 02:02:27 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			120 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| 
 | |
| class Controller {
 | |
|    protected $id;
 | |
|    protected $data = array();
 | |
|    protected $children = array();
 | |
|    protected $layout;
 | |
|    protected $output;
 | |
|    protected $template;
 | |
| 
 | |
| 
 | |
|    public function __construct() {
 | |
|       $language = Registry::get('language');
 | |
|       $this->data = array_merge($this->data, $language->data);
 | |
|    }
 | |
| 
 | |
| 
 | |
|    public function __get($key) {
 | |
|       return Registry::get($key);
 | |
|    }
 | |
| 
 | |
| 
 | |
|    public function __set($key, $value) {
 | |
|       Registry::set($key, $value);
 | |
|    }
 | |
| 
 | |
| 
 | |
|    public function args($args = array()){
 | |
|       while(list($key, $value) = each($args)) $this->data[$key] = $value;
 | |
|    }
 | |
| 
 | |
| 
 | |
|    protected function render(){
 | |
| 
 | |
|       foreach ($this->children as $child) {
 | |
|          $file  = DIR_APPLICATION . $child . ".php";
 | |
|          $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $child);
 | |
| 
 | |
|          if(file_exists($file)){
 | |
|             require_once($file);
 | |
| 
 | |
|             $controller = new $class();
 | |
| 
 | |
|             $controller->index();
 | |
| 
 | |
|             $this->data[$controller->id] = $controller->output;
 | |
|          }
 | |
|          else {
 | |
|             exit("Error: Could not load controller ($file)" . $child . '!');
 | |
|          }
 | |
| 
 | |
|       }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|       $this->output = $this->fetch($this->template);
 | |
| 
 | |
| 
 | |
|       if($this->layout){
 | |
| 
 | |
|           $file  = DIR_APPLICATION . $this->layout . '.php';
 | |
|           $class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $this->layout);
 | |
| 
 | |
|           if(file_exists($file)){
 | |
|               require_once($file);
 | |
| 
 | |
|               $controller = new $class();
 | |
| 
 | |
|               $controller->data[$this->id] = $this->output;
 | |
| 
 | |
|               $controller->index();
 | |
| 
 | |
|               $this->output = $controller->output;
 | |
| 
 | |
|            }
 | |
|            else {
 | |
|               exit("Error: Could not load layout ($file) " . $this->layout . '!');
 | |
|            }
 | |
| 
 | |
|            print $this->output;
 | |
|       }
 | |
| 
 | |
|    }
 | |
| 
 | |
| 
 | |
|    protected function fetch(){
 | |
| 
 | |
|       if(isset($_SESSION['theme']) && preg_match("/^([a-zA-Z0-9\-\_]+)$/", $_SESSION['theme']) && file_exists(DIR_THEME . $_SESSION['theme']) ) {
 | |
|          $file = DIR_THEME . $_SESSION['theme'] . '/templates/' . $this->template;
 | |
|       } else {
 | |
|          $file = DIR_THEME . THEME . '/templates/' . $this->template;
 | |
|       }
 | |
| 
 | |
|   
 | |
|       if(file_exists($file)){
 | |
| 
 | |
|          extract($this->data);
 | |
| 
 | |
|          ob_start();
 | |
|       
 | |
|          include($file);
 | |
|       
 | |
|          $content = ob_get_contents();
 | |
| 
 | |
|          ob_end_clean();
 | |
| 
 | |
|          return $content;
 | |
|       }
 | |
|       else {
 | |
|          exit('Error: Could not load template ' . $file . '!');
 | |
|       }
 | |
|    }
 | |
| 
 | |
| 
 | |
| }
 | |
| 
 | |
| ?>
 |