Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

MVC, pagina con modulos estilo Joomla

Estas en el tema de MVC, pagina con modulos estilo Joomla en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Estos dias he estado estudiando como funciona joomla internamente, y me han surgido algunas dudas. No uso framework. Mi duda viene desde que me puse ...
  #1 (permalink)  
Antiguo 12/01/2011, 15:06
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 9 años, 6 meses
Puntos: 40
MVC, pagina con modulos estilo Joomla

Estos dias he estado estudiando como funciona joomla internamente, y me han surgido algunas dudas.

No uso framework.

Mi duda viene desde que me puse a estudiar como implementar un layout bien implementado, ya se mas o menos como, imaginemos que ya tengo mi layout, con la estructura de mi web.

Mi problema viene aqui, en mi web imaginaria, hay dos sitios donde hay contenido dinamico, en la parte central de la pagina hay una seccion de noticias que se recojen de la base de datos, por otro lado, esta el menu principal, donde las secciones tambien son recojidas de la base de datos, como se resolveria esto? el layout deberia llamar a el controlador de las noticias y el del menu para que ellos a su misma vez pidiesen al modelo los datos y se lo pasasen al layout?

Ultimante me estoy liando con esto de implementar layouts en la parte de la vista :S
  #2 (permalink)  
Antiguo 13/01/2011, 07:24
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 14 años, 11 meses
Puntos: 43
Busqueda Respuesta: MVC, pagina con modulos estilo Joomla

hola,
existen varias formas, las extremistas y las menos extremistas, las mas extremistas te diran que crees una libreria que haga las consultas a la db y en el controlador la invoques y se la pases a tu layout:
Código PHP:
Ver original
  1. //archivo menu.php
  2. class menu {
  3.   public function crearMenu(){
  4.     //codigo que genera el menú
  5.  }
  6. }
  7.  
  8. //en tu controlador:
  9. include_once('menu.php');
  10. $menu = new menu();
  11. $menu->crearMenu();


otros te dirán que en todos los controladores tienes que crear el código para el menu, es decir un método privado que llame al modelo que te devuelve el menu, y llames a este método privado en todos los métodos públicos que pasen datos al layout algo asi:
Código PHP:
Ver original
  1. public function index(){
  2.   $this->menu();
  3. }
  4.  
  5. private function menu(){
  6.   $menu = new MenuModelo();
  7.   return $menu->armarmenu();
  8. }

y otros diran que lo mejor es hacer un helpers (al estilo cake o CI) que arme el menu.

Y por último, otros te diran que uses un sistema de plantilla que permita la carga de bloques dinamicos.

No sé si con esto te aclaré exactamente tu duda, pero básicamente existen x cantidad de forma de solucionarlo.
  #3 (permalink)  
Antiguo 13/01/2011, 15:20
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 9 años, 6 meses
Puntos: 40
Respuesta: MVC, pagina con modulos estilo Joomla

La opcion de crear el codigo del menu en todos los controladores, me parece algo contradictorio desde el punto de vista OOP, donde se supone que una de las ventajas es que el codigo es reutilizable y te permite no repetir el codigo en mas de un archivo.

La opcion de crear una clase Menu, no la entiendo del todo bien, no se si eso seria parte del controlador, y si habria que incluirlo en el controlador.

He estado estudiando los view helpers de Zend, y creo que es la opcion mas logica a mi problema.

Es que estoy intentando crear un Framework para mi, bastante completo, y me quede atascado en la parte de implementar una plantilla.

Teneis alguna sugerencia respecto a usar "view helpers"?
  #4 (permalink)  
Antiguo 13/01/2011, 16:38
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 14 años
Puntos: 890
Respuesta: MVC, pagina con modulos estilo Joomla

Hay varias maneras de poder implementer un menu o un widget:

Tal como lo dice Destor(que obviamente tendrias que repetirlo en cada controller y eso no es bueno), la otra crear un sistema modular: menu, comentarios, user.
Y llamar desde tu template por ejemplo con file_get_contents(aunque tampoco es buena idea) - recuerda que toda la vista al final se unifica y puede recibir cualquier variable desde el controller asi por ejemplo tienes tu modulo menu

menu
---controller
---models
---views

Se lo envias desde el controller o lo puedes llamar desde tu vista un ejemplo de como lo implementa Codeigniter y el sistema HMVC es llamadolo de esta manera

module::run('menu', $foo, $var....)

Tu esto lo puedes llamar de cualquier parte de tu vista o controller, las variables que le pasas la toma el controlador.

Ejemplo :

module::run('menu', $idioma, $rol);

Obviamente tu modulo menu tiene que estar preparado para recibir/trabajar con esas variables e imprimir el resultado.

Partiendo de esa idea puedes crear tu sistema. Con mas orden y mas facil de mantener. Y tus modulos reutilizables.

Otro ejemplo seria con los comentarios

module comentarios

comentarios
--views
--controllers
--models

module::run('comentarios', $post_id, $rol, $visible);


Un practico ejemplo usando este mismo metodo seria:

Por ejemplo el sistema de comentarios(Es solo de ejemplo):

Código PHP:
Ver original
  1. class PostsController extends controller{
  2.  
  3. function mostrartodos(){
  4.  
  5. /* muestras todos los post */
  6.  
  7. }
  8.  
  9. /*mostrar un post*/
  10. function mostrarpost($post_id){
  11.  
  12. ///////  dependiendo de como lo hagas puedes agregarlo al constructor para evitar ponerlo en todos los actions///////
  13. $vars['post_id'] = $post_id;
  14. $vars['role'] = "1;"
  15. $vars['visible'] = TRUE;
  16. //////
  17.  
  18. $vars['posts'] = (array de los post obtenidos del model);
  19. $this->load->view('layout_principal', $vars);
  20.  
  21.  
  22. }
  23.  
  24. }


En tu vista:

layout_principal.phtml

<html>
<single post>
........
</single post>

<comentarios>
<?php module::run('comentarios', $post_id, $role, $visible); ?>
<comentarios>

</html>

Se que es bastante abstracto pero alli entra la habilidad del quien lo vea/haga/entienda

TODO ESTE EJEMPLO ESTA BASADO EN LA ESTRUCTURA MVC DE CODEIGNITER.
__________________
Drupal Argentina

Última edición por NUCKLEAR; 13/01/2011 a las 16:45
  #5 (permalink)  
Antiguo 13/01/2011, 16:41
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 9 años, 6 meses
Puntos: 40
Respuesta: MVC, pagina con modulos estilo Joomla

Ese ejemplo que has puesto Nucklear, es parecido a los View Helpers solo que usando la clase module para iniciar los metodos correspondientes, cierto?
  #6 (permalink)  
Antiguo 13/01/2011, 17:59
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 14 años
Puntos: 890
Respuesta: MVC, pagina con modulos estilo Joomla

No se a que view helpers te refieres, la idea que propuse es una de las muchas que se puede usar, la ventaja de hacerlo modular es la reutilizaciión del modulo y todo depende de como lo quieras implementar.

Saludos.
__________________
Drupal Argentina
  #7 (permalink)  
Antiguo 14/01/2011, 08:15
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 14 años, 11 meses
Puntos: 43
Respuesta: MVC, pagina con modulos estilo Joomla

Cita:
Iniciado por Heli0s Ver Mensaje
La opcion de crear el codigo del menu en todos los controladores, me parece algo contradictorio desde el punto de vista OOP, donde se supone que una de las ventajas es que el codigo es reutilizable y te permite no repetir el codigo en mas de un archivo.
Como te dije tenes miles de forma de hacerlo, siguiendo POO, algún patrón o la mejor forma que te convenga en tu proyecto.

Cita:
Iniciado por Heli0s Ver Mensaje
La opcion de crear una clase Menu, no la entiendo del todo bien, no se si eso seria parte del controlador, y si habria que incluirlo en el controlador.
No sería parte de nada, en CI las librerias son clases que no pertenecen al Core del sistema y que pueden ser propias tuyas o de terceros, por ejemplo un calendario, una nueva forma de paginar, etc, y que las instancias ($this->library('calendario')) en el controlador que la necesites.

Cita:
Iniciado por Heli0s Ver Mensaje
He estado estudiando los view helpers de Zend, y creo que es la opcion mas logica a mi problema.
Esa es otra forma de hacer las cosas investigar varios frameworks como se manejan y tomar sus ideas.

Cita:
Iniciado por Heli0s Ver Mensaje
Es que estoy intentando crear un Framework para mi, bastante completo, y me quede atascado en la parte de implementar una plantilla.
Yo también estoy haciendo lo mismo que vos, voy por la version 0.2.1 de mi frame, y el tema de las vistas por el momento las soluciono facilmente, la idea es poder usar un sistema de plantilla mas adelante.

Etiquetas: estilo, joomla, modulos, mvc
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 23:46.