CodeIgniter – Llamar un modelo o librería desde una vista
Veamos cómo llamar en CodeIgniter 3 un modelo o librería desde una vista.
Hay ocasiones que para ahorrar código, necesitaremos llamar a nuestros modelos o librerías directamente desde una vista sin pasar por los controladores.
Uso de modelo desde vista
Supongamos, que una de nuestras vistas es la cabecera de nuestra web. Ésta, muestra siempre la misma información.
En nuestra vista, llamémosla cabecera_view.php, insertaremos el siguiente código
$ci = &get_instance(); $ci->load->model("menu_model");
Con este código dentro de nuestra vista, lo que hacemos es llamar al model «menu_model».
Ahora ya podemos utilizarlo para mostrar la información:
$menuprincipal= $ci->menu_model->menuPrincipal();
Ahora, en la variable ‘$menuprincipal’ tendremos la array devuelta desde la función ‘menuPrincipal()’ del modelo ‘menu_model’.
Así pues, tenemos una vista que muestra nuestra cabera, y que llama a funciones de un modelo concreto.
Uso de librería desde vista
Supongamos que tenemos definida una librería propia en CodeIgniter y queremos llamarla desde una vista. Lo haremos de la siguiente manera:
Veamos el fichero donde definimos nuestra pequeña librería:
/application/libraries/Date_library.php
Como podéis ver sólo contiene una función que traduce una fecha en formato 2020-12-01 a un formato español:
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Date_library {
function fechaCastellano ($fecha) {
$dias_ES = array("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo");
$dias_EN = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
$meses_ES = array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
$meses_EN = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
// $fecha = substr($fecha, 0, 10);
$numeroDia = date('d', strtotime($fecha));
$dia = date('l', strtotime($fecha));
$mes = date('F', strtotime($fecha));
$ano = date('Y', strtotime($fecha));
$nombredia = str_replace($dias_EN, $dias_ES, $dia);
$nombreMes = str_replace($meses_EN, $meses_ES, $mes);
return $nombredia.", ".$numeroDia." ".$nombreMes." ".$ano;
}
}
?>
Pues ahora, imaginad que queréis utilizar esta librería CodeIgniter directamente en la vista. Lo haremos de la siguiente manera:
<?php
// Librería que trata la fecha en español
$CI =& get_instance();
$CI->load->library('date_library');
?>
[...]
<?php
<td><?php echo $CI->date_library->fechaCastellano($usuario["fecha"]); ?></td>
?>
Si os fijáis, creo instancia de la librería y luego la utilizo llamando a la función fechaCastellano(). En $usuario[«fecha»] tendríamos la fecha almacenada en una base de datos MySql con el formato 1974-07-08.
Recordad que no es el método ideal de utilizar la librerías. Lo ideal es trabajar en los controladores debido a que así se sigue la lógica MVC. Si se empieza a tocar vistas, perdemos el control de la estructura y complicamos el mantenimiento del código.
Espero que os haya sido de utilidad el artículo para sber cómo cómo llamar en CodeIgniter 3 un modelo o librería desde una vista.
HOla muy bueno tu post, tengo una duda, aplique lo que indicas pero al parecer no me funciona
$ci = &get_instance();
$ci->load->model('Puentes');
$resultados=$ci->Puentes->get_evaluaciones_for_report($item->ID_PARTE,$id_puente);
foreach($resultados->result() as $item1){
echo $resultados->NOMBRE;
echo $resultados->VALOR;
}
y me da este error:» Fatal error: Call to a member function result() on a non-object in C:\xampp\htdocs\sinp\application\views\reportes\evaluacion…»
Hola Joel, sin ver todo el árbol de ficheros que tienes, es difícil averiguar por dónde puede ir la cosa. Según el código que indicas, deberías tener el modelo (fichero .php dentro de la carpeta ‘application/models’) llamado Puentes.php. Si lo que tienes es ‘/Application/models/Puentes_model.php’, debes hacer la llamada $ci->load->model(‘Puentes_model’);
A parte, revisa que la función a la que llamas es correcta, es accesible y que los parámetros que indicas son correctos.
tengo el siguiente problema quiero enviar el resultado de dos consultas en una sola vista:
function MostrarEESS(){
$data1[‘eess’]=$this->mostrar_model->Mostrar_EESS();
$data2[‘usuarios’]=$this->mostrar_model->Mostrar_Usuarios();
$this->load->view(‘front_end/RegistroUsuario’,$data1,$data2);
}
function MostrarEESS(){
$data[‘eess’]=$this->mostrar_model->Mostrar_EESS();
$data[‘usuarios’]=$this->mostrar_model->Mostrar_Usuarios();
$this->load->view(‘front_end/RegistroUsuario’,$data);
}
Muchas gracias me funcionó a la perfeccion el codigo.