Bienvenido a esta 3ª Parte del Tutorial dedicado a la creación de un Sistema de Noticias Simple. En esta 3ª parte voy a ampliar un poco las caracteristicas de las noticias.
Si todo sale bien, al final de este tutorial, el sistema de noticias tendrá:
- Sistema BBCode
- Sistema de Emoticonos
- Sistema de Filtro de Palabras
Bien, Comencemos con el sistema BBCode, para ello crearemos una funcion a la que llamaré
bbcode();:
<?PHP
function bbcode($texto) {
$texto = str_replace("\n","<br>",$texto) ; //Saltos de Linea
$texto = str_replace("[b]","<b>",$texto) ; //Negrita
$texto = str_replace("[/b]","</b>",$texto) ; //Negrita
$texto = str_replace("[i]","<i>",$texto) ; //Italic
$texto = str_replace("[/i]","</i>",$texto) ; //Italic
$texto = str_replace("[u]","<u>",$texto) ; //Subrayado
$texto = str_replace("[/u]","</u>",$texto) ; //Subrayado
return $texto;
}
?>Ahora podrás formatear el texto usando los siguientes TAGS*:
[b]Texto en Negrita[/b]
[i]Texto en Cursiva[/i]
[u]Texto Subrayado[/u]
El sistema BBCode esta acabado, ahora vamos a por el Sistema de Emoticonos. Para ello vamos a ampliar la funcion bbcode y a usarla tambien para el sistema de emoticonos, con esto reduciremos el numero de funciones y con ello la sencillez será mayor.
Supongamos que disponemos de una carpeta llamada smilies con los siguientes emoticonos:
- confundido.gif
- lloron.gif
- pijo.gif
- sonrisa.gif
- sorprendido.gif
<?PHP
function bbcode($texto) {
$texto = str_replace("\n","<br>",$texto); //Saltos de Linea
$texto = str_replace("[b]","<b>",$texto); //Negrita
$texto = str_replace("[/b]","</b>",$texto); //Negrita
$texto = str_replace("[i]","<i>",$texto); //Italic
$texto = str_replace("[/i]","</i>",$texto); //Italic
$texto = str_replace("[u]","<u>",$texto); //Subrayado
$texto = str_replace("[/u]","</u>",$texto); //Subrayado
$texto = str_replace(':S','<img src="smilies/confundido.gif">', $texto);
$texto = str_replace(':)','<img src="smilies/lloron.gif">', $texto);
$texto = str_replace('8)','<img src="smilies/pijo.gif">', $texto);
$texto = str_replace(':D','<img src="smilies/sonrisa.gif">', $texto);
$texto = str_replace(':O','<img src="smilies/sorprendido.gif">', $texto);
return $texto;
}
?>Ahora con una misma función hemos conseguido un sistema de bbcode y emoticonos, solamente nos falta el Filtro de Palabras que tambien se podría hacer usando la función bbcode(); pero creo conveniente separar el Filtro del sistema BBCODE.
Prosigamos, ahora creare una la funcion
filtro_palabras(); que se encargarás de eliminar palabras que no deseemos o insultos... del texto que nosotros queramos, en este caso las noticias.
<?PHP
function filtro_palabras($texto) {
$palabras = array("tonto", "feo", "*****");
$division = explode(" ", $texto);
foreach ($division as $key => $valor) {
foreach ($palabras as $palabra) {
if (strtolower($valor) == $palabra) {
$division[$key] = "[CENSURADO]";
}
}
}
$texto = implode(" ",$division);
return $texto;
}
?>Ahora disponemos de 2 funciones, bbcode(); y filtro_palabras(); encargadas de realizar las funciones que deseabamos realizar en un principio, ahora solamente nos falta aplicar las funciones al sistema de noticias. Para ello compilaremos las dos funciones en un mismo archivo al que denominaremos
funciones.phpfunciones.php<?PHP
function bbcode($texto) {
$texto = str_replace("\n","<br>",$texto); //Saltos de Linea
$texto = str_replace("[b]","<b>",$texto); //Negrita
$texto = str_replace("[/b]","</b>",$texto); //Negrita
$texto = str_replace("[i]","<i>",$texto); //Italic
$texto = str_replace("[/i]","</i>",$texto); //Italic
$texto = str_replace("[u]","<u>",$texto); //Subrayado
$texto = str_replace("[/u]","</u>",$texto); //Subrayado
$texto = str_replace(':S','<img src="smilies/confundido.gif">', $texto);
$texto = str_replace(':)','<img src="smilies/lloron.gif">', $texto);
$texto = str_replace('8)','<img src="smilies/pijo.gif">', $texto);
$texto = str_replace(':D','<img src="smilies/sonrisa.gif">', $texto);
$texto = str_replace(':O','<img src="smilies/sorprendido.gif">', $texto);
return $texto;
}
function filtro_palabras($texto) {
$palabras = array("tonto", "feo", "*****");
$division = explode(" ", $texto);
foreach ($division as $key => $valor) {
foreach ($palabras as $palabra) {
if (strtolower($valor) == $palabra) {
$division[$key] = "[CENSURADO]";
}
}
}
$texto = implode(" ",$division);
return $texto;
}
?>Ahora que disponemos de este archivo modificaremos algunas partes del archivo noticias.php creado en la 1ª Parte del tutorial:
<?PHP
/* ANTES DE TODO EL CODIGO HAY QUE CONECTAR A LA BASE DE DATOS
include("conectar.php"); <--- Esto es un ejemplo de como conectar...*/
include("funciones.php");
$query = @mysql_query("SELECT * FROM `noticias` ORDER BY `id` DESC"); //Se extraen las noticias en orden reciente
if (@mysql_num_rows($query)) { // Se comprueba si hay alguna noticia publicada
while ($noticia = @mysql_fetch_array($query)) { //Se hace un bucle para mostrar cada noticia una a una
echo '<table border="0" width="100%">
<tr><td align="center">'.filtro_palabras(bbcode($noticia['titulo'])).'</td></tr>
<tr><td>'.filtro_palabras(bbcode($noticia['noticia'])).'</td></tr>
<tr><td>Enviada por '.$noticia['autor'].' || Fecha: '.$noticia['fecha'].'</td></tr>
</table><hr>';
}
} else {
echo "No hay ninguna noticia publicada";
}
@mysql_free_result($noticia); //Se borran los datos usados
?>Las funciones, del funciones.php, se incluyen en el archivo noticias.php mediante la funcion include(); y se aplican del siguiente modo:
filtro_palabras(bbcode($noticia['titulo']))
filtro_palabras(bbcode($noticia['noticia']))