Text kürzen lassen

truckdriver

Mitglied
Hallo,

ich möchte eine Bildergalerie mit einer Beschreibung erstellen. Da der Text recht lang ist, möchte ich ihn nach einer frei definierbaren Anzahl von Zeichen kürzen lassen. Am Ende des gekürzten Textes soll dann ein Link generiert werden (z. B. „ Mehr …“), so dass man sich mit einem Klick den kompletten Text ausklappen bzw. anzeigen lassen kann.

Weder der Text noch die Bilder werden aus einer Datenbank abgerufen.

Kann man dieses mit php umsetzen?

Danke im Voraus!
 
Für das Ausklappen brauchst du unweigerlich Javascript, wenn du die Seite nicht neu laden möchtest.

Die Textkürzung lässt sich mit PHP realisieren. strlen, substr sind Funktionen, die du dir anschauen solltest.
 
Eine Kleine Lösung per JS / CSS währe so etwas:

PHP:
<?
function Shorten($text, $len = 25){
    static $num = 0;
    if(strlen($text) > $len){
        
        $short  = substr($text, 0, $len);
        $long   = substr($text, $len);
        
        $text   = $short .'<a href="#" onClick="document.getElementById(\'s'.$num.'\').style.display = \'inline\';this.style.display=\'none\';return false;">Mehr...</a><span id=\'s'.$num.'\' style="display:none">'.$long.'</span>';
        $num++;
    }
    return $text;
}
$text = 'viel viel text, und wenn ich viel meine meine ich wirklich viel. Viel zu viel für ein kleines feld und zuviel unintressantes';

echo Shorten($text).'<br>';
echo Shorten('nochmwas').'<br>';
echo Shorten('nochmal was seeeeeeeehr langes was keiner wirklich lesen will').'<br>';
?>

Ausgabe:
Code:
viel viel text, und wenn Mehr...
nochmwas
nochmal was seeeeeeeehr l Mehr...
 
Und hier mal ein Beispiel, wie man den Text ohne Nachladen anzeigen lassen kann (JavaScript / AJAX)

HTML:
<script type="text/javascript">
function switchlayer(Layer_Name)
{
  var GECKO = document.getElementById? 1:0 ;
  var NS = document.layers? 1:0 ;
  var IE = document.all? 1:0 ;

  if (GECKO)
       {document.getElementById(Layer_Name).style.display=
	   (document.getElementById(Layer_Name).style.display=='block') ? 'none' : 'block';}
  else if (NS)
       {document.layers[Layer_Name].display=(document.layers[Layer_Name].display==
	   'block') ? 'none' : 'block';}
  else if (IE)
       {document.all[Layer_Name].style.display=(document.all[Layer_Name].style.display==
	   'block') ? 'none' : 'block';}
}
</script>

<ul>
  <li><a href="untermenue.php" onclick="javascript:switchlayer('ferrari');
	 return false;">Ferrari</a></li>
 <ul id="ferrari" type="circle" style="display:none;">
  <li>F355 Spider</li>
  <li>F40</li>
  <li>Maranello</li>
  <li>Testarossa</li>
 </ul>

 </ul>
 
Vielen Dank für die Beispiele/Lösungen

Ich würde es sofort umsetzen, nur habe ich "Bedenken" JS einzusetzen. Schließlich ist es ja nicht auf jedem Rechner aktiviert und daher kann es bei den Usern nicht korrekt angezeigt werden.

Geht es auch ohne den Einsatz von Java-Script?
 
Dann nur per Seiten Reload, Übergeb per ?show=12 oder so eine id, anhand der du das Substring für einen eintrag überbrückst.

Du kannst aber auch beide Lösungen Paralell laufen lassen. bei meiner zB statt 'href="#"', 'href="?show'.$num.' anhängen lassen.
 
Danke für die Info!

Mit Deiner letzten Beschreibung komme ich leider nicht ganz klar. Wo und wie muss ich das mit dem ?show=12 denn einbinden?

Bin mit PHP leider noch nicht so vertraut.
 
PHP:
<?php

$max = 10; // Maximale Anzahl der Buchstaben
$text = "balsdblaskhäöslfkjaöslgkjaölkgjdöflkjödlfkgjaölkfhnlkfnghlösfgnhölfgnh.";

if (strlen($text)>$max)
{
	
	$new_text = substr($text, 0, $max);
}
else
{
	$new_text = $text;
}

echo $new_text;

?>

natührlich auch aus db holen oder so
das script ist getestet ;)
 
Danke für die Hilfe!

Text kürzen lassen klappt wunderbar. Wie kann ich denn da jetzt noch einen Link ausgeben lassen, dass der User mit einem Klick den vollständigen Text einsehen kann?
 

Neue Beiträge

Zurück