2011-06-24 12 views
5

Así que estoy haciendo un CMS, un script de galería a través de PHP orientado a objetos. De todos modos, el problema es que ahora tengo el diseño básico de los objetos y tal es el punto donde necesito comenzar a armarlos, estoy perplejo de cómo hacer esto.¿Cómo se estructura un CMS?

Lo que tengo es esencialmente una clase de Navegación, Datos, Galería y Módulo. Módulo significa páginas, categorías, etcétera. El problema es que Gallery genera las imágenes, el módulo proporciona los datos para las páginas, la navegación crea la navegación (lo adivinas). Te dan la imagen.

En la página de índice, que terminan haciendo esencialmente esto (esto va a cambiar, pero es ilustrativo de la forma en que estaba empezando a configurarlo):

$navigation = new Navigation(); 
$navigation->top(); 

$page = new Module(); 
$page->basicPage($_GET['m']); 

El basicPage() hace un par de cosas , pero principalmente este es el problema:

$gallery = new Gallery(); 
$gallery->setGallery($id); 
$gallery->thumbGallery(); 

Así sucesivamente.

El problema surge porque si llamo a basicPage(), el diseñador o quien tenga muy poco control sobre las opciones. Como viste, es thumbGallery, y eso no permite imágenes completas, y ni siquiera te permite establecer el tamaño de las miniaturas (lo cual les dejo hacer, solo si pueden llamar a esa función ellos mismos) .

Así que pensé en algunas soluciones al problema. No tengo estas páginas básicas, pero los diseñadores construyen plantillas muy parecidas a WordPress. No me gusta esta solución, porque complica el proceso de diseño, aunque exhaustivo. No quiero hacerlo para que todo esté controlado, y es de una manera. Por supuesto, puede "mostrar: ninguno" a elementos como el diseñador y algunos otros trucos, pero quiero que tengan la capacidad de hacer muchas cosas, sin la manera complicada en que Wordpress lo hace.

Mi pregunta es ¿cómo puedo encontrar el equilibrio entre simple y flexibilidad?

Cualquier ayuda, incluso las ideas son apreciadas. Gracias.

EDIT: Olvidé mencionar. El problema es simplemente tener el índice con todos estos datos; de lo contrario, tendré que hacer mucho si/sino y tal, y realmente no quería hacer de esto un programa de procedimientos, solo uno que esencialmente puede explotar cosas caídas y estamos bien. Ver, el módulo representa galería y página. La mayoría de las páginas no tendrán imágenes adjuntas, y las categorías tendrán imágenes, pero no siempre texto. Causará un error si llamo a thumbGallery y es solo una página informativa, y si llamo a una página informativa y es una categoría, no mostrará las imágenes (para evitar el error). Pude, y comencé a construirlo juntos en lo que se llama página básica, pero el problema como noté antes es que restringe cuanta libertad tiene el diseñador sin tener que meterse con php, y la mayoría de los diseñadores son bastante tontos cuando se trata a php, por desgracia. Espectivamente OOP (sin ofender. Yo también soy diseñador, pero también me sucede el programa).

+0

Eche un vistazo al patrón de diseño [Controlador frontal] (http://martinfowler.com/eaaCatalog/frontController.html). – Smurf64

Respuesta

1

Sin ver el resto de su código es difícil saber cuál es la mejor solución teniendo en cuenta lo que ya tiene. He desarrollado mis propios marcos de aplicaciones CMS personalizados desde cero durante los últimos 9 años, y me gustaría darte algunos consejos.

Supongo que está almacenando todo el contenido de CMS en una base de datos. Almacenar la configuración para la configuración de la galería en la base de datos podría ser una posible solución. En teoría, debería tener diferentes puntos de vista (siguiendo el patrón MVC) para mostrar la galería de diferentes maneras. Una vista de listado para mostrar varias imágenes en miniatura, una para mostrar una sola imagen, más una vista para mostrar categorías.

Por lo tanto, en la base de datos puede definir que la página X muestre la vista en miniatura en lugar de una vista de categoría.

No estoy seguro si esa es una solución al problema que tiene, pero ese es un ejemplo muy simplista de cómo lo he hecho en mi CMS en el pasado.

+0

Bueno, sí, ya hago algo así (página, categoría). Pero para algo como una vista de lista de categorías, eso es algo que no necesito almacenar en la base de datos, sino que puedo hacerlo en PHP. Esto se debe a que los datos para las categorías ya están almacenados en la tabla de módulos, y solo necesitan llamarse y mostrarse correctamente (formateados a través de PHP). El problema que tengo específicamente es sobre todo cuánto puede cambiar el diseñador. Por ejemplo, un diseñador puede querer la página creada para ser: Envoltura {Cabecera, Nav, contenido, pie de página} O tal vez: Envoltura {Izquierda [Cabecera, Nav], Derecha [Contenido], pie de página} –

+0

Pero su sugerencia aún es muy buena, y le agradezco la idea. Tal vez con la explicación que di, podrías entender mejor. El problema es que quiero que la persona que crea las plantillas pueda hacerlas fácilmente. Tal vez, tal vez ... Creo que deberían tener la opción de utilizar una plantilla básica, pero pueden profundizar si así lo desean. ¿Crees que es aceptable o? –

+0

Definitivamente es una gran decisión de diseño. Ofrecer la capacidad de personalizar una vista es obvio. Pero, ¿puede esa vista personalizarse para cada instancia de la vista? ¿Entonces la página A puede tener una vista personalizada para una lista de categorías frente a la vista de categorías de la página B? ¿Cómo se definiría la vista personalizada? Cómo se hace esto realmente depende de algunas de las decisiones y filosofías que ha usado en otras partes del CMS. Mi marco CMS era mucho más complicado y permitía bastante personalización, tanto a través de la base de datos como de vistas personalizadas, etc. – Percy