Conectar multiples bases de datos en CodeIgniter

En el archivo database.php

tenemos la siguiente información por defecto

$active_group = "default";
$active_record = TRUE;
$db['default']['hostname'] = "xxxxx";
$db['default']['username'] = "xxxxx";
$db['default']['password'] = "xxxxx";
$db['default']['database'] = "xxxxx";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

Para añadir otra conexión de bases de datos tendremos que añadir al principio de este código la nueva conexión y quedaría algo así

/* Base de datos XXXX */
$active_group = "my_db";
$active_record = TRUE;
$db['my_db']['hostname'] = "xxxxx";
$db['my_db']['username'] = "xxxxx";
$db['my_db']['password'] = "xxxxx";
$db['my_db']['database'] = "xxxxx";
$db['my_db']['dbdriver'] = "mysql";
$db['my_db']['dbprefix'] = "";
$db['my_db']['pconnect'] = TRUE;
$db['my_db']['db_debug'] = TRUE;
$db['my_db']['cache_on'] = FALSE;
$db['my_db']['cachedir'] = "";
$db['my_db']['char_set'] = "utf8";
$db['my_db']['dbcollat'] = "utf8_general_ci";
/* Default database */
$active_group = "default";
$active_record = TRUE;
$db['default']['hostname'] = "xxxxx";
$db['default']['username'] = "xxxxx";
$db['default']['password'] = "xxxxx";
$db['default']['database'] = "xxxxx";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

 

Una vez guardado este archivo, tendremos que cargar la base de datos que no es por defecto en el controlador de la siguiente forma:

$this->db_my_db = $this->load->database('my_db', TRUE);

 

Y en el modelo de la siguiente forma

$insert = $this->db_my_db->insert('xxx', $xxx);

Internacionalización i18n en CodeIgniter

Qué es lo que vamos a obtener en este tutorial?

Vamos a poder solventar tener  tu aplicación web o simplemente web en diferentes idiomas, con el siguiente formato.

  • dominio.com/es/
  • dominio.com/en/
  • dominio.com/cz/

Usaremos la clase Language de CodeIgniter y las librería ci_i18n_library de Maestric

Una vez que te descargues la librería ci_i18n_library, tienes que poner los archivos MY_Language.php y MY_Config.php en system/application/libraries

Configuración

Tienes que usar pretty URL, sin index.php. Si usas Apache, lo normal es que uses mod_rewrite en .htaccess

Aquí dejo un archivo .htaccess modificado para la ocasión

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} (index\.php|webroot/|images/|css/|js/|robots\.txt|favicon\.ico)
RewriteRule ^(images|css|files|js)/(.*)$ webroot/$1/$2 [L]
RewriteRule ^(favicon\.ico)$ webroot/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

En el archivo config.php tenemos que modificar:

$config['base_url'] que debe corresponder a tu configuración

$config['index_page'] = ”

 

En config/routes.php añadimos

// URI like '/en/test' -> use controller 'test'
$route['^es/(.+)$'] = "$1";
$route['^en/(.+)$'] = "$1";

// '/en' and '/es' URIs -> use default controller
$route['^es$'] = $route['default_controller'];
$route['^en$'] = $route['default_controller'];

 

Cómo usarlo?

Archivos de idioma

system/application/language/english/test_lang.php

<?php 
$lang['test_hello'] = "hello";

system/application/language/spanish/test_lang.php

<?php 
$lang['test_hello'] = "hola";

 

Controlador

system/application/controllers/test.php

<?php
class Test extends Controller {

	function index()
	{
		// Esto se podría poner en autoload
		$this->load->helper('language');
		$this->load->helper('url');

		// archivo de idioma
		$this->lang->load('test');

		$this->load->view('test');
	}
}

 

Vista

system/application/views/test.php

<p><?php echo lang('test_hello') ?></p>

 

Notas

Para obtener el idioma actual

$this->lang->lang();

 

Para cambiar de idioma

anchor($this->lang->switch_uri('en'),'English');

Página por defecto en CodeIgniter

Para asignar una página por defecto en tu instalación de CodeIgniter, es tan sencillo como ir a la carpeta config que se encuentra dentro de application y editar el archivo routes.php

En la línea 41 (si el archivo no ha sido modificado previamente) encontraréis $route['default_controller'] , donde tendréis que poner el controlador que queréis para que salga por defecto en vuestro dominio $route['default_controller'] = “controlador”

Este tutorial a sido muy básico, pero por algo se empieza.