RSS .92| RSS 2.0| ATOM 0.3
  • Inicio
  • Correo Web
  •  

    Code Igniter: Site config

    Octubre 18, 2007 @ 9:55
    Alex Sancho

    Recientemente, 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 |




    del.icio.us:Code Igniter: Site config digg:Code Igniter: Site config spurl:Code Igniter: Site config wists:Code Igniter: Site config simpy:Code Igniter: Site config newsvine:Code Igniter: Site config blinklist:Code Igniter: Site config furl:Code Igniter: Site config reddit:Code Igniter: Site config fark:Code Igniter: Site config blogmarks:Code Igniter: Site config Y!:Code Igniter: Site config smarking:Code Igniter: Site config meneame:Code Igniter: Site config

    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

    Comentarios desactivados.