Foros del Web » Programando para Internet » PHP »

[Aporte] Sistema de noticias con BBcodes incluidos

Estas en el tema de [Aporte] Sistema de noticias con BBcodes incluidos en el foro de PHP en Foros del Web. Bueno, ya que consegui acabar de editar y modificar el sistema de noticias, gracias a pateketrueke , gatorV y muchos mas. En si este sistema ...
  #1 (permalink)  
Antiguo 02/05/2009, 13:00
Avatar de fcdragons  
Fecha de Ingreso: agosto-2008
Ubicación: echo $_REQUEST['ubicacion'];
Mensajes: 474
Antigüedad: 15 años, 7 meses
Puntos: 13
Información [Aporte] Sistema de noticias con BBcodes incluidos

Bueno, ya que consegui acabar de editar y modificar el sistema de noticias, gracias a pateketrueke, gatorV y muchos mas.

En si este sistema es mas bien para que otros usuarios que no sean administradores escriban articulos, por eso los codigos html no funcionan y se verian <b> hola </b> En este ejemplo se verian los codigos y o funcionaria la negrita

Estan muchos codigos BB pero no esta el de [ img ]

Comencemos:
El primer paso es crear las tablas en la base de datos. Comencemos por las tablas de categorias llamadas sn_categorias
Código:
CREATE TABLE `sn_categorias` (
`cat_ID` int(11) NOT NULL auto_increment,
`catCategoria` varchar(100) NOT NULL,
PRIMARY KEY  (`cat_ID`)
) ENGINE=MyISAM;
Y ahora la de noticias llamada sn_noticias:
Código:
CREATE TABLE `sn_noticias` (
`not_ID` int(11) NOT NULL auto_increment,
`notTitulo` varchar(255) NOT NULL,
`notTexto` text NOT NULL,
`notCategoriaID` int(11) NOT NULL,
PRIMARY KEY  (`not_ID`)
) ENGINE=MyISAM;

Ahora creamos el archivo de conexion llamdo db-cnx.php
Código PHP:
<?php
$db_link 
mysql_connect('host mysql''usuario mysql''');
if(!
$db_link){
die(
'No se pudo conectar: ' mysql_error());
}
$db_selected mysql_select_db('nombre de la DB'$db_link);
if(!
$db_selected){
die(
'No se selecciono la BD: ' mysql_error());
}
?>


Ahora crearemos el archivo add-categoria.php
Código:
<?php
// incluimos el archivo de conexion
include ('db-cnx.php');
// recibimos el formulario
if(isset($_POST['enviar']) && $_POST['enviar'] == 'Enviar'){
// comprobamos que el formulario no envie campos vacios
if(!empty($_POST['catCategoria'])){
// creamos la variable y le asignamos el valor a insertar
$catCategoria = $_POST['catCategoria'];
// hacemos el INSERT en la BD
$sqlInsertCat = mysql_query("INSERT INTO sn_categorias (catCategoria)
VALUES ('$catCategoria')", $db_link)
or die(mysql_error());
// enviamos un mensaje de exito
echo "Los datos fueron gurdados correctamente";
}else{
// si el formulario viene vacio
// enviamos un mensaje de error
echo "Debe llenar el formulario";
}
}
?>
<!-- el formulario -->
<form name="categoria" action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
<p>
Nueva Categoría<br />
<input type="text" name="catCategoria" />
<input type="submit" name="enviar" value="Enviar" />
</p>
</form>

Ahora crearemos el archivo add-noticia.php que sera el que añada las noticias:
Código:
<?php
// incluimos el archivo de conexion
include ('db-cnx.php');
// recibimos el formulario
if(isset($_POST['enviar']) && $_POST['enviar'] == 'Enviar'){
// comprobamos que el formulario no envie campos vacios
if(!empty($_POST['notTitulo']) && $_POST['notTexto'] &&
$_POST['notCategoriaID']){
// creamos las variables y les asignamos los valores a insertar
$notTitulo = $_POST['notTitulo'];
$notTexto = $_POST['notTexto'];
$notCategoriaID = $_POST['notCategoriaID'];
$notTexto = htmlspecialchars($notTexto);
$notTitulo = htmlspecialchars($notTitulo);
// hacemos el INSERT en la BD
$sqlInsertNot = mysql_query("INSERT INTO sn_noticias
(notTitulo, notTexto, notCategoriaID)
VALUES ('$notTitulo', '$notTexto', '$notCategoriaID')",
$db_link) or die(mysql_error());
// enviamos un mensaje de exito
echo "Los datos fueron gurdados correctamente. <a href='/index.php'>Volver a la pagina principal</a>";
}else{
// si el formulario envia algun campo vacio
// enviamos un mensaje de error
echo "Debe llenar todos los campos del formulario";
}
}
?>
<!-- el formulario -->
<form name="noticia" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
<p>
T&iacute;tulo de la Noticia<br />
<input type="text" name="notTitulo" size="50" />
</p>
<p>
Texto de la Noticia<br />
<textarea name="notTexto" rows="10" cols="50"></textarea>
</p>
<p>
Categor&iacute;a<br />
<select name="notCategoriaID">
<option value="">Escoger de la Lista</option>
<?php
// asignamos una categoria a la noticia
// mediante un select
$sqlQueryCat = mysql_query("SELECT * FROM sn_categorias", $db_link)
or die(mysql_error());
// creamos un bucle while
// que nos muestre todas las categorias
// que tenemos guardadas en la BD
while($rowCat = mysql_fetch_array($sqlQueryCat)){
echo "<option value='$rowCat[cat_ID]'>$rowCat[catCategoria]</option>";
}
?>
</select>
</p>
<p>
<input type="submit" name="enviar" value="Enviar" />
</p>
</form>

Ahora crearemos la lista de las categorias que sera la que se muestre en el index vinculandolo con include()
A esta la llamaremos list-categorias.php
Código PHP:
<h1>Categorías...</h1>
<?php
$sqlQueryCat 
mysql_query("SELECT * FROM sn_categorias"$db_link)
or die(
mysql_error());
echo 
"<ul>";
while(
$rowCat mysql_fetch_array($sqlQueryCat)){
echo 
"<li>
<a href='?categoria=$rowCat[catCategoria]&id=$rowCat[cat_ID]'>
$rowCat[catCategoria]
</a>
</li>"
;
}
echo 
"</ul>";
?>


Ahora procedemos a crear la lista de las noticias. A esta la llamaremos list-noticia.php
Código PHP:
<?php 

function bbcodes ($text) { 
    
    
$finaltext eregi_replace("\\[url=([^\\[]*)\\]([^\\[]*)\\[/url\\]""<a target=\"_blank\" href=\"\\1\">\\2</a>"$text); 

    
    
$finaltext eregi_replace("\\[url\\]([^\\[]*)\\[/url\\]","<a target=\"_blank\" href=\"\\1\">\\1</a>",$finaltext); 

    
    while(
$bucle 5) { 
        
        
$finaltext eregi_replace("\\[u\\]([^\\[]*)\\[/u\\]","<u>\\1</u>"$finaltext); 

        
        
$finaltext eregi_replace("\\[i\\]([^\\[]*)\\[/i\\]","<em>\\1</em>"$finaltext); 

        
        
$finaltext eregi_replace("\\[b\\]([^\\[]*)\\[/b\\]","<strong>\\1</strong>"$finaltext); 

        
$bucle++; 
    } 

    
    
$finaltext eregi_replace("\\[center\\]([^\\[]*)\\[/center\\]","<center>\\1</center>"$finaltext); 

     
    
$finaltext eregi_replace("\\[cita\\]([^\\[]*)\\[/cita\\]","\n<div class=\"css_title\">Cita\n<div class=\"css\">\\1</div></div>"$finaltext); 
                                                      
    

     
    
$finaltext eregi_replace("\\[php\\]([^\\[]*)\\[/php\\]","\n<div class=\"css_title\">C&oacute;digo PHP\n<div class=\"css\">\\1</div></div>"$finaltext);

    
// Retorno como queda el bbcode. 
    
return $finaltext


function 
phpcojecolor ($php) {
        
// Remplaza los <br \> por lineas.
        
$php str_replace("<br />","\n",$php);

        
ob_start(); // Abirmos el OB
        
html_entity_decode($php);
        
highlight_string($php); // Tiramos el codigo coloreado
        
$cfinal ob_get_contents(); // COjo el codigo que tire despues de haber abierto el ob
        
ob_end_clean(); // Borro el ob para que no se vea en la web

        
$keycol=ini_get("highlight.keyword"); 
        
$manual="http://www.php.net/manual-lookup.php?lang=es&amp;pattern=";

        
$cfinal=preg_replace
            
'{([\w_]+)(\s*</font>)'
            
'(\s*<font\s+color="'.$keycol.'">\s*\()}m',  
            
'<a href="'.$manual.'$1" title="Ayuda en PHP.net sobre $1" target="_blank">$1</a>$2$3',
        
$cfinal); 

        return 
"\n<div class=\"css_title\">C&oacute;digo PHP:\n<div class=\"css\">".$cfinal."</div></div>"// Retorno el codigo PHP Coloreado
}
// Debes poner la siguiente clase en tu hoja de estilos o en su defecto en tu código html. 
// Estas clases es para que funciones lo de las citas y lo de mostrar codigo PHP :D 
// .css_title { 
//     margin: 10px 5px 10px 15px; 
//     font-size: 10px; 
//     width: 90%; 
//      
// } 
// .css { 
//     background: #DCDCDC;     
//     border: 1px solid #8FB1EE; 
//     border-left: 7px solid #8FB1EE; 
//     font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; 
//     font-size: 11px; 
//     color: #000000; 
//     padding: 5px; 
//     width: 90%; 
//     margin: 0px; 
// } 

?> 
<?php
// verificamos si se ha enviado
// alguna variable via GET
if(isset($_GET['id']) && $_GET['categoria']){
// asignamos los valores
// a las variables que usaremos
$cat_ID $_GET['id'];
$categoria $_GET['categoria'];
$clausula "WHERE notCategoriaID = '$cat_ID'";
// tambien armamos el titular de la pagina
$titulo "Noticias en la categoria $categoria";
}else{
// de lo contrario
// el titulo sera general
$titulo "Todas las noticias";
}
// armamos la consulta
$sqlQueryNot mysql_query("SELECT notTitulo, notTexto, not_ID FROM sn_noticias
$clausula"
$db_link)
or die(
mysql_error());
echo 
"<h1>$titulo</h1>";
// mostramos las noticias,
// otra vez usando un bucle while
while($rowNot mysql_fetch_array($sqlQueryNot)){
echo 
"<h1><a href='?noticia=$rowNot[notTitulo]&id=$rowNot[not_ID]'>$rowNot[notTitulo]</a></h1>";
echo 
"";
echo 
bbcodes(nl2br($rowNot['notTexto']));
}
?>



Ahora crearemos el archivo index.php que es donde nos apareceran todos los articulos.
Código:
<html>
<head>
<title>Sistema de NoticiasM</title>
</head>
<body>
<h1>Sistema de Noticias</h1>
<?php include('db-cnx.php'); ?>
<div style="float:left; width: 25%;">
<?php include('list-categoria.php'); ?>
</div>
<div style="float:right; width: 75%;">
<?php include('list-noticia.php'); ?>
</div>
</body>
</html>


Y este es el fin del tutorial pueden probar las cosas por aqui:
http://tutosyscripts.comyr.com/news/

Agradecimientos:
Tutorial sacado de: http://rogertm.bloggerscuba.com/
Codigo editado y añadido cosas: fcdragons, pateketrueke, gatorV y todos los usuarios que me ayudaron

Si consigo ponerle mas cosas editare el post y se las añadire ;)

Y como consegui hacer lo que queria decidi hacer el aporte :)

Espero que les guste

Demen Karma si les gusto, si hay algun error posteenlo aqui ;)
__________________
SumarioWeb
@sumarioweb
BasicNews

Última edición por fcdragons; 03/05/2009 a las 12:51
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 15:29.