Text nach X Zeichen kürzen [mehr]

Benutzer-42

abgemeldet
20 April 2006
22.497
1.328
Der Titel sagt es teils schon

Ich will Texte, zB aus der Datenbank auslesen, und diese nach X Zeichen (machen wir als Beispiel einfach 100) kürzen und drei Punkte und einen Link a la MEHR dranhängen, Bsp:

Beispiel schrieb:
bla blubb blaaa blaaaaaa ... [mehr]

wie lässt sich das sauber realisieren?
 
Sauber? Wenn du Smarty nutzt, einfach Modifikator truncate benutzen.

Sonst halt aus der DB auslesen und selber Hand anlegen, wenn der Text zu groß is.
 
Hi,

ich nutze für sowas folgende Funktion:
PHP:
function truncate_text($text, $length, $on_spacers = false)
{
	if (strlen($text) > $length)
	{
		if ($on_spacers)
		{
			$words = split(' ', $text);
			$new_text = '';
			$chunks = array();
			foreach ($words as $word)
			{
				if (strlen(implode(' ', $chunks) .' '. $word) < $length)
				{
					$chunks[] = $word;
				}
				else
				{
					$new_text .= implode(' ', $chunks) .'...';
					break;
				}
			}
			$text = $new_text;
		}
		else
		{
			$text = substr($text, 0, $length - 3) .'...';
		}
	}
	return $text;
}

Lässt sich sicher auch leicht um den Link "mehr" erweitern.

Edit: weil tH im Forum wohnt, wenn du nicht Smarty nutzt :D

Gruß
 
beim Select zusätzlich die Gesamtlänge ermittlen.
Code:
select text, length(text) as size from tabelle where ...

dann kannst du in php auf dieses Längenfeld zugreifen und den Link basteln wenn size > 100 ist....
 
@Hacki
nein, nutze nicht Smarty
will nur endlich mal Game-Fire komplett ummodeln, und dann wieder mal aktuell werden

@Rest
ok, ich schau mir das so mal an, wer noch Vorschläge hat, immer her damit

Code:
[LEFT]select text, length(text) as size from tabelle where ...[/LEFT]

da kann man dann ganz regulär per IF SIZE >100 ... arbeiten, oder?
was natürlich gerade bei NEWS bei mir besser ist, weil einige dann schon mal nur wenige Worte umfassen, so dass sich ein [MEHR] da sicher schlecht macht *g*
 
Ich machs immer so:
PHP:
$max_zeichen = 100;
if(strlen($text) > $max_zeichen)
{
	$text = substr($text,0,$max_zeichen). "...";
}
else
{
	$text= $text;
}
echo $text;
 
gut, werde ich mal versuchen
ist dringend notwendig, denn so, wie mein Portal derzeit dümpelt, so kann es nicht weitergehen
 
Ich machs immer so:
PHP:
/* ... */
else
{
    $text= $text;
}
Wasn das fürn Scheiß?! 8O
Wenn du nur Rechenleistung totschlagen willst, kannst du auch einfacher
PHP:
for(;;);
schreiben :LOL:

Es scheiden sich zwar an solchen Fragen die Geister, aber ich würde die Stringlänge erst in PHP anfassen.
 
Stimmt, den else könnte man rauslassen, aber ich habe ihn in meinem geschriebenen Code mal gebraucht, da noch anderes Zeug in der else war. In dem Fall reicht die If-Abfrage ;)
 
Hey Leute
Sollt ihr den armen Witti denn so verwirren??

Also, welche ist denn die beste und schonenste Version?
Da es in verschiedenen Versionen auf der Seite zum Einsatz kommen soll, und dann da doch einiges an Texten aus der DB gelesen und verarbeitet wird, sollte es schon schlicht, einfach und resourcensparend sein

wenn man bedenkt, dass diese Funktion zB auf der Indexseite für folgende Punkte zum Einsatz kommen sollte:

NEWS - die 2-4 aktuellsten (vielleicht sogar ein paar mehr, je nachPlatz)
TESTS - die 2-4 aktuellsten Tests halt
eventuell noch dann ein Part für Forenbeiträge oder so

und auf Unterseiten, wie zB dem Testportal, dann eben auch wieder die aktuellsten Tests
auf den Unterseiten dann zu den wichtigstens Konsolen / Herstellern auch wieder selbiges
 
Hey Leute
Sollt ihr den armen Witti denn so verwirren??

Also, welche ist denn die beste und schonenste Version?
Da es in verschiedenen Versionen auf der Seite zum Einsatz kommen soll, und dann da doch einiges an Texten aus der DB gelesen und verarbeitet wird, sollte es schon schlicht, einfach und resourcensparend sein

Kann man pauschal nicht sagen. Keiner weiss wohl wie PHP intern tickt. Ich würd vorschlagen ne Mischung aus der "select" Variante + ne eigene Funktion die als "Kürzungsmenge" eben die Anzahl an Zeichen überbehält.

Alternativ könntest ja auch gleich übers SELECT den gekürzten String abfragen. Oder "merkst" du ihn dir zwischen für z.B. ne AJAX Anwendung?? Oder machst du beim Klick auf mehr sowieso wieder neuen SELECT??
 
Keiner weiss wohl wie PHP intern tickt.
Ich dachte immer, PHP sei open-source. Zumindest hab ich schon öfters im Quellcode nachgelesen, wie was intern funktioniert ;)

Zur Performance: Der Faktor, der schlecht berechnet werden kann, is die Datenbank. Die kann durch Caching viel schneller sein. Wird wohl aber nicht funktionieren, wenn man mit IF oder LEFT rangeht. Drum wäre ich dafür, immer den vollständigen String zu holen.
 
Ich hätte eh die Datenbank zB NEWS nach Datum sortieren lassen und die neuesten X Beiträge ausgelesen, um dann entsprechend den Eintrag für die Frontseite aufzuarbeiten (AJAX bin ich bisher noch nicht mit zusammengekommen, die hat mir keiner vorgestellt :mrgreen: )

MUss mal schauen, wenn ich wieder etwas Zeit habe, werde ich einfach mal versuchsweise das ganze entsprechend umbauen und hoffen, dass es klappt

falls nicht, komme ich hierher um mich auszuweinen :cry:

außerdem ist eh alle theHackers Schuld