Code Igniter: Site config
Octubre 18, 2007 @ 9:55
Alex SanchoRecientemente, construyendo una aplicación con este framework, me encontré con la necesidad de incluir una sección desde la que poder configurar parámetros de manera persistente, es decir, dentro de una base de datos.
En CodeIgniter tenemos la clase CI_Config, que se encarga de leer las preferencias desde un fichero y asignarlas dentro de variables en el objeto “config”, a las que podemos acceder con $this->config->item('variable');.
Aunque no es exactamente lo que necesitaba, esta clase ofrece los métodos necesarios para mantener una configuración, con lo que construir una nueva librería me pareció algo innecesario. Es en este punto donde se me ocurrió aprovechar lo que ya me ofrece el framework y adaptarlo a mis necesidades.
Básicamente solo he tenido que crear una librería con tres métodos que complementan los que ya se incluyen.
<?php if(!defined('BASEPATH')) exit('No direct script access allowed');
class Site_Config
{
private $CI;
public function __construct()
{
$this->CI =& get_instance();
$this->_table = 'settings';
if(!$this->read()) $this->install();
}
public function __destruct()
{
unset($this->CI);
}
public function save($cfg)
{
foreach($cfg as $item => $value) {
$this->CI->config->set_item($item, $value);
}
$config =& get_config();
$this->CI->db->where('id', '1');
$this->CI->db->update($this->_table, array('cfg' => addslashes(serialize($config))));
return ($this->CI->db->affected_rows() != 0) ? TRUE : FALSE;
}
private function read()
{
$this->CI->db->select('cfg')->limit(1);
$query = $this->CI->db->get($this->_table);
if($query->num_rows() > 0) {
$load = $query->row();
$cfg = unserialize(stripslashes($load->cfg));
foreach($cfg as $item => $value) $this->CI->config->set_item($item, $value);
return TRUE;
}
return FALSE;
}
private function install()
{
$config =& get_config();
$this->CI->db->insert($this->_table, array('id' =>1, 'cfg' => addslashes(serialize($config))));
}
}
?>
El funcionamiento de la librería es bastante evidente, tan solo tenemos que añadirla al autoload y todas las preferencias que tengamos en la base de datos estarán disponibles mediante $this->config->item().
Dentro del controlador, podemos utilizar cualquiera de los metodos habituales para validar y rellenar un formulario:
public function index()
{
$this->load->library('validation');
$rules['site_name'] = "trim|required";
...
$this->validation->set_rules($rules);
$fields['site_name'] = 'Nombre del sitio';
...
$this->validation->set_fields($fields);
if($this->validation->run()) {
...
$this->site_config->save($_POST));
...
}
}
Espero que os sirva de utilidad, cualquier pregunta en lo comentarios. Salu2
Comentarios (0) | | Digg It! | | ma.gnolia |

Articulos relacionados:Code Igniter debug helper
UF! Dell otra vez
Code Like a Pythonista: Idiomatic Python en español
Los top 20 de Alexa ¿dicen algo?
Otra más de Dell: Desktop a $16.000
Permalink
Via Alex Sancho
PHP