Problema per creare anteprima dei post da un db

Jakub Lemiszewski

Utente Attivo
5 Dic 2013
119
1
0
Salve, ho creato un codice per mostrare dei post, ma vorrei che nella lista dei titoli potessi vedere solo un'anteprima di qualche parola senza che le parole stesse vengano tagliate. Per darvi un iea come in un blog quando si ha un'articolo e se lo vuoi leggere tutto in fondo ce leggi altro o continua a leggere, vedi solo una parte dell'articolo un'anteprima. Nel codice seguente tutto funziona ma la parte che posto è relativa all'anteprima dei post ma mi mostra i post con tutto il testo e non l'anteprima. Mi piacerebbe ricevere aiuto per capire cosa sbaglio gia che sto imparando queste cose a scuola.
Grazie mille per l'aiuto.
Ecco il codice:
PHP:
function showAllTitles(Database $db){
	
	$out  = "<div class='articles_blog'>";
	$out .= "<h1>ARTICLES</h1>";
	$out .= "<ul id='articles_bl'>";
	//Get all Articles from db and shows all titles
	$allArticle = getAllArticles($db);
	foreach ($allArticle as $row) {
    //Must take all rows and output list -> titles??
	$id = $row->get("art_id");
	$date = $row->get("art_date");
	$article = $row->get("art_title");
	$txt = $row->get("art_articles");
	$date = preg_replace('/^(.{4})-(.{2})-(.{2})$/','$3-$2-$1', $date);
    $href = "index.php?page=blog&amp;show-article=$article";
    $out .=	"<li>";
    $out .=	"<a href='$href'>$article</a>&nbsp&nbsp";
    $out .= "<em>$date</em>";
    $out .= "<p class='prev_art'>";
    $out .= preview($txt, 10, $href);
    //$out .= substr($txt, 0, 30);
    /*$preview = new Preview();
    $preview->makePreview("$article");
    $out .= "$preview";*/
    $out .= "</p>";
    $out .= "<a href='index.php?page=blog&amp;show-article=$article'>Read more</a>";
    $out .= "</li>";
    }
    $out .= "</ul>";
    $out .= "</div>";
    $out .= "</section>";
	return $out;
	}
	//Get from DB all Articles
	function getAllArticles(Database $db) {
	$sql = "SELECT * FROM articles ORDER BY art_date DESC";
	$db->query($sql);
    //$sql = "SELECT art_title FROM articles";
	$table = $db->getData($sql);
    return $table;   
    }
    
	function showArticle(Database $db, $whichArticle) {
	$data = getArticle($db, $whichArticle);
	$title = $data->get("art_title");
	$author = $data->get("art_author");
	$article = $data->get("art_articles");
	$out  = "<div class='article_blg'>";	
	$out .= "<h1>Title:</h1><p>$title</p>";
	$out .= "<h2>Author:</h2><p>$author</p>";
	$out .= "<h3>Article:</h3><p>$article<br></p>";
	$out .= "</div>";
	
	return $out;
	}
	
	function getArticle(Database $db, $articles) {
    $fname = $db->escapeString($articles);
    $sql = "SELECT art_title, art_articles, art_author FROM articles WHERE art_title = '$fname'";
    $db->query($sql);
    $data = $db->getData($sql);
    $row = $data->getAt(0);
    return $row;
}

function preview($txt, $long, $final) {

		return (count($words = explode(' ', $txt)) > $long) ? implode(' ', array_slice($words, 0, $long)) . $final : $txt; //questo dovrebbe farmi l'anteprima??
		
}
 
Ciao, dovresti passare il link "read more" alla funzione preview(), per il resto è corretta
ho provato cosi
PHP:
<?php
$article = "test";
$txt = "
    Salve, ho creato un codice per mostrare dei post, ma vorrei che nella lista dei titoli potessi vedere solo 
    un'anteprima di qualche parola senza che le parole stesse vengano tagliate. Per darvi un iea come in un blog 
    quando si ha un'articolo e se lo vuoi leggere tutto in fondo ce leggi altro o continua a leggere, 
    vedi solo una parte dell'articolo un'anteprima. Nel codice seguente tutto funziona ma la parte che 
    posto è relativa all'anteprima dei post ma mi mostra i post con tutto il testo e non l'anteprima. 
    Mi piacerebbe ricevere aiuto per capire cosa sbaglio gia che sto imparando queste cose a scuola. 
    ";
$final = ".... <a href='index.php?page=blog&amp;show-article=$article'>Read more</a>";

echo preview($txt, 30, $final);

function preview($txt, $long, $final) {

    return (count($words = explode(' ', $txt)) > $long) ? implode(' ', array_slice($words, 0, $long)) . $final : $txt;
}

?>
 

Discussioni simili