Foros del Web » Creando para Internet » Sistemas de gestión de contenidos »

Glosario para la web usando phpBB: no acierto con el bbcode

Estas en el tema de Glosario para la web usando phpBB: no acierto con el bbcode en el foro de Sistemas de gestión de contenidos en Foros del Web. En mi web tengo un foro phpBB, y se me ha ocurrido que podría utilizar el propio foro para montar una especie de glosario terminológico, ...
  #1 (permalink)  
Antiguo 23/06/2006, 18:33
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 20 años, 5 meses
Puntos: 76
Pregunta Glosario para la web usando phpBB: no acierto con el bbcode

En mi web tengo un foro phpBB, y se me ha ocurrido que podría utilizar el propio foro para montar una especie de glosario terminológico, ya que hay términos y conceptos que se repiten a menudo en diversos documentos de la web, y en vez de explicarlos cada vez, tengo intención de explicarlo una vez en el glosario y luego enlazar a esa explicación.

La mecánica es la siguiente: habilitaré un subforo específico para el glosario (concretamente el subforo número 16), y en éste abriré un tema por cada término o expresión. Para mantener un orden y evitar palabras repetidas en ese subforo sólo yo podré abrir nuevos temas (y probablemente algún usuario de confianza), y luego cualquiera podrá responder en ese tema para aportar lo que crea oportuno a la definición.

En este subforo las definiciones irán surgiendo de manera caótica según vaya surgiendo la necesidad de definir un término u otro, sin ningún orden concreto, así que habilitaré una sección en la web que, extrayendo la información del foro, mantendrá ordenado el glosario. Para ello extraerá los títulos de los temas de ese subforo específico, los ordenará alfabéticamente, y mostrará la definición (o al menos una parte de la misma).

Me he puesto manos a la obra con mis limitados conocimientos, y de momento éste es el resultado basándome en esto:

Código PHP:
<ul>
<? 
$directorio 
"./forum"//Carpeta donde esta situado el foro. 
include("$directorio/config.php"); 

$conexion mysql_connect($dbhost,$dbuser,$dbpasswd); 
mysql_select_db($dbname,$conexion); 
$consulta "select * from ".$table_prefix"topics WHERE forum_id='16' order by topic_title" 
$resultado mysql_query($consulta); 
$i 0
while (
$rows mysql_fetch_array($resultado)) { 
if (
$i <= $mostrar) { 

$consulta4 "select * from ".$table_prefix."posts where post_id='$rows[topic_first_post_id]'"
$resultado4 mysql_query($consulta4); 
$datosx mysql_fetch_array($resultado4); 

$consulta5 "select * from ".$table_prefix."posts_text where post_id='$rows[topic_first_post_id]'"
$resultado5 mysql_query($consulta5); 
$datosy mysql_fetch_array($resultado5); 

// Para quitar el bbcode
{
$datosy[post_text] = preg_replace("(\[.+?\])is",'',$datosy[post_text]); 
}

// Para acortar el texto de la definición
// { 
// $datosy[post_text] = substr($datosy[post_text],0,250)."..."; 
// } 

echo "<li class=\"mini\"><a href=\"$directorio/viewtopic.php?t=$rows[topic_id]\" name=\"$rows[topic_title]\" title=\"Pincha aquí para comentar la definición del término $rows[topic_title] o leer los comentarios de otros usuarios\">$rows[topic_title]</a>. $datosy[post_text]</li>";
$i++;



 
mysql_free_result($resultado); 
mysql_close($conexion); 
?>
</ul>
Esto funciona relativamente bien, me muestra las palabras ordenadas alfabéticamente, y sus definiciones. El problema es que como no me transforma el BBCODE en HTML, he tenido que filtrar el BBCODE, y me gustaría poder conservarlo, ya que el uso de negritas y demás elementos son muy útiles.

He estado buscando información al respecto, y lo único que he encontrado han sido tutoriales para crear mi propio BBCODE, cosa que no me interesa, ya que me gustaría usar el sistema de BBCODE del propio foro PHPBB para evitar inconsistencias. Al buscar en este foro he encontrado una duda similar de otro usuario, pero nadie le ha contestado aún, y no tengo ni idea de dónde sale todo ese código que ha puesto en su mensaje.

Si alguien pudiera darme una pista me sería de mucha ayuda.
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #2 (permalink)  
Antiguo 26/06/2006, 08:38
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 20 años, 5 meses
Puntos: 76
Voy avanzando, basándome en la duda planteada en este tema he encontrado el modo de mantener el BBCODE, aunque aún no es una solución completa, y seguro que fallará en más de una ocasión:

Código PHP:
<ul>
<? 
$directorio 
"./forum"//Carpeta donde esta situado el foro. 
include("$directorio/config.php"); 
$conexion mysql_connect($dbhost,$dbuser,$dbpasswd); 
mysql_select_db($dbname,$conexion); 
$consulta "select * from ".$table_prefix"topics WHERE forum_id='16' && topic_id!='648' order by topic_title" 
$resultado mysql_query($consulta); 
$i 0
while (
$rows mysql_fetch_array($resultado)) { 

$consulta4 "select * from ".$table_prefix."posts where post_id='$rows[topic_first_post_id]'"
$resultado4 mysql_query($consulta4); 
$datosx mysql_fetch_array($resultado4); 

$consulta5 "select * from ".$table_prefix."posts_text where post_id='$rows[topic_first_post_id]'"
$resultado5 mysql_query($consulta5); 
$datosy mysql_fetch_array($resultado5); 

//// Para reducir la longitud del título
// if (strlen($datost[topic_title]) > $caracteres) { 
// $datost[topic_title] = substr($datost[topic_title],0,20)."..."; 
// } 

$datosy[post_text] = str_replace("[b:".$datosy[bbcode_uid]."]","<b>"$datosy[post_text]);
$datosy[post_text] = str_replace("[/b:".$datosy[bbcode_uid]."]","</b>"$datosy[post_text]);
$datosy[post_text] = str_replace("[i:".$datosy[bbcode_uid]."]","<i>"$datosy[post_text]);
$datosy[post_text] = str_replace("[/i:".$datosy[bbcode_uid]."]","</i>"$datosy[post_text]);
$datosy[post_text] = str_replace("[u:".$datosy[bbcode_uid]."]","<u>"$datosy[post_text]);
$datosy[post_text] = str_replace("[/u:".$datosy[bbcode_uid]."]","</u>"$datosy[post_text]);
$datosy[post_text] = str_replace("[img:".$datosy[bbcode_uid]."]","<img src="$datosy[post_text]);
$datosy[post_text] = str_replace("[/img:".$datosy[bbcode_uid]."]",">"$datosy[post_text]);
$datosy[post_text] = preg_replace("[\[url=([a-zA-Z0-9\-\_\.\/\:]*)\]]is",'<a href="$1">'$datosy[post_text]);
$datosy[post_text] = str_replace("[/url]","</a>"$datosy[post_text]);

//// Para quitar el bbcode
 
{
 
$datosy[post_text] = preg_replace("(\[.+?\])is",'',$datosy[post_text]); 
 }

//// Para reducir la longitud del texto del mensaje.
// { 
// $datosy[post_text] = substr($datosy[post_text],0,150)."..."; 
// } 

echo "<li class=\"mini\"><a href=\"$directorio/viewtopic.php?t=$rows[topic_id]\" name=\"$rows[topic_title]\" title=\"Pincha aquí para comentar la definición del término &uml;$rows[topic_title]&uml; o leer los comentarios de otros usuarios\">$rows[topic_title]</a>. $datosy[post_text]</li>";
$i++;


 
mysql_free_result($resultado); 
mysql_close($conexion); 
?>
</ul>
Tengo dudas con la eficacia de esta expresión regular para abarcar todas las URLs posibles:

"[\[url=([a-zA-Z0-9\-\_\.\/\:]*)\]]is"

Por lo demás, de momento funciona bien.
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:18.