Creando un sistema de blogs [PHP] [III]

Bueno, como diría Clayder en cuanto a la programación, a veces es mejor compartir para ayudarnos todos o nos podemos ir a la basura con nuestros programas con bugs por todos lados y solitarios, creo que no lo dijo pero estoy seguro que lo pensó. El hecho es que en este post que espero sea meramente didáctico quiero mostrarles la segunda versión de mi aplicación web que me ha consumido en los últimos días de programador amateur por si alguien quiere probarlo, reestructurarlo, editarlo, y/o escupirlo o que se yo (no me ofende, el compartir abarca eso también :D ), cosa que, desde las primeras versiones que mostré en los dos anteriores post, hasta la versión que tengo en mi poder actualmente y que ya utilizo en la dirección de mi blog personal (http://willmedina.co.cc) han habido ciertos cambios significativos siendo el principal el que reestructuré tal código desde un enfoque de programación  orientada a objetos que está tan de moda. También hubo algunos que otros cambios como el que ya los usuarios no dependían de sólo sesiones para mantenerse conectados y en el panel de control (cosa que podría ocasionar que se acabe la sesión cuando estés editando un post, y crash!), para eso introduje algunas operaciones con cookies.

También cambié la estructura de las tablas en la base de datos de manera más ordenada y con notaciones más acorde con una base de datos, valgan redundancias. Tanto que eliminé la de Feedback, porque bien la operación se podría mandar al correo electrónico con la función Mail() directamente, eliminé la tabla de Widgets de la sidebar, y esto si fue personal, porque según yo, a cada vez que quería modificar el sidebar simplemente modificaba el <archivo del sidebar>.php porque al fin y al cabo eso se traduce en HTML puro, y estar sobrecargándolo con funciones y llamadas a bases de datos era un poco estúpido (desde el punto de vista de la simpleza de mi aplicación).

Los atributos cambiaron de nombre y en las consultas hechas desde el PHP se referían a los componentes de manera explícita (osea, en vez de poner algo como $row[0], colocaba $row["nombre"], entre otros ejemplos), porque creo que es más fácil de entender el código que haciendo una búsqueda de índices para saber a quien se llama… pero bueno, haré un esquema de cómo es que hice el sistemita este.

Obviamente iba a hacerlo todo con Clases y Objetos instanciados en ellas, para lo que empecé un poco a vislumbrar el modelo, los sustantivos en un blog como todos sabemos son estos: Usuario, Post, Comentario; Luego pensé en que necesitaba una clase en donde definir las tareas de un blog, tan comunes como “mostrar el título” , “conectarse a la BD”, etc; y pues, ese tipo de funciones no encajaba en ninguna otra clase, por lo que definí tal clase como Blogoo

(idea salida a que es un Blog Orientado a Objetos). Luego saldría la confusión de que las funciones del panel de  control no podrían estar en Blogoo porque simplemente iba a estar más perdido que Atahualpa en Avión, por lo que cree una clase adicional a la que llame Panel. Con lo que todo quedaba así en cuanto a clases:

Y todo esto, para una mayor organización en los archivos lo puse en una carpeta llamada “motor”, que en conjunto con otras carpetas que hacen funcionar los procesos básicos de un blog (agregar post, eliminar post, etc) y hasta la interacción con sus usuarios (Aprobar comentarios, desaprobar comentarios, borrar comentarios, etc) forman un sistema un poco parecido a esto:

Como en el gráfico anterior lo describe, al final lo que el browser ve son solo unos cuantos archivos entre los que destacan el de index.php, ShowPost.php (no le cambié de nombre para que no se pierdan los post en los buscadores y así) y pagina.php, entre otras páginas que mediante includes a los componentes comunes como son header.php, footer.php y barra.php y creación de objetos desde las clases que están en motor , empieza a funcionar el blog de manera más escalable y reutilizable en cuanto a código y funciones, es decir, la función para mostrar el título se puede usar de la misma forma en index.php que en algún otro archivo que importe la clase, lo mismo con los atributos.

Hay un archivo y una carpeta que no definí en el esquema anterior, que es la de panel.php y la carpeta panel, puesto que estos tienen un proceso aparte que opera con los usuarios que estén con sesión iniciada luego de ser validados mediante cookies y algunas funciones también definidas en motor/blogoo.php. Desde ahí se realiza el posteo, el borrado, entre otras funciones como cambiar el perfil de algún autor del blog, o las opciones como el titulo del blog, el numero de post a mostrar por pagina o el twitter a mostrar en la entradita del blog o lo que se les ocurra.

Ahora, yendo a la base de datos, el esquema que use fue un poco diferente al que instaure inicialmente, puesto que cambie los nombres de las tablas y algunas las borré (como dije más arriba) todo al final quedo así:

TABLA b_autor

TABLA b_post

TABLA b_categoria

TABLA b_comentario

TABLA b_opc

En algunos casos los atributos que son iguales de tabla en tabla se relacionan en comparaciones como por ejemplo, el id_post en la tabla b_comentario sirve para identificar a que post pertenece que comentario, y así con algunos que otros atributos.

Bueno, ahora que ya expliqué cómo funciona el modelo de mi sistemita, les compartiré el código de mi sistema y ustedes sólo tienen que cambiar las variables globales de la clase blogoo en la carpeta motor ajustándolas al servidor que ustedes coloquen. El código no es tan difícil, es cosa de agarrar el esquema y analizar para que sirve cada cosa, ah y… creo que aún me faltan terminar algunas cosas como el borrar post o como gestionar las categorías desde el panel de control, entre nuevas funcionalidades que puedan surgir o puedan agregar ustedes para su uso o afines.

El Código lo pueden bajar de aquí: http://www.mediafire.com/?zymyy1jn1qk o en todo caso verlo en funcionamiento desde: http://willmedina.co.cc/ que, si es que realizo algún cambio significativo será el primer lugar en donde se refleje el funcionamiento.

Existe un backup llamado blogoo.sql, eso ejecútenlo en una base de datos y automáticamente se crearán las tablas vacías con un usuario por defecto ADMIN con clave 1234.

Espero les ayude esta nueva versión del sistema, un poco cambiada pero supongo que ahora mejor!

Si se fijan en algún error, duda, o quieren saber cómo funciona que cosa en específico, o me olvidé de mencionar algo y ahora tienen dudas al respecto, sólo dejen su pregunta aquí en este post y yo con gusto les contestaré!

Saludos!!!

Actualización 18/08:

Gracias al comentario de Jefcomputer, algunos de ustedes pueden tener un problema con la extensión cURL del PHP en el WAMPServer ya que esta no viene habilitada por default,

El error es este:

Fatal error: Call to undefined function curl_init() in //...

y la solución es habilitando la extensión php_curl en su panel del servidor WEB que tengan asi los métodos que invoque y que usan esa extensión podrán ejecutarse correctamente, asi se hace en el caso de WAMPServer:

Van aqui:

Y luego de ir a PHP extensions seleccionan la de cURL y la activan se reiniciará el webserver pero ya se podrá ejecutar…

Gracias Jefcomputer, un saludo! ;)