Es sabido que en Drupal, podemos, a partir de una sola instalación (un solo código base de Drupal), tener varios sitios o subdominios compartiendo este mismo código pero teniendo cada uno sus propios módulos, themes y su base de datos.
Gracias a Gustavo (http://groups.drupal.org/node/23583) ya sabemos cómo hacerlo.
Ahora viene la necesidad de compartir usuarios entre estos distintos sitios o subdominios. Es decir que un usuario, una vez registrado en cualquier sitio, puede acceder a cualquier de los sitios de la instalación.
Imaginamos que tengamos los sitios example1.com y example2.com con una sola instalación de Drupal.
Encontré dos soluciones, una clásica y un poco documentada, las cuales pongo a su consideración y sobre todo apreciación.
1. La forma clásica: todos los sitios comparten la misma base de datos
Para example1.com tenemos en settings.php
// en /sites/example1.com/settings.php
$db_url = 'mysqli://user1:contrasena@localhost/base_de_datos';
$db_prefix = array(
'default' => 'example1_',
'users' => 'shared_',
'sessions' => 'shared_',
'role' => 'shared_',
'authmap' => 'shared_',
);
Y para example2.com en settings tenemos
// from /sites/example2.com/settings.php
$db_url = ' mysqli://user1:contrasena@localhost/base_de_datos';
$db_prefix = array(
'default' => 'example2_',
'users' => 'shared_',
'sessions' => 'shared_',
'role' => 'shared_',
'authmap' => 'shared_',
);
Como lo vemos, los dos sitios comparten en realidad la misma base de datos (base_de_datos). Gracias a la variable $db_prefix podemos compartir las tablas de usuarios con el prefijo shared_, y el resto de las tablas por defecto no serán compartidas porque tienen prefijos distintos para cada sitio (example1_ y example2_).
Así tendremos en una sola base de datos las tablas que los dos sitios comparten con el prefijo shared_ y las tablas que No comparten con los prefijos exanmple1_ y example2_
2. Cada sitio tiene su propio base de datos y comparten una base de datos de usuarios
Creamos tres bases de datos
base_de_datos_1 que contiene todas las tablas que example1.com no comparten (con el user user1 y contrasena1).
base_de_datos_2 que contiene todas las tablas que example2.com no comparten (con el user user2 y contrasena2).
base_de_datos_usuarios que contiene las tablas compartidas de los usuarios de example1.com y example2.com. Esta base de datos tiene dos usuarios user1 y user2.
Para example1.com tenemos en settings.php
// en /sites/example1.com/settings.php
$db_url = 'mysqli://user1:contrasena1@localhost/base_de_datos_1';
$db_prefix = array(
'default' => '',
'users' => 'base_de_datos_usuarios.shared_',
'sessions' => 'base_de_datos_usuarios.shared_',
'role' => 'base_de_datos_usuarios.shared_',
'authmap' => 'base_de_datos_usuarios.shared_',
);
Para example2.com tenemos en settings.php
// en /sites/example2.com/settings.php
$db_url = 'mysqli://user2:contrasena2@localhost/base_de_datos_2';
$db_prefix = array(
'default' => '',
'users' => 'base_de_datos_usuarios.shared_',
'sessions' => 'base_de_datos_usuarios.shared_',
'role' => 'base_de_datos_usuarios.shared_',
'authmap' => 'base_de_datos_usuarios.shared_',
);
Vemos entonces que toda la información de los users será guardada en la BD base_de_datos_usuarios y que el resto de la información será guardada en base_de_datos_1 para example1.com y en base_de_datos_2 para example2.com
Personalmente me gusta más la solución 2 por su claridad. Cada sitio tiene su propia BD y todos comparten los usuarios en una base de datos externa: base_de_datos_usuarios
Una vez más nos damos cuenta de la enorme flexibilidad de Drupal.
La pregunta es: cual de las dos soluciones tiene su preferencia?
Saludos
Comments
me tira error.
buenas. intente la opción numero 1 pero no consigo que funcione. tengo un sitio ya funcionando en drupal lo que quise intentar fue armar un segundo sitio como network.localhost. la carpeta esta bien puesta. pero al momento de instalar me tira error porque ya existe la tablas shared_ .
hay alguna solución?