¿Cómo organizo un CMS de PHP?

B

Primero que no se asuste nadie que no pido a nadie que me ponga todo el código fuente de un CMS, sólo consejos para lo que os explico.

Estoy practicando con cosas más complejas a las que vienen en los manuales y me he aventurado con construir un CMS desde cero. Desde el punto de vista de la programación no es nada del otro mundo porque son consultas muy sencillas pero mi problema viene con los agobios que tengo por cómo organizar todo el tochaco que tengo y no solo en este ejemplo sino en otro similares de estas magnitudes.

He empezado un poco a agobiarme sobre todo con la construcción del panel de administración (del estilo al de Wordpress para editar usuarios, categorías, artículos)... Gestiono todo el panel desde un mismo fichero (admin.php) pero no sé como controlar cuando accedo a cada una de las secciones. Es decir, para acceder a una sección lo tengo puesto como admin.php?seccion=usuarios Pero si tengo 15 secciones en total, que tengo que preguntar, ¿15 veces con un IF por el valor de esa sección para que vaya a un lugar a otro? Y otra cosa, el código de cada sección, por ejemplo, el de administrar los artículos, ¿dónde lo pongo, en un fichero a parte y después desde el admin.php hago un require a ese fichero? Es que lógicamente de este modo la cantidad de archivos crece un montón y luego para gestionar todo esto es un lío tremendo. Me gusta mucho reducir el código y que sea eficiente y esta solución me pareció muy liosa.

Por eso quiero pediros consejos para saber cómo construir este tipo de programas. Cómo organizar todo estos casos de uso que tiene el usuario, de si pincho aquí va allí y tal.

Zuki

#1 Puedes hacerlo con IF o con un switch poniendolo 15 veces y requerir el fichero del apartado. Si te fijas en cualquier CMS tiene una cantidad infumable de archivos que se llaman entre si, asi que no te extrañes.

Nucklear

Yo lo dividiría todo en archivos específicos para cada sección, así en caso de encontrar un error sabes justo a donde ir sin buscar entre 500 lineas de código.

eXtreM3

Si tienes 15 secciones, te haces un switch que compruebe la sección y entonces la cargas.

Hazte 15 archivos con cada sección para organizarte mejor.

Es un GRAN TRABAJO aventurarse a desarrollar un buen CMS desde cero. No sé si habrás bicheado por los archivos de wordpress, pero tienen una cantidad de código infumable, millones de clases, funciones, scripts, archivos que se llaman entre sí miles de veces, tochos y tochos de seguridad...

Te recomiendo hacer una buena base, tarda lo que tengas que tardar en hacer un diseño lo más perfecto que puedas de la base de datos (usuarios, entradas, categorías, etiquetas, archivos multimedia...) y después empieza a desarrollarlo poco a poco, no te estreses. A medida que vayas programando te darás cuenta de los errores o bugs que vas teniendo.

Al toro!

1 respuesta
B

#1 eso se debe gestionar mediante un controlador, busco info en google sobre Modelo Vista Controlador.

1 respuesta
Kiroushi

#1 Aprende a usar algún framework, porque te va a ahorrar MUCHOS dolores de cabeza.

Yo optaría por CakePHP, Codeigniter, Kohana o similares.

1 respuesta
B

Gracias a todos por contestar.

#4: Lo haré así. Haré tantos archivos como sea y ya me documentaré en un documento .txt la relación de ficheros. Como no paro de leer por ahí que el código debe ser reutilizable pues me hago unos líos mentales que pa' que. Y sí, tienes razón, este ejercicio es meterse en aguas pantanosas pero bueno, menos mal que no es un trabajillo sino una práctica mía por tratar de aprender más PHP sino acabaría loco.

#5, #6: Cuando empecé cosa de un mes a leerme cosas de PHP en los manuales venían eso que decís vosotros y yo me preguntaba para qué leches se utilizará esoPHP. ¿? Pues nada, parece que me toca aprenderlo.

Si alguien tiene más sugerencias estoy abierto a escucharlas.

1 respuesta
Kiroushi

#7 Básicamente es un "núcleo" sobre el que trabaja tu aplicación. Todo funciona por medio de objetos, y por ejemplo, uno de ellos son los objetos de BDD que ya vienen definidos con todas las funciones que necesitas, en vez de tener que escribir (y securizar) tú mismo.

LOc0

#1 Un proyecto así, si no tienes buenas nociones de POO y de patrones de diseño es probable que termine siendo un precioso zurullo "inabordable", aunque si tu intención simplemente es practicar PHP pues tira millas y hazlo como más cómodo te encuentres.

Salu2 ;)

1 respuesta
Esmoris

Yo aprendí la lección el día que no organicé un programa xDD
Llevaba 200 lineas de código y dije bah paso de organizarlo en clases.
Cuando me di cuenta llevaba casi 6000 líneas de código , y cuando me fallaba las pasé muy canutas para encontrar el error xDD

elkaoD

#9 Un proyecto así, si no tienes buenas nociones de POO y de patrones de diseño es probable que termine siendo un precioso zurullo...

...y así es como nació Wordpress ;)

1 1 respuesta
BLZKZ

MVC y fin de los problemas.

De nada.

1
eXtreM3

#11 sí bueno... pero con un equipo de desarrollo, no una sola persona. (si era irony me has pillao xd)

B

Gracias a todos por los consejos. Tengo hecho el panel de login de admins, con recuperación de contraseñas por código enviado a email y una pequeña parte del panel de administración siguiendo el modelo MVC y desde luego que me ha pegado un vuelco para bien la organización. Me gustaría hacerlo en POO pero ya tendría muchas dudas que preguntar así que sigo así en forma modular.

B

Quizás soy un poco talibán con el tema pero yo no me metería a hacer un CMS sin POO. Te compensa parar, aprender, y refactorizar.

B

Ya habéis sido unos cuantos los que me habéis dicho de pasarlo a POO y si es así, será por algo. En fin. Algún día tocaba.

Por POO entiendo yo:

  • Por ejemplo, me centro en el caso del formulario de login de admins. Lógicamente en esta parte del programa manejo funciones del estilo, "comprobarLogin(), buscarUsuarioPorEmail(), generarContraseñaAleatoria()..." En resumen, un conjunto de funciones relativas al proceso de login. En POO, ¿qué tendría que hacer? ¿Crear un clase llamada "Usuarios" y dentro de ella colocar estos métodos? Y lo que es la Vista del modelo MVC, ¿también hay que incorporarlas dentro de las clases?
2 respuestas
BLZKZ

#16 en mi github tienes un ejemplo de cms (sin terminar) hecho con MVC+OO

1 respuesta
B

#16 Clase usuario con los métodos que creas convenientes(findById,findByEmail,etc). Lo que no esté relacionado como generarContraseñaAleatorio y sea de uso general mételo en una clase helper. La vista debe ser solo html con algún tipo de plantilla tipo smarty, ejemplo:

Nombre: {$name}
Apellidos: {$lastName}

Hacer la vista a base de "echos" es más complicado de mantener.

Las conexiones a bases de datos una clase singleton para que puedas acceder desde cualquier lado.
Para evitarte includes usa autoload.
La config principal del sitio (nombre base de datos, usuario, host,error reporting,etc) en un archivo independiente.
Con eso ya tienes por donde empezar.

1 respuesta
biluses

#1 yo tengo 144324 paneles de administracion de webs.

administrar noticias, usuarios, compras, listados, ultimas compras, productos.. bueno que se te va la hoya de algunos que tengo.

Si quieres puedo dejarte el de mi primer proyecto que hice. Es de hace 4 años y esta fatal comentado y es un lio pero te puede servir.

A la hora de hacer esto, es mucha paciencia y tiempo

1 respuesta
Soltrac

Framework.

Te ahorras 300 millones de líneas de código y encima todo organizadito en su sitio.

2 1 respuesta
B

#17 Gracias. Echaré un vistacillo a la organización que seguro que acabaré aprendiendo muchas cosas.

#18 Okis. He terminado la parte de gestión de usuarios con su clase y de momento bien.

#19 Gracias por el interés. Hombre, si lo subes le echaré un vistazo desde luego ya que siempre aprendes cosas nuevas y si no, no te preocupes. :P

#20 He utilizado el modelo MVC sin framework. Dado que he empezado con PHP hace poquito seguiré con él. Cuando el programa sea funcional lo pasaré por ejemplo a CakePHP.

Si salgo vivo de esta, lo subiría a un server para que le echéis un vistacillo. Saludos.

HeXaN

Yo tengo un colega que usa Smarty y no para de alabarlo constantemente, ¿tan útil es?

2 respuestas
eXtreM3

#22 desde que utilicé Prestashop, que está basado en Smarty, lo odio completamente xD

B

#22 Smarty no es un framework, es un sistema de plantillas y es bastante popular aunque hay mejores.

1 respuesta
HeXaN

#24 ¿Cómo?

MrTurbo

Yo he probado tanto smarty como twig y me quedo con twig.

1 respuesta
Tunnecino

Como #26, yo desde que probé Twig no cambio ni a la de tres. Me encanta ese motor de plantillas.

tada

#1 Si haces un CMS que sea con un framework (con POO). Yo hice un framework a paritr de un tutorial que encontré que te explicaba las clases basicas de un framework (MVC) y le hice un panel de control y demás para subir noticias, fotos, videos, etc..

Ahora le doy ojeadas a Zend (mire Yii y Cake pero no me convencen) para ir aprendiendo, que pese a ser algo mas complejo que lo que hice tiene mucho potencial.

Eso si, armate de paciencia y tiempo..

2 respuestas
HeXaN

#28 ¿Podrías pasar ese tutorial? Me interesaría tener un buen panel de control para mis proyectos.

1 respuesta
Soltrac

#28 Échale un vistazo a codeigniter, es más ligero que zend y si te manejas con zend codeigniter es muy parecido, pero permite más libertad en el MVC (para que el que no lo quiera usar no se vea obligado).