I am making a basic shopping cart and i’m having a problem where in the admin panel, i’m loading all the modules within a folder. When I load each file the PHP uses a class to gather the modules information like Name, Type etc.. But when it loads the second file it brings up a ‘Cannot redeclare class module_info in…’
So i’m sort of wanting to know, how can I get this to load all the modules and their information (via the module_info class which all modules use) and not show this ‘redeclare’ error.
I’ve tried ‘include_once’ and ‘require_once’ etc and even unset but no luck.
//module - payment
$modulePAYMENT = "<table class='table_result' cellpadding=\"0\" cellspacing=\"0\">";
$handler = opendir("../includes/modules/payment/");
while ($file = readdir($handler)) {
if ($file != "." && $file != "..") {
if($num == 1) {
$cla = "hvr";
$num = 0;
} else {
$cla = "blu";
$num = 1;
}
//Load Modules Info
include_once("../includes/modules/payment/".$file);
$module_info = new module_info;
//Get Links
if(moduleInstalled($module_info->MODULE_code)) {
$query_MOD = "SELECT * FROM sh_module WHERE code = '".$module_info->MODULE_code."'";
$exe_MOD = mysql_query($query_MOD);
$row = mysql_fetch_array($exe_MOD);
if($row['status']==1) {
$status = "<a class='link_status_enable pointer' onclick='moduleChangeStatus(".$row['mid'].",0)' title='This module is ENABLED. Click to DISABLE it.'>Enabled</a>";
} else {
$status = "<a class='link_status_disable pointer' onclick='moduleChangeStatus(".$row['mid'].",1)' title='This module is DISABLED. Click to ENABLE it.'>Disabled</a>";
}
$module_links = "<a class='link_small_lblue' href='sidebox_edit.php?SideboxID=".$row['sid']."'>Settings</a> <a class='link_small_lblue pointer' onclick='deleteModule(".$row['mid'].")'>Uninstall</a><div class='spacer10'></div>".$status;
} else {
$module_links = "<a class='link_small_lblue pointer' onclick=\"installModule('".urlencode($file)."')\">Install Module</a>";
}
//Add to list
$modulePAYMENT .= "<tr class='{$cla}' id='page_".$row['pid']."'><td><div style='float:left;padding:0;margin:0;' class='text_medium_white'>".$module_info->MODULE_title."<br>{$module_links}</div><div style='float:right;padding:0;margin:0;text-align:right;'></div></td></tr>";
}
Going on the error message alone it looks like you are defining class module_info in each of your includes. It should be defined once and included in each of your module files creating a new instance for each one. Even though the module information of a new include will override that of the previous you could add to the details to an array if you need to reference it later on:
... $modules_info = array(); while ($file = readdir($handler)) { if ($file != "." && $file != "..") { if($num == 1) { $cla = "hvr"; $num = 0; } else { $cla = "blu"; $num = 1; } //Load Modules Info include_once("../includes/modules/payment/".$file); $modules_info[basename($file)] = $module_info; ...