Foros del Web » Programando para Internet » PHP » CodeIgniter »

Aside en Codeigniter

Estas en el tema de Aside en Codeigniter en el foro de CodeIgniter en Foros del Web. Buenas, en mi web tengo una zona con información que proviene de la base de datos, y que es común a todas las páginas, la ...
  #1 (permalink)  
Antiguo 12/04/2012, 05:55
 
Fecha de Ingreso: diciembre-2008
Mensajes: 116
Antigüedad: 16 años
Puntos: 0
Aside en Codeigniter

Buenas, en mi web tengo una zona con información que proviene de la base de datos, y que es común a todas las páginas, la pregunta es ¿como hago para cargar el modelo y mostrar la información de esa zona, si no tiene controlador propio?

Gracias y saludos.
  #2 (permalink)  
Antiguo 12/04/2012, 06:36
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 4 meses
Puntos: 139
Respuesta: Aside en Codeigniter

En esos casos yo creo un asistente con todas esas funciones que no necesitan un controlador para poderla invocar en cualquier parte.
  #3 (permalink)  
Antiguo 12/04/2012, 08:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Aside en Codeigniter

No conozco codeigniter a fondo pero la idea del MVC es esa, que el Modelo no este atado al controlador, si no que cada Modelo se pueda invocar en cada parte del sistema y puedas hacer uso de las funciones del Modelo sin problemas.
  #4 (permalink)  
Antiguo 12/04/2012, 10:56
 
Fecha de Ingreso: diciembre-2008
Mensajes: 116
Antigüedad: 16 años
Puntos: 0
Respuesta: Aside en Codeigniter

Cita:
En esos casos yo creo un asistente con todas esas funciones que no necesitan un controlador para poderla invocar en cualquier parte.
¿A que te refieres con asistente? ¿a un librería?

Cita:
No conozco codeigniter a fondo pero la idea del MVC es esa, que el Modelo no este atado al controlador, si no que cada Modelo se pueda invocar en cada parte del sistema y puedas hacer uso de las funciones del Modelo sin problemas.
Si claro, esa es la idea, pero ¿donde lo cargo? ¿en que controlador? ¿en todos?

Yo tampoco soy experto en Codeigniter, y no se si existe algo específico para lo que pido, al fin y al cabo es muy normal tener una parte común en todas las páginas de una web.
  #5 (permalink)  
Antiguo 12/04/2012, 13:20
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 4 meses
Puntos: 139
Respuesta: Aside en Codeigniter

Los asistentes son los Help.

CI como normal de mantener un orden sugiere que en el archivo de vista solo se presente condigo HTML,JS,CSS... o sea esto no impide que puedas trabajar con un modelo directamente desde una vista pero no seria lo recomendado.
  #6 (permalink)  
Antiguo 13/04/2012, 04:48
 
Fecha de Ingreso: diciembre-2008
Mensajes: 116
Antigüedad: 16 años
Puntos: 0
Respuesta: Aside en Codeigniter

Tengo una solución a esto, aunque no se si es muy eficiente o si es correcto hacerlo como lo hago.

Me he creado una librería, que la auto cargo en autoload.php, con una función que trae datos de la BD. Luego desde la vista en cuestión, aside.php, llamo a la función, y muestro los datos como quiero. Funcionar funciona, pero no se si está bien, me surgen dudas de si es conveniente llamar a una función en una vista, si cada vez que cargo una página, es decir un controlador, estoy llamando de nuevo a la función y eso no es eficiente, etc. ¿Cómo lo veis?

Saludos.
  #7 (permalink)  
Antiguo 15/04/2012, 23:33
Avatar de ocesitaro  
Fecha de Ingreso: diciembre-2011
Ubicación: Carabayllo
Mensajes: 274
Antigüedad: 13 años
Puntos: 36
Respuesta: Aside en Codeigniter

Seria mejor que desde el controlador solo envie cada variable
$data['algo']=$this->modelo->funcion(parametro1,parametro2);
$data['registros']=$this->modelo->funcion2();
$this->load->view('vista',$data)

y en la vista

<?php echo $algo;
foreach ($registros as $row){
echo $row;
}
?>

la idea es que en la vista solo pongas resultados y una que otra condición, en la vista mayormente solo separas el código del diseño.

entonces si quieres cambiar el diseño te será mucho mas fácil.
  #8 (permalink)  
Antiguo 16/04/2012, 02:02
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 5 meses
Puntos: 165
Respuesta: Aside en Codeigniter

Yo creo que lo mejor sería que extendieras la clase controler a MY_Controler o CI_Controler y en este pongas lo que necesitas. Si no te queda la opción de colocar lo mismo en todos los controladores. ( Llamar al model, etc )

Un saludo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #9 (permalink)  
Antiguo 16/04/2012, 04:12
 
Fecha de Ingreso: diciembre-2008
Mensajes: 116
Antigüedad: 16 años
Puntos: 0
Respuesta: Aside en Codeigniter

Cita:
Iniciado por ocesitaro Ver Mensaje
Seria mejor que desde el controlador solo envie cada variable
$data['algo']=$this->modelo->funcion(parametro1,parametro2);
$data['registros']=$this->modelo->funcion2();
$this->load->view('vista',$data)

y en la vista

<?php echo $algo;
foreach ($registros as $row){
echo $row;
}
?>

la idea es que en la vista solo pongas resultados y una que otra condición, en la vista mayormente solo separas el código del diseño.

entonces si quieres cambiar el diseño te será mucho mas fácil.
El problema es que es un div lateral con información visible desde todas las páginas, por lo que no tiene controlador propio, y tendría que repetir el mismo código para todos los controladores, creo yo. ¿No hay alguna forma estandarizada para lo que pido? Es muy común tener div visibles desde todas las páginas.

Saludos.
  #10 (permalink)  
Antiguo 16/04/2012, 04:40
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 5 meses
Puntos: 165
Respuesta: Aside en Codeigniter

Te he comentado de crear tu propio controler, luego, el resto de controladores extenderán de este, por lo que sólo tendrás que hacerlo una vez,

Un saludo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #11 (permalink)  
Antiguo 16/04/2012, 04:45
 
Fecha de Ingreso: diciembre-2008
Mensajes: 116
Antigüedad: 16 años
Puntos: 0
Respuesta: Aside en Codeigniter

Cita:
Iniciado por miktrv Ver Mensaje
Te he comentado de crear tu propio controler, luego, el resto de controladores extenderán de este, por lo que sólo tendrás que hacerlo una vez,

Un saludo!
Gracias miktrv, esa parece ser la solución más eficaz, probaré a hacerlo así y ya os comento.

Muchas gracias.

Saludos.
  #12 (permalink)  
Antiguo 16/04/2012, 06:43
 
Fecha de Ingreso: diciembre-2008
Mensajes: 116
Antigüedad: 16 años
Puntos: 0
Respuesta: Aside en Codeigniter

Tengo ya creado mi MY_Controller.php, y lo he situado en application\core\, y luego he heredado todos mis controladores de MY_Controller, hasta aquí todo funciona perfecto. La duda ahora es ¿cómo envío los datos, que quiero tener visible desde todas las páginas, a la vista desde MY_Controller?.

Gracias y saludos.
  #13 (permalink)  
Antiguo 16/04/2012, 06:50
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 4 meses
Puntos: 139
Respuesta: Aside en Codeigniter

Bueno como ahora todos tus controladores heredan de MY_controller solo tienes que crear un metodo en tu MY_controller que te llame el metodo del modelo que contiene la informacion que deseas mostrar en tu vista .
  #14 (permalink)  
Antiguo 16/04/2012, 06:53
 
Fecha de Ingreso: diciembre-2008
Mensajes: 116
Antigüedad: 16 años
Puntos: 0
Respuesta: Aside en Codeigniter

Cita:
Iniciado por gjx2 Ver Mensaje
Bueno como ahora todos tus controladores heredan de MY_controller solo tienes que crear un metodo en tu MY_controller que te llame el metodo del modelo que contiene la informacion que deseas mostrar en tu vista seria algo como .


class MY_controller extends Controller
{


}
Sí, sí los he creado, pero ¿tengo ahora que llamar en todos los controladores a ese método? o ¿hay alguna forma de hacerlo automático y que en todos los controladores ya lleven ese información?

Saludos.
  #15 (permalink)  
Antiguo 16/04/2012, 06:56
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 4 meses
Puntos: 139
Respuesta: Aside en Codeigniter

No entiendo algo, ha que te refieres con que todos los controladores lleven esa información automáticamente ?
de echo ya todos heredan de MY_controller pero tienes que llamar el método que necesitas, automáticamente no lo vas a conseguir.
explícate un poco mejor a ver.
  #16 (permalink)  
Antiguo 16/04/2012, 07:03
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 5 meses
Puntos: 165
Respuesta: Aside en Codeigniter

Yo si entiendo lo que dices perfectamente:

Código PHP:
Ver original
  1. public $data_view;
  2.  
  3. public function __construct() {
  4. $this->data_view = array();
  5. $this->data_view['results'] = $this->my_model->get_results();
  6.  
  7. }
  8.  
  9. public function index() {
  10.  
  11. $this->load->view('results', $this->data_view);
  12.  
  13. }
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #17 (permalink)  
Antiguo 16/04/2012, 07:14
 
Fecha de Ingreso: diciembre-2008
Mensajes: 116
Antigüedad: 16 años
Puntos: 0
Respuesta: Aside en Codeigniter

Cita:
Iniciado por miktrv Ver Mensaje
Yo si entiendo lo que dices perfectamente:

Código PHP:
Ver original
  1. public $data_view;
  2.  
  3. public function __construct() {
  4. $this->data_view = array();
  5. $this->data_view['results'] = $this->my_model->get_results();
  6.  
  7. }
  8.  
  9. public function index() {
  10.  
  11. $this->load->view('results', $this->data_view);
  12.  
  13. }
A eso me refería, es más, acababa de hacerlo, en MY_Controller me he creado una variable local:
Código PHP:
Ver original
  1. protected $data;
Y en el constructor del MY_Controller he puesto:
Código PHP:
Ver original
  1. parent::__construct();
  2. $this->data['result'] = $this->funcion_de_MY_Controller('param1');
Ya luego, en el controlador de la página, Home.php, llamo a la vista así
Código PHP:
Ver original
  1. $this->load->view('includes/plantilla',$this->data);
:

Aún tengo varias dudas, quizás no tan importantes, como por ejemplo:
1.¿Cuando declaro una variable local como debo declararla, protected, public, ...?
2. Suelo poner simplemente function cuando declaro una funcion, ¿en que casos debo poner public function, o private function, etc?

Y ya por último cualquier consejo es bien recibido.

Muchas gracias por todo a todos.
  #18 (permalink)  
Antiguo 16/04/2012, 09:45
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 5 meses
Puntos: 165
Respuesta: Aside en Codeigniter

Bueno en primer lugar porque haces funcion_de_my_controler? no deberías de hacerlo con el modelo¿?

una variable local debes de declararla como tu sistema lo requiera. No hay una respuesta global para todos los casos.

Revisa bien que quiere decir cada una de ellas. Por defecto son public, y no hace falta que lo pongas en tus métodos si no quieres, pero yo lo veo algo bueno.

Un ejemplo de método private podría ser un callback de validación.

Un saludo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #19 (permalink)  
Antiguo 16/04/2012, 12:23
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años, 1 mes
Puntos: 890
Respuesta: Aside en Codeigniter

Podrias usar HMVC y hacer tu app modular.
__________________
Drupal Argentina
  #20 (permalink)  
Antiguo 18/04/2012, 09:42
 
Fecha de Ingreso: diciembre-2008
Mensajes: 116
Antigüedad: 16 años
Puntos: 0
Respuesta: Aside en Codeigniter

Cita:
Iniciado por miktrv Ver Mensaje
Bueno en primer lugar porque haces funcion_de_my_controler? no deberías de hacerlo con el modelo¿?

una variable local debes de declararla como tu sistema lo requiera. No hay una respuesta global para todos los casos.

Revisa bien que quiere decir cada una de ellas. Por defecto son public, y no hace falta que lo pongas en tus métodos si no quieres, pero yo lo veo algo bueno.

Un ejemplo de método private podría ser un callback de validación.

Un saludo!
Buenas miktrv, te pongo como lo tengo, para luego plantearte algunas dudas que aún me surgen, jeje.

1.Cargo automaticamente el modelo que necesito para traer los datos de la BD que voy a poner en mi aside.php (vista)

2.Todos mis controladores heredan de MY_Controller.

3.En MY_Controller.php, que está en application/core, tengo esto:
Código PHP:
Ver original
  1. <?php if (!defined('BASEPATH')) exit('No permitir el acceso directo al script');
  2.  
  3. class MY_Controller extends CI_Controller {
  4.  
  5.     protected $data;
  6.  
  7.     function __construct()
  8.     {
  9.         parent::__construct();
  10.        
  11.         $this->data['param1'] = $this->(modelo_autocargado)>(funcion)('parametro');
  12.     }
  13. }

5.En Aside.php solo tengo que hacerle un echo a $param1.


De esta forma sale perfectamente, en mi aside se ve la informacion que quiero, ya luego le doy estilo con css. Algunas dudas:
Al cargarlo en todos los controladores, y llamar siempre a lo mismo en la bd, ¿no estoy haciendo una aplicación pesada de cargar o redundante?¿No es posible traer esa información 1 sola vez?¿No sería posible que dentro del mismo modelo, por defecto al cargarlo, devuelva esa información? Así me ahorraría el MY_Controller.

Estas son las dudas a día de hoy, surgirán más, jejej.

Saludos y muchas gracias.
  #21 (permalink)  
Antiguo 18/04/2012, 10:06
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 5 meses
Puntos: 165
Respuesta: Aside en Codeigniter

Hola buenas de nuevo.

Piensa una cosa. En MVC es el controlador quien le pasa los datos a la vista, y los datos, los obtiene de un modelo. Por lo tanto, tu aplicación parece estar bien planteada. Donde esta el problema? realmente no es ningún problema si en todos tus controladores necesitas esta información. Si no la necesitas, puedes extender del controlador original, o puedes hacer que el constructor de tu nuevo controlador, admita un parametro opcional para cargar o no ciertos contenidos. Por ejemplo.

Código PHP:
Ver original
  1. public function __construct($load_vehicles = TRUE) {
  2.  
  3. if($load_vehicles) {
  4.  
  5. //cargo
  6.  
  7. $this->data['vehicles'] = $this->vehicles_model->get_all();
  8.  
  9. }
  10.  
  11. }

No se si entiendes la idea, puedes hacer mucho más complejo el tema.

Luego en tus controladores extendidos, tendrías que hacer dentro de su constructor

parent::__construct(FALSE)

si no quieres cargar de entrada los vehiculos.

Un saludo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #22 (permalink)  
Antiguo 18/04/2012, 10:32
 
Fecha de Ingreso: diciembre-2008
Mensajes: 116
Antigüedad: 16 años
Puntos: 0
Respuesta: Aside en Codeigniter

Perfecto, gracias por responder, entiendo entonces que mi aplicación está bien planteada, y que no necesito ese parámetro opcional, ya que necesito esa información en todas las páginas, ya que es una información estática.

Saludos y gracias por todo.
  #23 (permalink)  
Antiguo 28/06/2012, 17:59
 
Fecha de Ingreso: julio-2008
Mensajes: 543
Antigüedad: 16 años, 5 meses
Puntos: 56
Respuesta: Aside en Codeigniter

Hola buenas noches.
Espero me perdoneis que reflote un post con unos meses de antiguedad, es que estoy precisametne atascada en un tema parecido y hay algo que no estoy muy segura.

Cuando deciis que "crear tu propio controler, luego, el resto de controladores extenderán de este, por lo que sólo tendrás que hacerlo una vez" es que una vez hecho el controller con las funciones que necesitamos para todo el sitio y que llamamos My_controller (¿se tiene que llamar asi por narices?) y lo situamos en core en los controllers que ya teniamos... ¿cambiamos lo de

Código PHP:
Ver original
  1. class Welcome extends Controller {

por

Código PHP:
Ver original
  1. class Welcome extends My_Controller {


???

¿y ya está? ¿llamo a la variable desde mi vista de aside y funcionará todo ok?
__________________
Un saludo! :-)
Quiero ser el primero
  #24 (permalink)  
Antiguo 28/06/2012, 19:00
 
Fecha de Ingreso: julio-2008
Mensajes: 543
Antigüedad: 16 años, 5 meses
Puntos: 56
De acuerdo Respuesta: Aside en Codeigniter

vale, me respondo a mi misma

el codigo de arriba a mi me daba error de sintaxis (que si no puedo poner ahi una string, que si no puedo poner ahi una class... lo tipico) imagino que sera cosa de versiones

al final me ha servido asi:

Código PHP:
Ver original
  1. class MY_Controller extends Controller {
  2.     protected $data;    
  3.       function MY_Controller(){
  4.        parent::Controller();
  5.     $data['mi_variable_que_quiero_usar_en_el_aside'] = el valor que sea que voy a mostrar;

y esto colocado en un archivo llamado MY_controller.php en system/el nombre de mi aplicacion/libraries

y luego en los controllers cambio lo de blabla extends Controller por blabla extends MY_Controller y parent::Controller(); por parent::MY_Controller();

funciona perfecto :)

Muchas gracias!
__________________
Un saludo! :-)
Quiero ser el primero

Etiquetas: modelo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:01.