2011-01-04 19 views
6

Hasta ahora he disfrutado usando CodeIgniter para crear algunas aplicaciones web simples (realmente solo estoy aprendiendo el framework), pero no puedo encontrar una forma fácil de crear un bloque/módulo.Creando Bloque/Módulos en Code Igniter

Me gustaría tener un bloque de "Imágenes recientes" que pueda colocar en cualquier página del sitio sin duplicar la consulta en el controlador de cada página y pasarla a la plantilla con $ vars.

2 preguntas:

  1. estoy usando parciales en las vistas ya, pero ¿Cómo se escribe un parcial de que tira de un controlador que no sea el especificado por el url.
  2. ¿Cómo puedo crear limpiamente un controlador que extrae los datos de que bloquean y no crea una página
    para ello?

Parece que debería ser lo suficientemente simple, simplemente no estoy teniendo suerte para encontrar la solución adecuada por sí mismo. Gracias por adelantado.

Respuesta

7

Bien, aquí está mi opinión sobre "widgets", "módulos", "vistas parciales" o como quiera que los llames. De cualquier manera nos referimos a elementos reutilizables para páginas.

Hay muchas maneras diferentes de hacer esto, así que puede que no sea para ti, ¡de nuevo podría ser justo lo que estás buscando!

En primer lugar, hago como los widgets de puntos de vista, digamos que los caminos serían como: puntos de vista/widgets/myview.php

tomo la decisión de lo Widgets tengo la intención de utilizar en mi controlador. Mi método es poner las rutas de acceso a los puntos de vista que quiero en una matriz como:

$data['widgets'] = array('widgets/myview', 'widgets/myview2'); 

Luego, cuando me carga mi vista principal (todavía en mi controlador) hago esto:

$this->load->view('main_view', $data); 

Ahora el widgets array se pasa a la vista principal.

Luego, en mi punto de vista principal cuando llego al lugar donde van los reproductores, yo bucle a través de mi serie como esta:

foreach ($widgets as $widget) 
{ 
    $this->load->view($widget); 
} 

Este bucle se ejecuta en mi vista principal. Convenientemente, todos los datos que pasó a la vista principal estarán disponibles en las vistas anidadas que cargue.

He hecho muchos widgets en Codeigniter de esta manera y es el método que uso en mi CMS también.

+0

ahhh, creo que esto es más explícitamente lo que estaba buscando, pero Thrope, gracias por su ayuda también. Estoy aprendiendo mucho sobre CI. – Rapture

6

¿qué quieres decir con parciales? No hay vistas parciales nativas en CodeIgniter. Aunque, puede $this->load->view() en las vistas.

Si usted está hablando de variables del controlador que están disponibles para todos los puntos de vista que usted carga, que debe hacer:

$data['info'] = 'value'; 
$this->load->vars($data); 

$info sería entonces disponible para todos los puntos de vista que cargue.

Actualización:

Es necesario hacer eso en su constructor:

class Page extends Controller { 
    function Page() 
    { 
     $this->load->model('page'); 
     $data['images'] = $this->page->get_images(); 
     $this->load->vars($data); 
     // images will now be available to all views 
    } 

} 

Actualización 2:

Debo admitir que no he utilizado plantillas, pero esto funcionaría para todas las páginas creado por tu controlador.

+0

Lo siento, supongo que me refiero al uso de plantillas. Como dijiste, usando $ this-> load-> view ('user_controls'). No quiero que los datos sean necesariamente globales y cargados en cada vista, pero preferiría que en las páginas donde tengo "imágenes recientes" llame a un controlador que llene esos datos sin tener que ejecutar esa consulta desde el controlador de cada página que tiene el bloque de imágenes recientes? Tal vez no estoy teniendo sentido? – Rapture

+0

rapto, mira mi actualización. –

+0

ahh, gracias. Parece que necesito familiarizarme más con los modelos. Actualmente solo tengo mis 2 modelos de base de datos de doctrina y he estado usando la generación de páginas integrada usando controllerName/functionName, por lo que no tengo un modelo de página. Parece que podría necesitar aprender a crear uno – Rapture

3

La buena noticia es que CodeIgniter definitivamente se está moviendo en esta dirección. Para empezar, eche un vistazo a las extensiones modulares de wiredeignz. Se puede encontrar aquí: https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/overview con buena documentación para comenzar. Esto podría ser perfecto para usted, porque puede ejecutar un módulo (es decir, llamar a un controlador/método de un módulo y devuelve una vista parcial) e insertarlo en una plantilla o vista global o lo que sea. Además, consulte CI 2.0 - https://bitbucket.org/ellislab/codeigniter/overview Es bastante diferente a las versiones anteriores de codeigniter y tiene muchas características nuevas que son muy emocionantes. Aunque en beta es muy, muy estable. HMVC está escrito para trabajar con CI 2.0.

Además, observe el código de otros proyectos de CI que funcionan de esta manera. Recomendaría pyroCMS por Phil Sturgeon. Él realmente está liderando el camino y ha escrito muchos artículos y publicaciones interesantes sobre modularización y CI 2.0. www.philsturgeon.co.uk

Esta manera de trabajar es realmente útil para mantener independientes los bits de un sitio, solo se usa cuando es necesario.

Para tratar de ayudarle un poco más directamente ...

No se olvide que usted puede búfer de salida utilizando el tercer parámetro opcional. Mira la guía del usuario si no estás seguro.

$partial = $this->load->view('someView', $data, true);