Zeilenlänge begrenzen - Brauche eure Hilfe !

userjules

Mitglied
Hallo zusammen,

ich brauche dringend eure Hilfe bei der Umsetzung folgender Aufgabenstellung.
In einem kleinen Fenster auf der Startseite möchte ich die Schlagzeilen der News ausgeben, diese aber - um Umbrüche zu vermeiden - auf eine bestimmte Zeilenlänge begrenzen.
Dazu habe ich eine Funktion gefunden, die ich nun in den bestehenden Code integrieren möchte. Dabei gibt's ein Problem.

Solange die Ausgabe folgendermaßen erfolgt (ohne die Begrenzung) ist es kein Problem.
PHP:
<?php
    // Verbindung zur Datenbank herstellen
    require_once "dbconnect.php";

    // Tabelle erneut darstellen
    // SQL-Anfrage: Ergebnis ist eine vorhandene Tabelle
    $sql="SELECT ID, Ueberschrift FROM news ORDER BY ID DESC LIMIT 6";

    // Anfrage ausführen
    $result=mysql_query($sql) or exit("Fehler im SQL-Kommando: $sql");

    // Tabelle in HTML darstellen
    echo "<table width='100%' class='topnewstable' cellspacing='0px' border=\"0\">\n";
    while ($row = mysql_fetch_assoc($result)) {
          echo "<tr>";
          echo "  <td><p><a href='news.php#{$row['ID']}'>{$row['Ueberschrift']}</a></p></td>";
          echo "</tr>";
    }  
    echo "</table>\n";
    ?>

Sobald aber die Funktion zum kürzen ins Spiel kommt, bekomme ich nur noch einen Eintrag ausgegeben. Der Code hierzu sieht so aus:
PHP:
<?php
    // Verbindung zur Datenbank herstellen
    require_once "dbconnect.php";

    // Tabelle erneut darstellen
    // SQL-Anfrage: Ergebnis ist eine vorhandene Tabelle
    $sql="SELECT ID, Ueberschrift FROM news ORDER BY ID DESC LIMIT 6";

    // Anfrage ausführen
    $result=mysql_query($sql) or exit("Fehler im SQL-Kommando: $sql"); 
	
    // Tabelle in HTML darstellen
    echo "<table width='100%' class='topnewstable' cellspacing='0px' border=\"0\">\n";
    while ($row = mysql_fetch_assoc($result)) 
	
	// Zeilenlänge beschränken
	$description = "{$row['Ueberschrift']} Kurzer Text um die Funktion zu testen ";
	
	function myTruncate2($string, $limit, $break=" ", $pad="...") { 
	// nicht kuerzen wenn Zeilenlaenge kuerzer als $limit 
	if(strlen($string) <= $limit) return $string;
	
	$string = substr($string, 0, $limit);
	if(false !== ($breakpoint = strrpos($string, $break))) {
	$string = substr($string, 0, $breakpoint);
	}
	 
	return $string . $pad;
	} 
	
	$shortdesc = myTruncate2($description, 30);
	{
	// Ende der Funktion Zeilenlaenge beschraenken

          echo "<tr>";
          echo "  <td><p><a href='news.php#{$row['ID']}'>$shortdesc</a></p></td>";
          echo "</tr>";
    }  
    echo "</table>\n";
    ?>
Abgesehen davon das die absteigende Sortierung nun ignoriert wird, wird wie bereits erwähnt nur noch der erste Eintrag aus der Tabelle ausgegeben. Die Funktion arbeitet im übrigen einwandfrei. Ausgegeben wird der Text Testnachricht 6 Kurzer Text.... Testnachricht 6 entspricht dem Eintrag in der Tabelle, aber wo bleiben die anderen 5 Testeinträge ?

Ich kann mir ungefähr vorstellen, dass ich die Variable {$row['Ueberschrift']} entweder an anderer Stelle ansprechen, oder irgendwie in eine while-Schleife integrieren muss damits klappt. Aber wie ? Bin dankbar für jede Hilfe !

Vielen Dank im Voraus ******
 
Hallo,

nach while ($row = mysql_fetch_assoc($result)) fehlt die Klammer auf { :)
Die Funktion myTruncate2 kannst du übrigens auch außerhalb der while Schleife deklarieren.
 
Zuletzt bearbeitet:
Und warum nicht:

SQL:
SELECT ID, SUBSTR(Ueberschrift, 1, 30) AS Ueberschrift FROM news ORDER BY ID DESC LIMIT 6
 
Super ! War kurz abwesend. Werde mich nun gleich der Umsetzung eurer Vorschläge widmen und melde mich dann mit Feedback zurück. Danke soweit !
 
@vandamp
Damit bekomme ich ne Fehlermeldung. Unexpected $end on line 95. Zeile 95 ist aber </body>. Wo muss ich die Klammer denn dann wieder schliessen ?

@tombe
Das ist schon ziemlich cool ! Funktioniert, aber bricht auch Worte mittendrin ab - eben nach genau 30 Zeichen. Der Vorteil der Funktion myTruncate ist eben, dass genau das nicht geschieht.
Ich könnte quasi damit leben, würde mich aber sehr freuen die Funktion doch noch zum funktionieren zu bekommen.
 
Zuletzt bearbeitet:
so sollte es klappen
PHP:
<?php
    // Verbindung zur Datenbank herstellen
    require_once "dbconnect.php";
function myTruncate2($string, $limit, $break=" ", $pad="...") { 
    // nicht kuerzen wenn Zeilenlaenge kuerzer als $limit 
    if(strlen($string) <= $limit) return $string;
    
    $string = substr($string, 0, $limit);
    if(false !== ($breakpoint = strrpos($string, $break))) {
    $string = substr($string, 0, $breakpoint);
	}
return $string . $pad;
 } 	
    // Tabelle erneut darstellen
    // SQL-Anfrage: Ergebnis ist eine vorhandene Tabelle
    $sql="SELECT ID, Ueberschrift FROM news ORDER BY ID DESC LIMIT 6";

    // Anfrage ausführen
    $result=mysql_query($sql) or exit("Fehler im SQL-Kommando: $sql"); 
    
    // Tabelle in HTML darstellen
    echo "<table width='100%' class='topnewstable' cellspacing='0px' border=\"0\">\n";
    while ($row = mysql_fetch_assoc($result)) 
    {
    // Zeilenlänge beschränken
    $description = "{$row['Ueberschrift']} Kurzer Text um die Funktion zu testen ";
    $shortdesc = myTruncate2($description, 30);
    // Ende der Funktion Zeilenlaenge beschraenken

          echo "<tr>";
          echo "  <td><p><a href='news.php#{$row['ID']}'>$shortdesc</a></p></td>";
          echo "</tr>";
    }  
    echo "</table>\n";
    ?>
 
Supergeil ! Das funktioniert jetzt einwandfrei ! Vielen, vielen Dank nochmal an euch beide ! Die Funktion kann ich also außerhalb der while-Schleife deklarieren, nur die Variablen müssen innerhalb festgelegt werden !?
 
Zurück