I wrote this block of code and what it does is set path variables depending on information pulled from the database. Then it searches through directories and pulls out files that I want to insert into my page.
I use the Smarty template engine, my problem is that even though this works to the extent I want it to. It runs really slow and takes a while to scan through the directories pull the files and make the markup before the whole page is loaded.
// Load variables based on if the user has a custom theme applied or a default one
$theme_name = $default->get_theme('theme_dir_name', 'dash');
if($users->get_settings('theme_is_custom', $auth->session->get('user_id')) == 1)
{
$css_path = "/".$auth->session->get("user_name")."/css";
$theme_dir = dirname(__FILE__) . "/assets/users/".$users->get_user_id($_GET['user'])."/themes/".$theme_name."/tpl/";
$s->assign("css_dir", $css_path."/".$theme_name);
$s->assign("js_dir" , "/".$_GET['user']."/js/".$theme_name);
}else{
$css_path = "/css";
$theme_dir = dirname(__FILE__) . "/assets/default/themes/".$theme_name."/tpl/";
$s->assign("css_dir", $css_path."/".$theme_name);
$s->assign("js_dir" , "/js/".$theme_name);
}
// Load modules
foreach($users->get_active_module($auth->session->get('user_id')) as $m)
{
if(@$m['module_is_custom'] == 1)
{
$path = "/".$auth->session->get("user_id")."/modules/".$m['module_folder_name']."/index.php";
$dir = "/".$auth->session->get("user_id")."/modules/".$m['module_folder_name'];
}else{
$path = dirname(__FILE__)."/assets/default/modules/".$m['module_folder_name']."/index.php";
$dir = dirname(__FILE__)."/assets/default/modules/".$m['module_folder_name'];
$js = "/modules/default/".$m['module_folder_name']."/js/";
$css = "/modules/default/".$m['module_folder_name']."/css/";
}
$css_module = "";
$js_module = "";
$module = $s->fetch($path);
if($handle = opendir($dir."/css/"))
{
while(false !== ($file = readdir($handle)))
{
if($file != "." && $file != ".."){
$css_module .= '<link rel="stylesheet" href="'.$css.$file.'" />';
}
}
closedir($handle);
}
if($handle = opendir($dir."/js/"))
{
while(false !== ($file = readdir($handle)))
{
if($file != "." && $file != "..")
{
$js_module .= '<script type="text/javascript" src="'.$js.$file.'"></script>';
}
}
closedir($handle);
}
$s->assign($m['module_folder_name']."_module", $css_module."\n".$js_module."\n".$module);
}
EDIT:
function getFileList($dir)
{
$retval = array();
if(substr($dir, -1) != "/")
$dir .= "/";
$d = @dir($dir) or die("getFileList: Failed opening directory $dir for reading");
while(false !== ($entry = $d->read()))
{
if($entry[0] == ".")
continue;
if(is_dir("$dir$entry"))
{
$retval[] = array( "name" => "$dir$entry/", "type" => filetype("$dir$entry"), "size" => 0, "lastmod" => filemtime("$dir$entry") );
}elseif(is_readable("$dir$entry")){
$retval[] = array( "name" => "$dir$entry", "type" => mime_content_type("$dir$entry"), "size" => filesize("$dir$entry"), "lastmod" => filemtime("$dir$entry") );
}
echo basename("$dir$entry")."<br />";
}
$d->close(); return $retval;
}
use this function, I wrote it myself and use it in several projects
function getFileList($dir) {
$retval = array();
if(substr($dir, -1) != "/") $dir .= "/";
$d = @dir($dir) or die("getFileList: Failed opening directory $dir for reading");
while(false !== ($entry = $d->read())) {
if($entry[0] == ".") continue;
if(is_dir("$dir$entry")) {
$retval[] = array( "name" => "$dir$entry/", "type" => filetype("$dir$entry"), "size" => 0, "lastmod" => filemtime("$dir$entry") );
} elseif(is_readable("$dir$entry")) {
$retval[] = array( "name" => "$dir$entry", "type" => mime_content_type("$dir$entry"), "size" => filesize("$dir$entry"), "lastmod" => filemtime("$dir$entry") );
}
}
$d->close();
return $retval;
}
Please note the function I Posted above... other then that, do load first any data which you are going to use in arrays and then process the markup all in one go after you gathered all the data.