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! ;)



Comentar

14 Comentarios

  1. hola amigo pues aqui sigo dando lata jejeje. ya estoy terminando de leer tu post y pues permiteme otra vez felicitarte por este post pues esta muy bien explicado todo la verdad tus ejemplos me han ayudado bastante en mi investigacion. hasta voy a referenciar tu post en mi tesis de proyecto pues esta muy bien. bueno saludos y gracias por el post

  2. Gracias a ti Felipe, y tranquilo que no es lata, aca en el blog si no nos dicen algo la regamos XD … Mejor que entre varios nos veamos los errores que estar solitarios jeje…

    Saludos!!

  3. hola otra vez amigo aqui te tengo otra pregunta, pues me e topado con el problema de los headers, no se si se deba a el tipo de servidor que estoy utilizando (XAMPP) o algo asi, pues ya configure todo bien del archivo blogoo.php

    //////////////////////////////////////
    // estas son las configuraciones para el servidor, cambiar si es necesario…
    var $servidor = “localhost”;
    var $bd = “blogoo”;
    var $usuario = “root”;
    var $clave = “0000″;
    //////////////////////////////////////

    al momento de abrir la pagina si la ejecuta bien, pero al momento de iniciar sesion como administrador (usuario:ADMIN pass:1234) me manda este error

    Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\SISTEMA_BLOG_PHP\bloglocal\motor\blogoo.php:1) in C:\xampp\htdocs\SISTEMA_BLOG_PHP\bloglocal\login.php on line 41

    Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\SISTEMA_BLOG_PHP\bloglocal\motor\blogoo.php:1) in C:\xampp\htdocs\SISTEMA_BLOG_PHP\bloglocal\login.php on line 42

    Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\SISTEMA_BLOG_PHP\bloglocal\motor\blogoo.php:1) in C:\xampp\htdocs\SISTEMA_BLOG_PHP\bloglocal\login.php on line 43

    Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\SISTEMA_BLOG_PHP\bloglocal\motor\blogoo.php:1) in C:\xampp\htdocs\SISTEMA_BLOG_PHP\bloglocal\login.php on line 46

    la verdad no se si tenga que descomentar algunas lineas del archivo php.ini

    no se si puedas darme algun consejo de una posible solucion a mi problema

  4. bueno ya despues de mucho rato al fin lo hice funcionar en mi servidor,, jejeje, sabes solo era de descomentar una simple linea del PHP.INI… como es posible q por una simple linea tarde todo el dia jajaja pero al fin valio la pena, bueno gracias amigo y espero mas d estos buenos post´s

    saludos

  5. muchas gracias por el blog :D

    lo mejoraré cuando pueda,metiendo mejoras y tal… así lograré “tal vez” algo más personal,de paso ya sabes que éste gran script será la base :D

    saludos!

  6. Hola amigo, buscando sobre algun otro sistema de blogs programados en PHP di con tu blog y permiteme felicitarte, por que te esta quedando super bien, se ve muy profesional.

    Igual yo estoy desarrollando un sistema gestor de contenido y se el tiempo que lleva planear y programar algo como esto.

    Te estare visitando seguido para ver como va tu sistema, al igual te estare dando sugerencias para mejorarlo y a ver que puedo sacarle a tu sistema que pueda implementarselo a l mio :) .

    Saludos!!

    • Hey, Gracias por interesarte :)

      Ahora quizás no tengo mucho tiempo para seguir encontrándole errores y añadiendo más funcionalidades, pero ahí vamos, no dudes en tomar código eh , que por eso lo posteo jeje…

      Bueno, cualquier otra duda o pregunta al respecto no dudes en ponerla aquí, y veremos como la resolvemos, digo tampoco lo se todo, pero en algo nos apoyamos XD

      Saludos!!!

  7. Me pasa lo mismo que al otro chico, tengo el problema con los header, como lo arreglo?

  8. Bueno mira, no conteste a la duda previamente porque Felipe ya había resolvido su problema y no lo creí oportuno, pero bueno vamos a intentar resolverlo.

    Pues verás, cuando yo hice el sistema de blogs usé como Servidor el WampServer, y aparte le active el módulo CUrl (PHP_CUrl creo que se llama), quizás el problema está en que en otros servidores los headers tienen un comportamiento distinto (les llamo headers pero no se como describir las opciones que manejan las variables de cabecera)… y bueno eso choca con que en muchos de mis metodos lo que se hace es redireccionar via “Header” (funcion header de php)… recomiendo intentar dos cosas:

    1.- Verificar la configuracion del header que se tenga en el servidor que sea.

    2.- Instalar WampServer y probarlo desde ahí (y habilitar de paso la extension PHP_Curl, si no saben como dejen un comentario aqui)

    Dudo que sea tema de pasar las variables entre páginas puesto que yo uso la variable $_GET y $_POST a lo que otro posible problema sea el que se tenga activado el registrer_globals y haya un crash ahi, verifica eso tambien, la verdad no estoy seguro pero siempre hay una posibilidad.

    Espero haya resolvido las dudas de los headers y si no pueden detallarme un poco más lo que les sucede.

    Saludos!

  9. como hago para que los usuarios registrados posteen pork si posteo voy a cansarme

  10. Hola soufiane, bueno, eso es algo de lo que también me tiene pensando un poco, pero una solución simple sería que editaras la base de datos y al usuario que quieres que postee contigo le cambies el atributo nivel_autor a 1 (en la tabla autor). Tecnicamente dicho usuario podria postear tal cual lo hace el autor del blog. Saludos.

    PD: Estoy sacando una nueva version un poco más seria de este blog. Dentro de un par de meses veran resultados con este y otros muchos problemas previamente listados ya resueltos.

    Saludos!

  11. me aparece el sgt error ( Fatal error: Call to undefined function curl_init() in /motor/blogoo.php on line 159 ) pero no lo puedo solucionar asi de facil, soy principiante en php espero que puedan decir como poder arreglarlo :mrgreen:

  12. Oh!, gracias por tu comentario Jefcomputer, se me habia pasado ese pequeño dato. Ahora mismo actualizo el Post!!! Saludos!!! :mrgreen:

Comentar

Quieres que aparezca tu foto en tu comentario? , date una vuelta por aquí y entérate cómo.


[ Ctrl + Enter ]