31 de enero de 2012

Sistema de posteo en PHP - Código y Documentación

Spoiler - Código clase PostSystem

Spoiler - Documentación de PostSystem

AngelFcM - Domingo, 29 de enero de 2012.

Creación de un sistema de posteo en una sola clase PHP.

Introducción

Me he dedicado a realizar una clase llamada PostSystem en PHP que funciona con MySQL, con el fin
de facilitar el desarrollo de una interfaz para un sistema de posteo.

Con esta clase pueden ingeniarselas para realizar desde una simple página de comentarios, un blog,
hasta uno o  más foros llenos de temas que responder o comentar, depende tu dedicación y
experiencia.

Esta clase cuenta con cuatro funciones y tres propiedades, las funciones básicamente se encargan de
realizar INSERT, SELECT, UPDATE y DELETE pero de forma más compleja.

Los posts se guardan en una tabla de la base de datos creada automáticamente si esque no existe.
La forma como funciona el sistema de posteo es familiarizando a los posts como padres e hijos y "los
hijos de los hijos..." usando dos indentificadores por post, uno el cuál identifica al post y otro para
hacer referencia a un post superior (si es que lo hay). En resumen, usa métodos recursivos para llegar
hasta el final de cada nodo.

Requiere de la conexión y selección a una base de datos MySQL previamente. La tabla es llamada
"tb_posts", las columnas son: "id", "author", "title", "snippet", "content", "type", "parent_id",
"date_created" y "date_modified".

Debería entenderse el propósito de cada columna logicamente por el nombre de ellas. Explicaré la
columna "parent_id" ya que es la base en como trabaja este sistema de posteo.

La columna "parent_id" es un identificador el cual hace referencia al "id" de otro post, así es como se
familiarizan como padres e hijos.

Si tengo un post con id=1 y parent_id=2, entonces el post con id=1 es "hijo" del post con id=2.

Documentación

- Tabla MySQL
    - tbposts
    Descripción
        Es la única tabla necesaria para que trabaje la clase, en la cual se guardan los datos de los posts.
        El script para crear la tabla se puede notar al inicio del código de la clase.
    Columnas
    - id: Identificador del post.
    - author: Nombre del creador del post.
    - title: Título del post.
    - snippet: Fragmento del contenido del post.
    - content: Contenido del post.
    - type: Tipo del post definido por el desarrollador. Ejemplo de tipos: entrada, comentario, cita.
    - parent_id: Identificador al que se enlaza el post jerárquicamente. Ejemplo: el id de "X" entrada es 12, el parent_id de "Y" comentario es 12.
    - date_create: fecha de creación del post, la fecha es establecida por PHP no por MySQL.
    - date_modified: fecha de modificación del post, igualmente establecida por PHP.

- Clase
    - SystemPost($dblink)
    Descripción
        Nombre para llamar a la clase del sistema de posteo.
    Parámetros
        $dblink: enlace al origen de la base de datos creada con mysql_connect(). Importante seleccionar la base de datos antes de crear el objeto de la clase.

- Propiedades
    - dblink
    Descripción
        Enlace al origen de la base de datos creada con mysql_connect().
    - last_post
    Descripción
        Contiene toda la información del último post creado en el objeto al llamar ->create() en un array asociativo a las columnas de la tabla de la db.
    - last_error
    Descripción
        Guarda el último error generado al llamar un método. Si el método retorna false se almacena la causa del error en esta propiedad.

- Métodos

    - insert($data)
    Descripción
        Crea un nuevo post en la tabla tb_posts basados en los valores dados en $data. Devuelve true en caso de exito y false en caso de error, el cual se guarda en la propiedad last_error.
    Parámetros
        $data: debe ser un array asociativo que contiene los datos del nuevo post, debe contener al menos el título, contenido, fragmento y tipo de post si no se definen las fechas e identificadores, se crean automáticamente.
        Los vectores tienen el mismo nombre que las columnas de la tabla tb_posts.

    - select($id_or_type, $config)
    Descripción
        Selecciona uno o más posts en base a la información pasada como parámetros ordenados del primero al último creado. Devuelve un array asociativo con los datos de posts en arrays separados, si hubo un error devuelve false.
        Los posts pueden contener posts jeraquicamente inferiores, por lo tanto son introducidos dentro del array del post "padre" en un array asociado como "children". Un ejemplo al seleccionar dos posts que contienen más posts es:
            array(
                array("id"=>"1", "title"=>"", "children"=>array(...)),
                array("id"=>"2", "title"=>"", "children"=>array(...)),
            )
        Puede definirse como nodos que contienen más nodos los cuales son posts.
    Parámetros
        $id_or_type: puede ir el identificador del post o el tipo de posts que se quieren seleccionar
        $config: es un array asociativo que indica como se obtendran los posts, si no se pone nada, se establece de forma predeterminada, pero si se establece, debe contener todos los valores asociativos. A continuación se explican.
            "mode":
                Puede ser 0, 1 o 2.
                Al establecer 0, se selecciona el post con el id pasado en $id_or_type.
                Si es 1, se seleccionan todos los posts que sean hijos al post con id igual al pasado en $id_or_type, es decir, "WHERE parent_id=$id_or_type".
                Si se establece 2, obtendrá todos los posts de un mismo tipo que sea igual al valor de $id_or_type.
            "fields":
                Son los campos que se obtendran de la tabla tb_posts los cuales serán devueltos asotiativamente en un array, deben estar separados por coma, pueden usarse selectores como "*" ya que "fields" es parte de la consulta, es decir, va despues de "SELECT".
            "get_children":
                Puede ser true o false.
                Si se pasa true, obtendrá todos los posts "hijos" del post o posts solicitados, también obtendrá los hijos de los hijos recursivamente. Si se pone false, solo seleccionará los posts con el indentificador pasado en $id_or_type. Ya sea por id, parent_id o type.
            "limit":
                Establece el límite de posts a seleccionar. Pero si el post seleccionado contiene "hijos", obtendrá todos.
            "limit_children":
                Establece el límite de posts hijos en caso de haber. También aplica a los hijos de los hijos.
         
    - update($id, $data)
        Descripción
            Actualiza/modifica la información de un post existente.
        Parámetros
            $id: Es el indentificador del post a actualizar/modificar.
            $data: Es un array asociativo con los datos que serán modificados, si se modifica el identificador del post, automaticamente a los posts "hijos" se les cambiará el parent_id por el nuevo id del post.

    - delete($id, $delete_children)
        Descripción
            Borra el post con el identificador asignado y puede borrar a todos los posts hijos.
        Parámetros
            $id: Indentificador del post a borrar.
            $delete_children: booleano, si es true, se borraran todos los posts hijos y los hijos de los hijos. Si es false o no se pone nada, entonces solo se borra el post con el identificador asignado y sus hijos quedarán intactos.

    - selectParent($id, $type, $fields)
        Descripción
            Selecciona el post padre del post con el id definido con el tipo de post definido.
        Parámetros
            $id: Indetificador del post, para obtener el post padre del mismo.
            $type: Tipo de post padre que se obtendrá.
            $fields: campos o datos que se obtendrán del post padre, separados por coma

No hay comentarios:

Publicar un comentario