3 cx_require('third_party', 'mime', 'mime_types.php');
5 function cx_template_content_path($class, $path) {
6 $segments = array(CX_PATH, 'templates', $class, 'assets', $path);
7 $path = join(DIRECTORY_SEPARATOR, $segments);
11 function cx_template_has_content($class, $path) {
12 return file_exists(cx_template_content_path($class, $path));
15 function cx_template_output_content($class, $path) {
16 $full_path = cx_template_content_path($class, $path);
18 $extension = pathinfo($path, PATHINFO_EXTENSION);
20 if (isset(MIME_REVERSE_MAP[$extension])) {
21 $mime_type = MIME_REVERSE_MAP[$extension][0];
23 $finfo = finfo_open(FILEINFO_MIME_TYPE);
24 $mime_type = finfo_file($finfo, $full_path);
25 //finfo_close($finfo); - Deprecated
28 header('Content-Type: ' . $mime_type);
29 header('Content-Length: ' . filesize($full_path));
31 $fp = fopen($full_path, 'rb');
36 function cx_template_render($class, $name, $variables = null) {
37 global $cx_template_base, $cx_template_content;
39 $base_template = null;
42 while ($name != null) {
43 $segments = array(CX_PATH, 'templates', $class, 'pages', $name . '.php');
44 $path = join(DIRECTORY_SEPARATOR, $segments);
46 $base_template = null;
47 $base_template_variables = null;
49 $cx_template_base_previous = $cx_template_base;
50 $cx_template_base = function($name, $base_variables) use (&$base_template, &$base_template_variables) {
51 $base_template = $name;
52 $base_template_variables = $base_variables;
55 $cx_template_content_previous = $cx_template_content;
56 $cx_template_content = function() use ($output) {
60 cx_require('lib', 'url.php'); // For templates
62 if ($variables != null) {
68 $output = ob_get_contents();
71 $cx_template_base = $cx_template_base_previous;
72 $cx_template_content = $cx_template_content_previous;
74 $name = $base_template;
75 $variables = $base_template_variables;
81 function cx_template_base($name, $variables = null) {
82 global $cx_template_base;
83 $cx_template_base($name, $variables);
86 function cx_template_content() {
87 global $cx_template_content;
88 return $cx_template_content();