/** * This function is used to load views and files. * Variables are prefixed with __ to avoid symbol collision with * variables made available to view files **/ private static function _loadfile($name, $vars, $__return, $ispath = false) { // we make sure that vars is an array even if it's empty. if (!is_array($vars)) { $vars = array(); } // if $name refers to a file located in the views directory // or to an absolute file path. if (!$ispath) { // Add the views directory path and the default // file extension if $name of doesn't contain one $__path = pathinfo($name, PATHINFO_EXTENSION) != '' ? VIEW . $name : VIEW . $name . EXT; } else { $__path = $name; } if (!file_exists($__path)) { Core::error('404MSG', 'LIBTIT', array(__CLASS__, $name)); } // Extract variables to file (if any). // Note: We're merging the $vars array with the self::$_VAR array // so we can use either of the two methods available for accessing these vars. extract(self::$_VAR = array_merge(self::$_VAR, $vars)); // Unset variables so they don't interfere with files' vars. unset($name, $vars, $ispath); // Start buffering ob_start(); // Forcing PHP Short Tags // Note: I recommend not to use this feature, if your PHP installation // doesn't support it natively and you plan to code a complex application. // It's wasting processing time just for avoiding to write some chars. don't be lazy! if ((bool) @ini_get('short_open_tag') === false && Core::config('force_short_tags') === true) { echo eval('?>' . preg_replace("/;*\\s*\\?>/", "; ?>", str_replace('<?=', '<?php echo ', file_get_contents($__path))) . '<?php '); } else { require $__path; } // return the file data if requested if ($__return) { $b = ob_get_contents(); ob_end_clean(); return $b; } // Flushing the buffer // In order to allow views to be nested within other views, we need to flush // the content back out whenever we are beyond the first level of Output Buffering // So it can be seen and included properly by the first included template and any subsequent ones. Oy! if (!Core::obflush()) { $c = ob_get_contents(); ob_end_clean(); Output::append($c); } }