class View { /** * @var string Path relative to where (P)HTML templates reside */ const IncludePath = './design/views/'; /** * This function is to include the header file on a page. * * @param $PageTitle the title of the page * @param $JSIncludes is a comma-separated list of JS files to be included on * the page. ONLY PUT THE RELATIVE LOCATION WITHOUT '.js' * example: 'somefile,somedir/somefile' */ public static function show_header($PageTitle = '', $JSIncludes = '', $CSSIncludes = '') { global $Document, $Mobile, $Classes; if ($PageTitle != '') { $PageTitle .= ' :: '; } $PageTitle .= SITE_NAME; $PageID = array( $Document, // Document empty($_REQUEST['action']) ? false : $_REQUEST['action'], // Action empty($_REQUEST['type']) ? false : $_REQUEST['type'] // Type ); if (!is_array(G::$LoggedUser) || empty(G::$LoggedUser['ID'])) { require(SERVER_ROOT.'/design/publicheader.php'); } else { require(SERVER_ROOT.'/design/privateheader.php'); } } /** * This function is to include the footer file on a page. * * @param $Options an optional array that you can pass information to the * header through as well as setup certain limitations * Here is a list of parameters that work in the $Options array: * ['disclaimer'] = [boolean] (False) Displays the disclaimer in the footer */ public static function show_footer($Options = array()) { global $ScriptStartTime, $SessionID, $UserSessions, $Debug, $Time, $Mobile; if (!is_array(G::$LoggedUser)) { require(SERVER_ROOT.'/design/publicfooter.php'); } else { require(SERVER_ROOT.'/design/privatefooter.php'); } } /** * This is a generic function to load a template fromm /design and render it. * The template should be in /design/my_template_name.php, and have a class * in it called MyTemplateNameTemplate (my_template_name transformed to * MixedCase, with the word 'Template' appended). * This class should have a public static function render($Args), where * $Args is an associative array of the template variables. * You should note that by "Template", we mean "php file that outputs stuff". * * This function loads /design/$TemplateName.php, and then calls * render($Args) on the class. * * @param string $TemplateName The name of the template, in underscore_format * @param array $Args the arguments passed to the template. */ public static function render_template($TemplateName, $Args) { static $LoadedTemplates; // Keep track of templates we've already loaded. $ClassName = ''; if (isset($LoadedTemplates[$TemplateName])) { $ClassName = $LoadedTemplates[$TemplateName]; } else { include(SERVER_ROOT.'/design/' . $TemplateName . '.php'); // Turn template_name into TemplateName $ClassNameParts = explode('_', $TemplateName); foreach ($ClassNameParts as $Index => $Part) { $ClassNameParts[$Index] = ucfirst($Part); } $ClassName = implode($ClassNameParts). 'Template'; $LoadedTemplates[$TemplateName] = $ClassName; } $ClassName::render($Args); } /** * This method is similar to render_template, but does not require a * template class. * * Instead, this method simply renders a PHP file (PHTML) with the supplied * variables. * * All files must be placed within {self::IncludePath}. Create and organize * new paths and files. (e.g.: /design/views/artist/, design/view/forums/, etc.) * * @static * @param string $TemplateFile A relative path to a PHTML file * @param array $Variables Assoc. array of variables to extract for the template * @param boolean $Buffer enables Output Buffer * @return boolean|string * * @example
">Data * * // The variable $id within box.phtml will be filled by $some_id * View::parse('section/box.phtml', array('id' => $some_id)); * * // Parse a template without outputing it * $SavedTemplate = View::parse('sec/tion/eg.php', $DataArray, true); * // later . . . * echo $SavedTemplate; // Output the buffer **/ public static function parse($TemplateFile, array $Variables = array(), $Buffer = false) { $Template = self::IncludePath . $TemplateFile; if (file_exists($Template)) { extract($Variables); if ($Buffer) { ob_start(); include $Template; $Content = ob_get_contents(); ob_end_clean(); return $Content; } return include $Template; } } }