Funzione per le News "leggi tutto"

ciao
piccolo edit: per evitare di formare il link anche in stringhe che per errore di immissione siano del tipo
[MORE][/MORE]pape satan pape satan aleppe gridò pluto...
forese potresti fare questa correzione ulteriore
PHP:
<?php
function bbcode_more($stringa, $id){
    if(strpos("[/MORE]",$stringa)){
		$stringa=explode("[/MORE]",$stringa);
    	if(trim($stringa[0]) !="[MORE]"){//la stringa[0] è formata da [MORE] + qualcos'altro
			$dopo = trim(str_replace($stringa[0], " <a href='index.php?m=news_view&id=$id'>read more</a>", $stringa[0]));  
    		$prima=str_replace("[MORE]","",$stringa[0]);
    		//Ritorno il valore
    		return $prima."... ".$dopo;
		}else{//la stringa[0] è formata solo da [MORE]
			return "";
		}
	}else{
		return "";
	}
}
//......
?>
vedi tu se ti serve (e se funzia)
 
ha ora non vedo nemmeno la notizia .. idee?

grazie mille per gli aiuti e poi se risolviamo il problema posto il codice della bbcode.lib.inc.php.

grazie mille.
 
ti posto tutto il codice che ho scritto fin ora.

bbcode.lib.inc.php
PHP:
<?php
function bbcode($string)
{ 

	//No HTML
	$string = trim(str_replace("<", "&lt;", $string));
	$string = trim(str_replace(">", "&gt;", $string));
	
	//CHR 13
	$string = trim(str_replace(chr(13), "<br>;", $string));
	$string = trim(str_replace(";", "", $string));
	
	//BBCODE
	$string = trim(str_replace("[B]", "<b>", $string));
	$string = trim(str_replace("[/B]", "</b>", $string));
	$string = trim(str_replace("[I]", "<i>", $string));
	$string = trim(str_replace("[/I]", "</i>", $string));
	$string = trim(str_replace("[U]", "<u>", $string));
	$string = trim(str_replace("[/U]", "</u>", $string));
	$string = trim(str_replace("[HR]", "<hr>", $string));
	$string = trim(str_replace("[LI]", "<li>", $string));
	$string = trim(str_replace("[IMG=", "<img border='0' src='", $string));
	$string = trim(str_replace("[/IMG]", "'>", $string)); 
	$string = trim(str_replace("[URL=", "<a href='", $string));
	$string = trim(str_replace("[/URL]", "</a>", $string));
	$string = trim(str_replace("[ALIGN=left]", "<div align='left'>", $string));
	$string = trim(str_replace("[ALIGN=center]", "<div align='center'>", $string));
	$string = trim(str_replace("[ALIGN=right]", "<div align='right'>", $string));
	$string = trim(str_replace("[/ALIGN]", "</div>", $string));
	$string = trim(str_replace("[EMAIL=", "<a href=mailto:", $string));
	$string = trim(str_replace("[/EMAIL]", "</a>", $string));
	$string = trim(str_replace("[COLOR=", "<font color=", $string));
	$string = trim(str_replace("[/COLOR]", "</font>", $string));

	return $string;
}
function bbcode_more($stringa, $id){
    if(strpos("[/MORE]",$stringa)){
        $stringa=explode("[/MORE]",$stringa);
        if(trim($stringa[0]) !="[MORE]"){//la stringa[0] è formata da [MORE] + qualcos'altro
            $dopo = trim(str_replace($stringa[0], " <a href='index.php?m=news_view&id=$id'>read more</a>", $stringa[0]));  
            $prima=str_replace("[MORE]","",$stringa[0]);
            //Ritorno il valore
            return $prima."... ".$dopo;
        }else{//la stringa[0] è formata solo da [MORE]
            return "";
        }
    }else{
        return "";
    }
} 

function bbcode_complete($string)
{ 

	//No HTML
	$string = trim(str_replace("<", "&lt;", $string));
	$string = trim(str_replace(">", "&gt;", $string));
	
	//CHR 13
	$string = trim(str_replace(chr(13), "<br>;", $string));
	$string = trim(str_replace(";", "", $string));
	
	//BBCODE
	$string = trim(str_replace("[B]", "<b>", $string));
	$string = trim(str_replace("[/B]", "</b>", $string));
	$string = trim(str_replace("[I]", "<i>", $string));
	$string = trim(str_replace("[/I]", "</i>", $string));
	$string = trim(str_replace("[U]", "<u>", $string));
	$string = trim(str_replace("[/U]", "</u>", $string));
	$string = trim(str_replace("[HR]", "<hr>", $string));
	$string = trim(str_replace("[LI]", "<li>", $string));
	$string = trim(str_replace("[IMG=", "<img border='0' src='", $string));
	$string = trim(str_replace("[/IMG]", "'>", $string)); 
	$string = trim(str_replace("[URL=", "<a href='", $string));
	$string = trim(str_replace("[/URL]", "</a>", $string));
	$string = trim(str_replace("[ALIGN=left]", "<div align='left'>", $string));
	$string = trim(str_replace("[ALIGN=center]", "<div align='center'>", $string));
	$string = trim(str_replace("[ALIGN=right]", "<div align='right'>", $string));
	$string = trim(str_replace("[/ALIGN]", "</div>", $string));
	$string = trim(str_replace("[EMAIL=", "<a href=mailto:", $string));
	$string = trim(str_replace("[/EMAIL]", "</a>", $string));
	$string = trim(str_replace("[COLOR=", "<font color=", $string));
	$string = trim(str_replace("[/COLOR]", "</font>", $string));
	$string = trim(str_replace("[MORE]", "", $string));
    $string = trim(str_replace("[/MORE]", "", $string));

	//Ritorno il valore
	return $string;
}
?>

news:

PHP:
<div class="post">
			<p class="title"><?php echo $row["title"]; ?></p>
			<div class="entry">
			<p><?php echo bbcode_more(bbcode($row['news']), $row['id']); ?></p>
			<p class="meta"><?php echo "Pubblicato:&nbsp;".show_data($row["data"])."&nbsp;";	?>
			<?php echo "Sezione:&nbsp;".$row["_cat"]."&nbsp;";	?>&nbsp;&nbsp;Da: <?php echo $row["_user"]; ?></p>
			</div>
		</div>


news_view:
PHP:
<div class="post">
			<p class="title"><?php echo $row["title"]; ?></p>
			<div class="entry">
			<p><?php echo bbcode_complete($row['news']); ?></p>
			<p class="meta"><?php echo "Pubblicato:&nbsp;".show_data($row["data"])."&nbsp;";	?>
			<?php echo "Sezione:&nbsp;".$row["_cat"]."&nbsp;";	?>&nbsp;&nbsp;Da: <?php echo $row["_user"]; ?></p>
			</div>
		</div>

soluzioni ??

grazie mille.
 
Ultima modifica di un moderatore:
scusate, ma non riesco ad formattare il codice qui nel forum..

il forum dopo la bbcode lib,
c'è il codice delle news come le utilizzo ..

ma non so come mai me lo mette insieme alla libreria.

buona notte.
saluti,
luigi
 
ciao
avevo fatto un paio di errori nella bbcode_more($stringa, $id), uno di sintassi e uno di logica.
ho similato il tutto e sembra funzionare, prova a parte lo script (poi se vuoi togli i commenti)
PHP:
<?php
function bbcode($string)
{ 
    //No HTML
    $string = trim(str_replace("<", "&lt;", $string));
    $string = trim(str_replace(">", "&gt;", $string));
    //CHR 13
    $string = trim(str_replace(chr(13), "<br>;", $string));
    $string = trim(str_replace(";", "", $string));
    //BBCODE
    $string = trim(str_replace("[B]", "<b>", $string));
    $string = trim(str_replace("[/B]", "</b>", $string));
    $string = trim(str_replace("[I]", "<i>", $string));
    $string = trim(str_replace("[/I]", "</i>", $string));
    $string = trim(str_replace("[U]", "<u>", $string));
    $string = trim(str_replace("[/U]", "</u>", $string));
    $string = trim(str_replace("[HR]", "<hr>", $string));
    $string = trim(str_replace("[LI]", "<li>", $string));
    $string = trim(str_replace("[IMG=", "<img border='0' src='", $string));
    $string = trim(str_replace("[/IMG]", "'>", $string)); 
    $string = trim(str_replace("[URL=", "<a href='", $string));
    $string = trim(str_replace("[/URL]", "</a>", $string));
    $string = trim(str_replace("[ALIGN=left]", "<div align='left'>", $string));
    $string = trim(str_replace("[ALIGN=center]", "<div align='center'>", $string));
    $string = trim(str_replace("[ALIGN=right]", "<div align='right'>", $string));
    $string = trim(str_replace("[/ALIGN]", "</div>", $string));
    $string = trim(str_replace("[EMAIL=", "<a href=mailto:", $string));
    $string = trim(str_replace("[/EMAIL]", "</a>", $string));
    $string = trim(str_replace("[COLOR=", "<font color=", $string));
    $string = trim(str_replace("[/COLOR]", "</font>", $string));
    return $string;
}
function bbcode_more($stringa, $id){
    //var_dump(strpos("[/MORE]",$stringa)); echo " strpos<br>";
	//var_dump(strpos($stringa,"[/MORE]")); echo " strpos<br>";
	//if(strpos("[/MORE]",$stringa)){//invertito 
	if(strpos($stringa,"[/MORE]")){
        $str=explode("[/MORE]",$stringa);
        if(trim($str[0]) !="[MORE]"){//la stringa[0] è formata da [MORE] + qualcos'altro
            $dopo = trim(str_replace($str[0], " <a href='index.php?m=news_view&id=$id'>read more</a>", $str[0]));  
            $prima=str_replace("[MORE]","",$str[0]);
            //Ritorno il valore
            return $prima."... ".$dopo;
        }else{//la stringa[0] è formata solo da [MORE]
            $stringa=str_replace("[MORE]","",$stringa);
			$stringa=str_replace("[/MORE]","",$stringa);
			return $stringa;
        }
    }else{
        return $stringa;//se non c'è [MORE] deve tornare la stringa
    }
} 
function bbcode_complete($string)
{ 
    //No HTML
    $string = trim(str_replace("<", "&lt;", $string));
    $string = trim(str_replace(">", "&gt;", $string));
    //CHR 13
    $string = trim(str_replace(chr(13), "<br>;", $string));
    $string = trim(str_replace(";", "", $string));
    //BBCODE
    $string = trim(str_replace("[B]", "<b>", $string));
    $string = trim(str_replace("[/B]", "</b>", $string));
    $string = trim(str_replace("[I]", "<i>", $string));
    $string = trim(str_replace("[/I]", "</i>", $string));
    $string = trim(str_replace("[U]", "<u>", $string));
    $string = trim(str_replace("[/U]", "</u>", $string));
    $string = trim(str_replace("[HR]", "<hr>", $string));
    $string = trim(str_replace("[LI]", "<li>", $string));
    $string = trim(str_replace("[IMG=", "<img border='0' src='", $string));
    $string = trim(str_replace("[/IMG]", "'>", $string)); 
    $string = trim(str_replace("[URL=", "<a href='", $string));
    $string = trim(str_replace("[/URL]", "</a>", $string));
    $string = trim(str_replace("[ALIGN=left]", "<div align='left'>", $string));
    $string = trim(str_replace("[ALIGN=center]", "<div align='center'>", $string));
    $string = trim(str_replace("[ALIGN=right]", "<div align='right'>", $string));
    $string = trim(str_replace("[/ALIGN]", "</div>", $string));
    $string = trim(str_replace("[EMAIL=", "<a href=mailto:", $string));
    $string = trim(str_replace("[/EMAIL]", "</a>", $string));
    $string = trim(str_replace("[COLOR=", "<font color=", $string));
    $string = trim(str_replace("[/COLOR]", "</font>", $string));
	$string = trim(str_replace("[MORE]", "", $string));
    $string = trim(str_replace("[/MORE]", "", $string));
    //Ritorno il valore
    return $string;
}
//---------------
$row[1]="[MORE]nel [B]mezzo[/B] di[/MORE] camin di nostra vita";
$row[2]="mi ritrovai in ina selva oscura che [I]la [/I]diritta via era smarrita";
$row[3]="pape satan pape satan[MORE] aleppe grido[/MORE] pluto [U]con la voce chioccia[/U]";
$row[4]="[MORE][/MORE]voci alte e fioce e suon di man con elle";
//originali
foreach($row as $ch => $val){
	 echo "<p>$ch) $val</p>";
}
echo "<hr>";
//prova  read more
foreach($row as $ch => $val){
	 echo "<p>".bbcode_more(bbcode($val), $ch)."</p>";
}
echo "<hr>";
//simulazione news completa
foreach($row as $ch => $val){
	 echo "<p>$ch) ".bbcode_complete($val)."</p>";
}
?>
 
ciao
mi ero dimenticato disegnalarti che la bbcode_complete($string) invece di riscriverla tutta potresti fare
PHP:
<?php
//.....
function bbcode_complete($string)
{ 
    $string = bbcode($string);//richiami la funzione bbcode
    $string = trim(str_replace("[MORE]", "", $string));
    $string = trim(str_replace("[/MORE]", "", $string));
    //Ritorno il valore
    return $string;
}
//.....
?>
in questo modo se devi modificare/aggiungere bbcode o qualche altro tag lo fai una volta sola e risparmi spazio
 
ok, funziona mi è voluto capire come funzionava..però funziona..
allego tutto:

PHP:
<?php
function bbcode($string)
{ 
    //No HTML
    $string = trim(str_replace("<", "&lt;", $string));
    $string = trim(str_replace(">", "&gt;", $string));
    //CHR 13
    $string = trim(str_replace(chr(13), "<br>;", $string));
    $string = trim(str_replace(";", "", $string));
    //BBCODE
    $string = trim(str_replace("[B]", "<b>", $string));
    $string = trim(str_replace("[/B]", "</b>", $string));
    $string = trim(str_replace("[I]", "<i>", $string));
    $string = trim(str_replace("[/I]", "</i>", $string));
    $string = trim(str_replace("[U]", "<u>", $string));
    $string = trim(str_replace("[/U]", "</u>", $string));
    $string = trim(str_replace("[HR]", "<hr>", $string));
    $string = trim(str_replace("[LI]", "<li>", $string));
    $string = trim(str_replace("[IMG=", "<img border='0' src='", $string));
    $string = trim(str_replace("[/IMG]", "'>", $string)); 
    $string = trim(str_replace("[URL=", "<a href='", $string));
    $string = trim(str_replace("[/URL]", "</a>", $string));
    $string = trim(str_replace("[ALIGN=left]", "<div align='left'>", $string));
    $string = trim(str_replace("[ALIGN=center]", "<div align='center'>", $string));
    $string = trim(str_replace("[ALIGN=right]", "<div align='right'>", $string));
    $string = trim(str_replace("[/ALIGN]", "</div>", $string));
    $string = trim(str_replace("[EMAIL=", "<a href=mailto:", $string));
    $string = trim(str_replace("[/EMAIL]", "</a>", $string));
    $string = trim(str_replace("[COLOR=", "<font color=", $string));
    $string = trim(str_replace("[/COLOR]", "</font>", $string));
    return $string;
}
function bbcode_more($stringa, $id){
    //var_dump(strpos("[/MORE]",$stringa)); echo " strpos<br>";
    //var_dump(strpos($stringa,"[/MORE]")); echo " strpos<br>";
    //if(strpos("[/MORE]",$stringa)){//invertito 
    if(strpos($stringa,"[/MORE]")){
        $str=explode("[/MORE]",$stringa);
        if(trim($str[0]) !="[MORE]"){//la stringa[0] è formata da [MORE] + qualcos'altro
            $dopo = trim(str_replace($str[0], " <a href='index.php?m=news_view&id=$id'>read more</a>", $str[0]));  
            $prima=str_replace("[MORE]","",$str[0]);
            //Ritorno il valore
            return $prima."... ".$dopo;
        }else{//la stringa[0] è formata solo da [MORE]
            $stringa=str_replace("[MORE]","",$stringa);
            $stringa=str_replace("[/MORE]","",$stringa);
            return $stringa;
        }
    }else{
        return $stringa;//se non c'è [MORE] deve tornare la stringa
    }
} 
function bbcode_complete($string)
{ 
    $string = bbcode($string);//richiami la funzione bbcode 
    $string = trim(str_replace("[MORE]", "", $string));
    $string = trim(str_replace("[/MORE]", "", $string));
    //Ritorno il valore
    return $string;
}
?>

grazie mille e vado avanti con il lavoro.

ti ringrazio molto.
 
salve, ri apro questo topic per aggiornarvi il bbcode ecco il codice che lo preso in un tutorial di un blog inglese.
seguite tutta la discussione e cambiate il primo bbcode ($texT), con quello nuovo che vi ho messo qui.

saluti.
luigi.
PHP:
<?php
function bbcode($text)
{ 

  $bbcode = array("<", ">",
                "[list]", "[*]", "[/list]", 
                "[img]", "[/img]", 
                "[b]", "[/b]", 
                "[u]", "[/u]", 
                "[i]", "[/i]",
                '[color="', "[/color]",
                "[size=\"", "[/size]",
                '[url="', "[/url]",
                "[mail=\"", "[/mail]",
                "[code]", "[/code]",
                "[quote]", "[/quote]",
                '"]');
  $htmlcode = array("&lt;", "&gt;",
                "<ul>", "<li>", "</ul>", 
                "<img src=\"", "\">", 
                "<b>", "</b>", 
                "<u>", "</u>", 
                "<i>", "</i>",
                "<span style=\"color:", "</span>",
                "<span style=\"font-size:", "</span>",
                '<a href="', "</a>",
                "<a href=\"mailto:", "</a>",
                "<code>", "</code>",
                "<table width=100% bgcolor=lightgray><tr><td bgcolor=white>", "</td></tr></table>",
                '">');
  $newtext = str_replace($bbcode, $htmlcode, $text);
  $newtext = nl2br($newtext);//second pass
  return $newtext;
}	



function bbcode_more($stringa, $id){
    //var_dump(strpos("[/MORE]",$stringa)); echo " strpos<br>";
    //var_dump(strpos($stringa,"[/MORE]")); echo " strpos<br>";
    //if(strpos("[/MORE]",$stringa)){//invertito 
    if(strpos($stringa,"[/MORE]")){
        $str=explode("[/MORE]",$stringa);
        if(trim($str[0]) !="[MORE]"){//la stringa[0] è formata da [MORE] + qualcos'altro
            $dopo = trim(str_replace($str[0], "<br><br><p class='links'><a href='index.php?m=news_view&id=$id' class='more'>Leggi Tutto</a></p>", $str[0]));  
            $prima=str_replace("[MORE]","",$str[0]);
            //Ritorno il valore
            return $prima."... ".$dopo;
        }else{//la stringa[0] è formata solo da [MORE]
            $stringa=str_replace("[MORE]","",$stringa);
            $stringa=str_replace("[/MORE]","",$stringa);
            return $stringa;
        }
    }else{
        return $stringa;//se non c'è [MORE] deve tornare la stringa
    }
} 
function bbcode_complete($string)
{ 
    $string = bbcode($string);//richiami la funzione bbcode 
    $string = trim(str_replace("[MORE]", "", $string));
    $string = trim(str_replace("[/MORE]", "", $string));
    //Ritorno il valore
    return $string;
}
?>

lo preso da questo file txt trovato tramite google:

PHP:
<?php

// A simple FAST parser to convert BBCode to HTML
// Trade-in more restrictive grammar for speed and simplicty
//
// Syntax Sample:
// --------------
// [img]http://elouai.com/images/star.gif[/img]
// [url="http://elouai.com"]eLouai[/url]
// [mail="[email protected]"]Webmaster[/mail]
// [size="25"]HUGE[/size]
// [color="red"]RED[/color]
// [b]bold[/b]
// [i]italic[/i]
// [u]underline[/u]
// [list][*]item[*]item[*]item[/list]
// [code]value="123";[/code]
// [quote]John said yadda yadda yadda[/quote]
//
// Usage:
// ------
// <?php include 'bb2html.php'; ?>
// <?php $htmltext = bb2html($bbtext); ?>
//
// (please do not remove credit)
// author: Louai Munajim
// website: [url]http://elouai.com[/url]
// date: 2004/Apr/18


function bb2html($text)
{
  $bbcode = array("<", ">",
                "[list]", "[*]", "[/list]", 
                "[img]", "[/img]", 
                "[b]", "[/b]", 
                "[u]", "[/u]", 
                "[i]", "[/i]",
                '[color="', "[/color]",
                "[size=\"", "[/size]",
                '[url="', "[/url]",
                "[mail=\"", "[/mail]",
                "[code]", "[/code]",
                "[quote]", "[/quote]",
                '"]');
  $htmlcode = array("&lt;", "&gt;",
                "<ul>", "<li>", "</ul>", 
                "<img src=\"", "\">", 
                "<b>", "</b>", 
                "<u>", "</u>", 
                "<i>", "</i>",
                "<span style=\"color:", "</span>",
                "<span style=\"font-size:", "</span>",
                '<a href="', "</a>",
                "<a href=\"mailto:", "</a>",
                "<code>", "</code>",
                "<table width=100% bgcolor=lightgray><tr><td bgcolor=white>", "</td></tr></table>",
                '">');
  $newtext = str_replace($bbcode, $htmlcode, $text);
  $newtext = nl2br($newtext);//second pass
  return $newtext;
}
?>
 

Discussioni simili