所以这是场景:
我正在构建一系列需要在同一服务器上单独安装Drupal-6的事件网站。每个都使用相同的架构,但使用不同的URL和主题。
我希望这些网站能够分享2种内容类型,教师和赞助商的内容。因此,将有一个数据库,其中包含所有教师和赞助商,每个单独的事件站点可以通过节点队列来获取。
这样就可以在任何Drupal安装中创建和编辑新的教师节点和赞助者节点。
共享用户表也很方便,但并非绝对必要。
有什么想法吗?
答案 0 :(得分:3)
this会帮助你吗?
settings.txt中的注释说明 如何使用$ db_prefix共享表:
* To provide prefixes for specific tables, set $db_prefix as an array.
* The array's keys are the table names and the values are the prefixes.
* The 'default' element holds the prefix for any tables not specified
* elsewhere in the array. Example:
*
* $db_prefix = array(
* 'default' => 'main_',
* 'users' => 'shared_',
* 'sessions' => 'shared_',
* 'role' => 'shared_',
* 'authmap' => 'shared_',
* );
另一种方式,虽然我不知道这是否有用,但是每个Drupal安装创建一个数据库并在每个数据库中创建一个VIEW,例如。 install1_users,install2_users,指共享数据库中的一个共享表shared_users。精心构造的视图应该像普通表一样updatable。
答案 1 :(得分:2)
听起来像Domain Access项目的工作,这是一套模块,提供从一个Drupal安装和一个共享数据库运行一组附属站点的工具。该模块允许您跨多个站点共享用户,内容和配置。默认情况下,这些站点共享Drupal安装中的所有表,但Domain Prefix模块允许高级用户选择性的动态表前缀。
恕我直言,这比滚动自定义解决方案要好得多,后者会带来相当大的复杂性和无法升级网站的风险。请参阅Share tables across instances (not recommended)。
答案 2 :(得分:1)
有几种方法可以做到这一点。
如果可以共享单个数据库,则可以使用前缀如下:
$db_prefix = array(
'default' => 'main_',
'users' => 'shared_',
'sessions' => 'shared_',
'role' => 'shared_',
'authmap' => 'shared_',
);
但是,请记住,MySQL数据库可以容纳的表数有一个硬限制。根据这个thread, it's 1792。如果您怀疑自己将达到此限制,则可以使用此黑客/错误。
$db_prefix = array(
'default' => '',
'users' => 'maindb.',
'sessions' => 'maindb.',
'role' => 'maindb.',
'authmap' => 'maindb.',
);
其中maindb是另一个包含所需数据的共享数据库。这不是最佳实践,但它适用于Drupal 6(未在D7中测试过)。