What I did was install XOOPS cleanly to the same database with each of the subsites table prefix. (eg. main, sub1, sub2 etc...)
Then after each install, rename that mainfile to main.mainfile.php, sub1.mainfile.php, sub2.mainfile.php...
upload the following mainfile:
if (!(isset($subdominio))) {
$subdominio = $HTTP_HOST;
$subdominio = str_replace("www.","",$subdominio);
$subdominio = str_replace(".com","",$subdominio);
$subdominio = str_replace(".net","",$subdominio);
$subdominio = str_replace(".org","",$subdominio);
}
if (!(empty($subdominio))) {
include($subdominio.".mainfile.php");
}
?>
And modify this /class/database/database.php file
// $Id: database.php,v 1.16 2003/11/20 19:03:30 okazu Exp $
// database.php - defines abstract database wrapper class
// ------------------------------------------------------------------------ //
// XOOPS - PHP Content Management System //
// Copyright (c) 2000 XOOPS.org //
// //
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
/**
* @package kernel
* @subpackage database
*
* @author Kazumi Ono
* @copyright copyright (c) 2000-2003 XOOPS.org
*/
/**
* make sure this is only included once!
*/
if ( !defined("XOOPS_C_DATABASE_INCLUDED") ) {
define("XOOPS_C_DATABASE_INCLUDED",1);
/**
* Abstract base class for Database access classes
*
* @abstract
*
* @author Kazumi Ono
* @copyright copyright (c) 2000-2003 XOOPS.org
*
* @package kernel
* @subpackage database
*/
class XoopsDatabase
{
/**
* Prefix for tables in the database
* @var string
*/
var $prefix = '';
/**
* reference to a {@link XoopsLogger} object
* @see XoopsLogger
* @var object XoopsLogger
*/
var $logger;
/**
* constructor
*
* will always fail, because this is an abstract class!
*/
function XoopsDatabase()
{
// exit("Cannot instantiate this class directly");
}
/**
* assign a {@link XoopsLogger} object to the database
*
* @see XoopsLogger
* @param object $logger reference to a {@link XoopsLogger} object
*/
function setLogger(&$logger)
{
$this->logger =& $logger;
}
/**
* set the prefix for tables in the database
*
* @param string $value table prefix
*/
function setPrefix($value)
{
$this->prefix = $value;
}
/**
* attach the prefix.'_' to a given tablename
*
* if tablename is empty, only prefix will be returned
*
* @param string $tablename tablename
* @return string prefixed tablename, just prefix if tablename is empty
*/
function prefix($tablename='')
{
/** Start Multi site Hack*/
$myCommonTables = array('avatar', 'avatar_user_link', 'banner', 'bannerclient', 'bannerfinish',
'image', 'imagebody', 'imagecategory', 'imgset', 'imgset_tplset_link', 'imgsetimg',
'online', 'priv_msgs', 'ranks', 'session', 'smiles', 'users', 'xoopscomments', 'xoopsnotifications',
'bb_archive', 'bb_attachments', 'bb_categories', 'bb_digest', 'bb_forums', 'bb_online',
'bb_posts', 'bb_posts_text', 'bb_report', 'bb_topics', 'bb_votedata',
'smartfaq_answers', 'smartfaq_categories', 'smartfaq_faq',
'xoopspoll_desc', 'xoopspoll_log', 'xoopspoll_option');
$myPrefix = '';
if (in_array($tablename,$myCommonTables))
{
$myPrefix = 'main';
}
else $myPrefix = $this->prefix;
if ( $tablename != '' ) {
return $myPrefix .'_'. $tablename;
} else {
return $myPrefix;
}
}
}
}
/**End Mulsite hack*/
/**
* Only for backward compatibility
*
* @deprecated
*/
class Database
{
function &getInstance()
{
return XoopsDatabaseFactory::getDatabaseConnection();
}
}
?>
Look for the Multisite Hack block of code, and change the tables you want to share on ALL the sites, and set your prefix, the one here is set to "main".
Now all you need to do is install individual modules on the sites, and they will stay on that site only and not the others.
NOTE: If you delete a module Off one site, the uninstall scripts usually also delete the tables and so the module will have been deleted off the other sites too. Be very careful.
This is not perfect but works very well. I run my sites with this. I have 4 sites running.
The Lion's Den - Arena KebeKlan EOLeagues XBox @ The Lion's DenNow, the only part missing is to extend the database.php file to have IFs statement so that you can share a modules among 2 sites and then another modules among 2 other sites. Right now the limitation is share among ALL sites or none. Anyone care to take a crack at it??
Cheers.