Algoritmo para los foros
2007-06-27 11:35:39-05
Desarrollo
He estado buscando un foro en CakePHP para que se integre a Centauro. No quiero volver a poner phpBB porque estaría "separado" del portal como antes. No he encontrado ningún foro de modo que me voy a lanzar a programarlos yo, ¡esos son hombres no pedazos!
Por ejemplo el blogger da de alta las categorías "Distribuciones" y "Lenguajes" adentro de "Distribiciones" coloca los foros "Ubuntu", "SUSE" y "Gentoo", adentro de la categoría "Lenguajes" coloca "Java", "Pyhton" y "PHP". Eso en el backend.
Un usuario registrado entra a la zona de discusión del blogger y en el foro "Python" de la categoría "Lenguajes" escribe un Topic (generalmente una pregunta) como "¿Cuán estable es Python?", los usuarios colocan sus Reply para contestar esa pregunta.
Es decir el modelo app/models/catforum.php tiene la relación hasMany con el modelo Forum:
public $hasMany = array('Forum' =>
array('className' => 'Forum',
'foreignKey' => 'catforum_id'
)
);
El modelo app/models/forum.php tiene la relación hasMany con el modelo Topic:
public $hasMany = array('Topic' =>
array('className' => 'Topic',
'foreignKey' => 'forum_id'
)
);
Y el modelo app/models/topic.php tiene la el mismo tipo de relación con el modelo Reply. El algoritmo se ve sencillo, mi princpal obstáculo es que aún no me siento del todo cómodo con ActiveRecord de modo que probablemente en la primera versión "jalare" algunos arrays más grandes de lo debido.
Lo primero es tener la versión 0.1, ya después iré buscando la manera de "limpiar" las llamadas de los modelos.
Ya tengo los controladores para catforum y forum.
Por ahora lo que se me ocurre son cuatro tablas (cuatro modelos) y construir los foros en cascada:
Catforum
-> Forum
-> Topic
-> Reply
Por ejemplo el blogger da de alta las categorías "Distribuciones" y "Lenguajes" adentro de "Distribiciones" coloca los foros "Ubuntu", "SUSE" y "Gentoo", adentro de la categoría "Lenguajes" coloca "Java", "Pyhton" y "PHP". Eso en el backend.
Un usuario registrado entra a la zona de discusión del blogger y en el foro "Python" de la categoría "Lenguajes" escribe un Topic (generalmente una pregunta) como "¿Cuán estable es Python?", los usuarios colocan sus Reply para contestar esa pregunta.
Es decir el modelo app/models/catforum.php tiene la relación hasMany con el modelo Forum:
public $hasMany = array('Forum' =>
array('className' => 'Forum',
'foreignKey' => 'catforum_id'
)
);
El modelo app/models/forum.php tiene la relación hasMany con el modelo Topic:
public $hasMany = array('Topic' =>
array('className' => 'Topic',
'foreignKey' => 'forum_id'
)
);
Y el modelo app/models/topic.php tiene la el mismo tipo de relación con el modelo Reply. El algoritmo se ve sencillo, mi princpal obstáculo es que aún no me siento del todo cómodo con ActiveRecord de modo que probablemente en la primera versión "jalare" algunos arrays más grandes de lo debido.
Lo primero es tener la versión 0.1, ya después iré buscando la manera de "limpiar" las llamadas de los modelos.
Ya tengo los controladores para catforum y forum.
Permalink: http://www.mononeurona.org/users/entry/aarkerio/599
Comentblogs:1.-
alucard_thot wrote:
Tú modelo se ve bien. Supongo que las relaciones con los usuarios lo tomarás de las demás tablas de centauro? o como lo manejarÃas?
2007-06-27 19:49:56-05
Tú modelo se ve bien. Supongo que las relaciones con los usuarios lo tomarás de las demás tablas de centauro? o como lo manejarÃas?
2007-06-27 19:49:56-05
2.-
Daexter wrote:
Chingado... yo que no sé casi nada de php y menos de cake... bueno, lo que veo es que estás separando los Topics completamente de los Replies. Particularmente no me gusta esa solución porque para explotar la información de forma clara y rápida tienes que hacer uso de los UNION. Probablemente haya otra solución pero no soy tan tan bueno con SQL. Me parece más bien que según UML los Replies y los Topics son una especialización de una clase Abstracta Message, ya después de eso puedes clasificar a los registros de la clase message en base a un campo tipo o poniendo al topic como su propia respuesta por citar algún ejemplo. En el trabajo empezaremos a utilizar algunos ejemplos esta forma de Generalización/Especialización para un sistema de 'Tracking de trabajo' en uno de los servicios que la consultora ofrecerá a sus clientes y, la verdad es que todavÃa no sabemos a qué problemas en particular nos enfrentaremos.
Saludos
2007-06-27 23:21:02-05
Chingado... yo que no sé casi nada de php y menos de cake... bueno, lo que veo es que estás separando los Topics completamente de los Replies. Particularmente no me gusta esa solución porque para explotar la información de forma clara y rápida tienes que hacer uso de los UNION. Probablemente haya otra solución pero no soy tan tan bueno con SQL. Me parece más bien que según UML los Replies y los Topics son una especialización de una clase Abstracta Message, ya después de eso puedes clasificar a los registros de la clase message en base a un campo tipo o poniendo al topic como su propia respuesta por citar algún ejemplo. En el trabajo empezaremos a utilizar algunos ejemplos esta forma de Generalización/Especialización para un sistema de 'Tracking de trabajo' en uno de los servicios que la consultora ofrecerá a sus clientes y, la verdad es que todavÃa no sabemos a qué problemas en particular nos enfrentaremos.
Saludos
2007-06-27 23:21:02-05
3.-
aarkerio wrote:
alucard: si la tabla "users" es la que define los usuarios del foro.
Daexter: en efecto la tabla "replies" no es estrictamente necesaria, se podrÃa agregar un "campo bandera" en la tabla topics para indicar que un registro de esa tabla es el primero y el resto son las respuestas. Esa es la aproximación que ya se usa en los cometarios d elas noticias y en estos comentarios de los blogs de modo que es probable que el modelo Reply desaparezca cuando ya me sienta "más suelto" en esta parte, pero mientras no tenga claro en mi cabezota el algoritmo completo de los foros la mantengo.
Cheers!
2007-06-28 09:00:08-05
alucard: si la tabla "users" es la que define los usuarios del foro.
Daexter: en efecto la tabla "replies" no es estrictamente necesaria, se podrÃa agregar un "campo bandera" en la tabla topics para indicar que un registro de esa tabla es el primero y el resto son las respuestas. Esa es la aproximación que ya se usa en los cometarios d elas noticias y en estos comentarios de los blogs de modo que es probable que el modelo Reply desaparezca cuando ya me sienta "más suelto" en esta parte, pero mientras no tenga claro en mi cabezota el algoritmo completo de los foros la mantengo.
Cheers!
2007-06-28 09:00:08-05











