2010-05-15, 06:08:25
Since there seem to be a few submenu scripts around and menu_data being a useful function in general, how about implementing some sort of caching for it, so the files aren't loaded each time it is called?
It should hopefully be relatively simple to do, what I would do is: set a global variable for the data, use it if it is not NULL, if it is, then load the data into it (code untested), e.g.
The same kind of thing could be done for other times when you are loading data from xml files.
It should hopefully be relatively simple to do, what I would do is: set a global variable for the data, use it if it is not NULL, if it is, then load the data into it (code untested), e.g.
Code:
$menu_data_cache = null;
function menu_data($id = null,$xml=false) {
$menu_extract = '';
global $PRETTYURLS;
global $SITEURL;
global $menu_data_cache;
if($menu_data_cache == null) {
$path = "data/pages";
$dir_handle = @opendir($path) or die("Unable to open $path");
$filenames = array();
while ($filename = readdir($dir_handle)) {
$filenames[] = $filename;
}
$count="0";
$pagesArray = array();
if (count($filenames) != 0) {
foreach ($filenames as $file) {
if ($file == "." || $file == ".." || is_dir("data/pages/".$file) || $file == ".htaccess" ) {
// not a page data file
} else {
$thisfile = @file_get_contents('data/pages/'.$file);
$data = simplexml_load_string($thisfile);
if ($data->private != 'Y') {
$pagesArray[$count]['menuStatus'] = $data->menuStatus;
$pagesArray[$count]['menuOrder'] = $data->menuOrder;
$pagesArray[$count]['menu'] = $data->menu;
$pagesArray[$count]['parent'] = $data->parent;
$pagesArray[$count]['title'] = $data->title;
$pagesArray[$count]['url'] = $data->url;
$pagesArray[$count]['private'] = $data->private;
$pagesArray[$count]['pubDate'] = $data->pubDate;
$count++;
}
}
}
}
$menu_data_cache = $pagesArray;
}
else
{
$pagesArray = $menu_data_cache;
}
.... rest of code ....
The same kind of thing could be done for other times when you are loading data from xml files.
-- Sam