Funzione per le News "leggi tutto"

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
Massa, Italy
Salve, sto leggendo questo tutorial:
http://programming-in-php.blogspot.it/2009/10/function-to-show-read-more-link-in-php.html

ora chiedo è possibile farlo con un bbcode che posso decidere io ti far visualizzare un tot di lettere e far vedere i link "leggi tutto", avendo solo il
campo nel database "news" in formato longtext.?

come posso fare che io posso decidere di far vedere "leggi tutto" o viceversa"?.

grazie mille.

Ecco il codice chi non vuole andare nel sito citato.

utils.php
PHP:
    <?php  
    //function to truncate text and show read more link  
    function truncate($mytext,$link,$var,$id) {  
    //Number of characters to show  
    $chars = 25;  
    $mytext = substr($mytext,0,$chars);  
    $mytext = substr($mytext,0,strrpos($mytext,' '));  
    $mytext = $mytext." <a href='$link?$var=$id'>read more...</a>";  
    return $mytext;  
    }  
    ?>
example.php
PHP:
    <?php  
    include "connect.php";  
    $sql = "SELECT * FROM articles";  
    $result = mysql_query($sql);  
    while($row = mysql_fetch_array($result))  
    {  
    echo "\n";  
    echo truncate($row['article_text'],"article.php","article_id",$row['article_id']);  
    }  
      
    //function to truncate text and show read more link  
    function truncate($mytext,$link,$var,$id) {  
    //Number of characters to show  
    $chars = 25;  
    $mytext = substr($mytext,0,$chars);  
    $mytext = substr($mytext,0,strrpos($mytext,' '));  
    $mytext = $mytext." <a href='$link?$var=$id'>read more...</a>";  
    return $mytext;  
    }  
    ?>
 
nessuno??
io per il mio bbcode utilizzo questo codice:
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("[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("]", "'>", $string));
	
	//Ritorno il valore
	return $string;
}
?>

come posso aggiungerlo qui ?

grazie mille.
buona serata.
 
ho fatto ma non so come posso inserire quei valori nel bbcode:
PHP:
$string = trim(str_replace("[MORE", "<a href=''>read more...</a>", $string));

idee?

grazie mille.
 
ciao, non so cosa intendi la stringa.. ma io la uso cosi:

PHP:
<div class="post">
			<p class="title"><?php echo $row["title"]; ?></p>
			<div class="entry">
			<p><?php echo bbcode($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>

prendo il testo tramite il database.

ti ringrazio aspetto tanto non ho fretta.

Buona giornata.
 
ciao
intendevo questo es. tu hai in $row['news']
nel mezzocamindi ecc...
tramite la funzione bbcode() la trasformi in
nel mezzo<b>camin</b>di ecc...
quello che volevo sapere come è la stringa tra [MORE e ]

[MORE=pinco.php?pallo=37] ?
 
ciao
si circa, ma dovresti anche indicarmi come è messo il bbc
Esempio
-----------------
L'auto nuova e di colore...
[MORE]
L'auto nuova e di colore rossa.
[/MORE]

il testo che e sopra a [MORE] viene visualizzato e poi un per vedere tutto deve cliccare sul link "leggi tutto"

vorrei fare cosi.

hai delle idee?
grazie mille.
 
ciao
forse una soluzione, penso però che tu debba fare una funzione in più e trattare [MORE] per conto suo
sono partito da presupposto che tu da una stringa tipo
[MORE]nel mezzo di camin[/MORE] di nostra vita mi ritrovai per una selva oscura
voglia ottenere
nel mezzo di camin... read more
quindi proverei così
PHP:
<?php
function bbcode_more($stringa, $id){
	$stringa=explode("[/MORE]",$stringa);
	$dopo = trim(str_replace($stringa[0], " <a href='index.php?m=news_view&id=$id'>read more</a>", $stringa[0]));  
	var_dump($stringa[0]);echo "<br>";
	$prima=str_replace("[MORE]","",$stringa[0]);
	//Ritorno il valore
    return $prima."... ".$dopo;
}
//***test*****
$row['id']="37";
$row['news']="[MORE]nel mezzo di camin[/MORE] di nostra vita mi ritrovai per una selva oscura";
echo "da db= ".$row['news']."<br />";
echo bbcode_more($row['news'], $row['id']);
?>

se non va bene posta, cerco di trovare un'altra soluzione
 
ho provato e funziona anche con l'aggiunta del mio codice.

l'unico che ora nella pagina news_view . mi visualizza anche i [MORE] nel testo che scrivo.

esempio: index.php?m=news_view&id=2
La notizia di prova è
[MORE]Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque id adipiscing lacus. Nulla ornare lorem id metus dapibus consequat. In gravida lacus eget elit gravida a placerat magna placerat. Aliquam erat volutpat. Praesent nisi neque, vehicula ut sagittis eu, tristique sed nibh. Phasellus id quam eros, in tincidunt lectus. Mauris interdum ultricies neque, porttitor fermentum neque luctus eget.[/MORE]

con il codice bbcode($row["news"])
e l'altra parte da dove si visualizzano le notizie:
PHP:
<?php echo bbcode_more(bbcode($row['news']), $row['id']); ?>

idee?

grazie mille.
 
ciao
hai ragione e forse ti conviene dividere ancora il problema.
immagino che ti abbia una pagina dove avrai l'elenco di tutte le news
pinco... read more
pallo... read more
ecc...
da questa tramite il link read more riinvii alla pagina index.php dove fai vedere tutta la news, giusto?
se è cosi:
nella pagina dove postri l'elenco prima tratti la stringa con la funzione function bbcode($string) poi con quella che ti ho postato function bbcode_more($stringa, $id)
cosi ottieni il link
nella pagina index.php, dove immagino che in funzione dell'id riestrai tutta la news, fai una funzione simile alla bbcode($string), chiamata es.
bbcode_completa($string) in cui aggiungi in fondo

PHP:
<?php
function bbcode_completa($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)); 
	//ecc.........
	$string = trim(str_replace("[MORE]", "", $string));//qui togli i more (da mettere prima di replace ] )
	$string = trim(str_replace("[/MORE]", "", $string));
    $string = trim(str_replace("]", "'>", $string));
    
    //Ritorno il valore
    return $string;
}
//......
?>
questo se non ho capito male
 
ciao
dimenticavo se è giusto quanto detto nel post precedente
se non vuoi scrivere due voelte la funzione puoi modificarla così
PHP:
<?php
function bbcode($string;$dove_sono)
{
    $dove_sono=basename($_SERVER['PHP_SELF']);
	//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)); 
    //ecc.........
    if($dove_sono="index.php"){
		$string = trim(str_replace("[MORE]", "", $string));//qui togli i more (da mettere prima di replace ] )
    	$string = trim(str_replace("[/MORE]", "", $string));
	}
    $string = trim(str_replace("]", "'>", $string));
	
    //Ritorno il valore
    return $string;
}
//......
echo bbcode($riga['news'];basename($_SERVER['PHP_SELF']));
?>
 
ho provato la prima soluzione creando un'altra funzione uguale alla prima ma matenendo uguali le cose e mettendo i replace ai more...

l'unico problema e che se scrivo un notizia senza usare il tag more .. viene da solo anche se non lo scritto il tag more..

idee?

grazie mille.
 
ciao
l'unico problema e che se scrivo un notizia senza usare il tag more .. viene da solo anche se non lo scritto il tag more..
:confused:
cosa intendi?
se nel db hai
nel mezzo di camin di nosta vita
salta fuori
[MORE]nel mezzo di camin di nosta vita[/MORE]
cioè si attacca un MORE che non c'è?
guarda che non dovrebbe entrarci nulla la funzione/funzioni fatte in quanto sostituiscono (srt_replace) [MORE] con qualcos'altro, ma se non c'è mica l'aggiungono.
 
no, viene solo i link che non ci deve stare nelle notizie senza il [more]

per il resto funziona... solo che quando inserisco alcune notizie senza nessun more mi viene visualizzata tutta la notizia in più i link.
come posso fare per non venire questa cosa?

grazie mille e buona giornata.
 
ciao
ho capito, se hai delle news senza [MORE].....[/MORE] ti viene comunque read more e tu non vuoi che venga.
stiu usando anche la funzione che avevo chiamato bbcode_more($stringa, $id)?
se si aggiungi
PHP:
<?php
function bbcode_more($stringa, $id){
    if(strpos("[/MORE]",$stringa)){//se non trovata FALSE
	$stringa=explode("[/MORE]",$stringa);
    $dopo = trim(str_replace($stringa[0], " <a href='index.php?m=news_view&id=$id'>read more</a>", $stringa[0]));  
    var_dump($stringa[0]);echo "<br>";
    $prima=str_replace("[MORE]","",$stringa[0]);
    //Ritorno il valore
    return $prima."... ".$dopo;
	}else{
		return "";//quindi non fccio il link
	}
}
//......
?>

p.s.
meglio cercare [/MORE] invece di [MORE] in quanto sicuramente [/MORE] non è all'inizio della stringa (pos =0) per cui si evita che comunque lo 0 venga interpretato come FALSE
 

Discussioni simili