Autor Tema: Sistema de Noticias Simple - 3ª Parte  (Leído 8169 veces)

Conectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 165
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Sistema de Noticias Simple - 3ª Parte
« en: 16 de Diciembre de 2006, 14:41:44 pm »
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*:
Código: [Seleccionar]
[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(&#39;:S&#39;,&#39;<img src="smilies/confundido.gif">&#39;, $texto);
	
$texto str_replace(&#39;:)&#39;,&#39;<img src="smilies/lloron.gif">&#39;, $texto);
	
$texto str_replace(&#39;8)&#39;,&#39;<img src="smilies/pijo.gif">&#39;, $texto);
	
$texto str_replace(&#39;:D&#39;,&#39;<img src="smilies/sonrisa.gif">&#39;, $texto);
	
$texto str_replace(&#39;:O&#39;,&#39;<img src="smilies/sorprendido.gif">&#39;, $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.php

funciones.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(&#39;:S&#39;,&#39;<img src="smilies/confundido.gif">&#39;, $texto);
	
$texto str_replace(&#39;:)&#39;,&#39;<img src="smilies/lloron.gif">&#39;, $texto);
	
$texto str_replace(&#39;8)&#39;,&#39;<img src="smilies/pijo.gif">&#39;, $texto);
	
$texto str_replace(&#39;:D&#39;,&#39;<img src="smilies/sonrisa.gif">&#39;, $texto);
	
$texto str_replace(&#39;:O&#39;,&#39;<img src="smilies/sorprendido.gif">&#39;, $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 &
#39;<table border="0" width="100%">
	
	
	
<
tr><td align="center">&#39;.filtro_palabras(bbcode($noticia[&#39;titulo&#39;])).&#39;</td></tr>
	
	
	
<
tr><td>&#39;.filtro_palabras(bbcode($noticia[&#39;noticia&#39;])).&#39;</td></tr>
	
	
	
<
tr><td>Enviada por &#39;.$noticia[&#39;autor&#39;].&#39; || Fecha: &#39;.$noticia[&#39;fecha&#39;].&#39;</td></tr>
	
	
</
table><hr>&#39;;
	
}
} 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[&#39;titulo&#39;]))
filtro_palabras(bbcode($noticia[&#39;noticia&#39;]))



« Última modificación: 05 de Febrero de 2008, 00:16:44 am por naveda »
Por favor, leete las Normas


Comunidad PHPeros

Sistema de Noticias Simple - 3ª Parte
« en: 16 de Diciembre de 2006, 14:41:44 pm »

Desconectado Revancha

  • PHPero Avanzado
  • ****
  • Mensajes: 375
  • Karma: 22
  • Sexo: Masculino
    • Ver Perfil
Re: Sistema de Noticias Simple - 3ª Parte
« Respuesta #1 en: 16 de Diciembre de 2006, 19:32:34 pm »
Una consulta, si quiero agregar un bbcode, tendría que ser así?
$texto str_replace("[ php]","<?php",$texto) ; //Código PHP
$texto str_replace("[ /php]","?>",$texto) ; //Código PHP


PD: Entre el corchete ([) hay un espacio, ya que no sé podría visualizar bien.
« Última modificación: 16 de Diciembre de 2006, 20:02:17 pm por Revancha »

Desconectado Keon

  • PHPer@ Fijo
  • ***
  • Mensajes: 105
  • Karma: 0
    • Ver Perfil
Re: Sistema de Noticias Simple - 3ª Parte
« Respuesta #2 en: 16 de Diciembre de 2006, 19:59:28 pm »
Ha ocurrido un error, no se ha procesado la noticia

Me sale esto al enviar la noticia




Respeta las normas ;)

Conectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 165
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Re: Sistema de Noticias Simple - 3ª Parte
« Respuesta #3 en: 17 de Diciembre de 2006, 14:42:04 pm »
Vamos a ver, por partes.

El BBCode para codigo PHP es mas complejo que esto...
$texto str_replace("[ php]","<?php",$texto) ; //Código PHP
$texto str_replace("[ /php]","?>",$texto) ; //Código PHP



Ha ocurrido un error, no se ha procesado la noticia

Me sale esto al enviar la noticia
Esto sucede porque no has conectado con la base de datos...
Por favor, leete las Normas


Desconectado Ishamato

  • PHPero Avanzado
  • ****
  • Mensajes: 346
  • Karma: 3
  • Sexo: Masculino
  • PHPero adicto
    • Ver Perfil
Re: Sistema de Noticias Simple - 3ª Parte
« Respuesta #4 en: 17 de Diciembre de 2006, 15:57:27 pm »
El código url sería asín:


$texto 
str_replace("[ url]""<url>"$texto);
$texto str_replace("[ /url]""</url>"$texto);

???

<? echo "Aprendiendo y descubriendo poco a poco"; ?>

Desconectado Pc-Admin

  • PHPer@ Fijo
  • ***
  • Mensajes: 118
  • Karma: 3
  • Sexo: Masculino
    • Ver Perfil
Re: Sistema de Noticias Simple - 3ª Parte
« Respuesta #5 en: 19 de Diciembre de 2006, 13:55:28 pm »
Esta bien echo naveda, me gusta :):)
Si os fijais mas o menos todo se basa en lo mismo, crear la funcion y en el bbcode tmb, isha lo as echo bien ;);)
Todo en esta vida, es practicar.

Desconectado Pc-Admin

  • PHPer@ Fijo
  • ***
  • Mensajes: 118
  • Karma: 3
  • Sexo: Masculino
    • Ver Perfil
Re: Sistema de Noticias Simple - 3ª Parte
« Respuesta #6 en: 19 de Diciembre de 2006, 13:57:50 pm »
Me gusta naveda, esta bien echo y consta de varias cosas :):)
Todo en esta vida, es practicar.

Desconectado Keon

  • PHPer@ Fijo
  • ***
  • Mensajes: 105
  • Karma: 0
    • Ver Perfil
Re: Sistema de Noticias Simple - 3ª Parte
« Respuesta #7 en: 19 de Diciembre de 2006, 15:16:14 pm »
porque escribes dos mensajes para escribir lo mismo xD??




Respeta las normas ;)

Desconectado Pc-Admin

  • PHPer@ Fijo
  • ***
  • Mensajes: 118
  • Karma: 3
  • Sexo: Masculino
    • Ver Perfil
Re: Sistema de Noticias Simple - 3ª Parte
« Respuesta #8 en: 19 de Diciembre de 2006, 21:24:18 pm »
Porque en el primero me despiste, y te dije que estava bien pero no lo esta
Todo en esta vida, es practicar.

Desconectado Ishamato

  • PHPero Avanzado
  • ****
  • Mensajes: 346
  • Karma: 3
  • Sexo: Masculino
  • PHPero adicto
    • Ver Perfil
Re: Sistema de Noticias Simple - 3ª Parte
« Respuesta #9 en: 19 de Diciembre de 2006, 21:30:46 pm »
Es verdad xD

Si hacemos str_replace ("[url], <url>, $texto"); no funciona ya que el código de las url no es <url> ;)
No se explicar como hacerlo, ni hacerlo así que tendremos que esperar a que alguien que sepa nos ayude ^^

<? echo "Aprendiendo y descubriendo poco a poco"; ?>


Conectado naveda

  • Administrador General
  • PHPero Master
  • *****
  • Mensajes: 2.282
  • Karma: 165
  • Sexo: Masculino
    • Ver Perfil
    • naveda.me
Re: Sistema de Noticias Simple - 3ª Parte
« Respuesta #11 en: 24 de Diciembre de 2006, 14:07:31 pm »
El problema es que los enlaces se llamarian siempre LINK y esto podría no ser un correcto funcionamiento...

Bien, un buen metodo podría ser el siguiente:

//Especiales
	
$texto eregi_replace("\\[url=([^\\[]*)\\]([^\\[]*)\\[/url\\]",&#39;<a href="\\1">\\2</a>&#39;, $texto); //URLs
	
$texto eregi_replace("\\[img\\]([^\\[]*)\\[/img\\]",&#39;<img src="\\1">&#39;, $texto); //Imagenes


Con la funcion eregi_replace() podemos hacer busquedas de cadenas de texto que siguen unos patrones, en este caso el patron:
Código: [Seleccionar]
[url=WEB]Nombre LINK[/url] y [img]url_imagen[/img]
Ahora si aplicais estas lineas al archivo funciones.php podreis ver que funciona correctamente :P
« Última modificación: 24 de Diciembre de 2006, 14:09:05 pm por naveda »
Por favor, leete las Normas


Desconectado Revancha

  • PHPero Avanzado
  • ****
  • Mensajes: 375
  • Karma: 22
  • Sexo: Masculino
    • Ver Perfil
Re: Sistema de Noticias Simple - 3ª Parte
« Respuesta #12 en: 24 de Diciembre de 2006, 15:18:12 pm »
Para poner el texto de color, podría ser de la siguiente forma ¿no?
$texto preg_replace(&#39;/\[color=(#?[\w]+)\]/&#39;,&#39;<span style="color: $1">&#39;,$texto) ;
$texto str_replace(&#39;[/color]&#39;,&#39;</span>&#39;,$texto) ;


Y nuestro código seria así
Código: [Seleccionar]
[color=008000]Texto verde[/color]

Desconectado mOrK

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 1.503
  • Karma: 43
  • :)
    • Ver Perfil
    • Sígueme en Twitter!
Re: Sistema de Noticias Simple - 3ª Parte
« Respuesta #13 en: 12 de Enero de 2007, 16:44:41 pm »
Envia la noticia, sale en la DB... pero no se ve en noticias.php :/
« Última modificación: 12 de Enero de 2007, 17:11:42 pm por mOrK »

Desconectado mOrK

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 1.503
  • Karma: 43
  • :)
    • Ver Perfil
    • Sígueme en Twitter!
Re: Sistema de Noticias Simple - 3ª Parte
« Respuesta #14 en: 12 de Enero de 2007, 17:23:51 pm »
Nada nada, ya me va.. :S

Ahora me da error en el panel de admin...

Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /home/.auggie/heavyland/heavyland.net/pruebas/NOTICIAS_phperos/admin_noticia.php on line 292

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/.auggie/heavyland/heavyland.net/pruebas/NOTICIAS_phperos/admin_noticia.php on line 292

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/.auggie/heavyland/heavyland.net/pruebas/NOTICIAS_phperos/admin_noticia.php on line 296
No hay ninguna noticia publicada
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/.auggie/heavyland/heavyland.net/pruebas/NOTICIAS_phperos/admin_noticia.php on line 392

292: $query = mysql_query("SELECT * FROM `noticias_phperos` ORDER BY `id` DESC"); //Se extraen las noticias en orden reciente

296: if (mysql_num_rows($query)) { // Se comprueba si hay alguna noticia publicada

392: mysql_free_result($noticia); //Se borran los datos usados

PD: la tabla que he creado yo es noticias_phperos