Text kürzen lassen

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


if (isset($_GET['show']) && 'full' == $_GET['show'])
{
	echo $text;
}
else
{
	if (strlen($text)>$max)
	{
		
		$new_text = substr($text, 0, $max);
	}
	else
	{
		$new_text = $text;
	}
	
	echo $new_text;
}
?>

Wenn man jetzt ?show=full an die url anhängt, wird der volle text angezeigt

Willst du das mit DB machen? Weil das ist jetzt natührlich ohne mit db geht das ganze aber ähnlich nur warscheinlich mit id und so
 
Zuletzt bearbeitet von einem Moderator:
Wunderbar – Danke Dir!

Nein, die Daten sollen (momentan) nicht aus einer DB abgerufen werden.

Wie muss ich die Funktion abändern, dass die Worte nicht "abgehackt" werden? Die Trennung soll immer erst nach einem kompletten Wort erfolgen und nicht mittendrin.
 
der hakt immer nach der eingestellten $max zeichen anzahl ab.

um das zu schaffen müsstes du irgendwas mit den whitespaces machen..... hmmmm.....

Naja hab jetzt mal 2 functionen gebaut die zwei verschiedene dinge tun
aber du kannst sie ja kombinieren.
PHP:
<?php
$max = 10; // Maximale Anzahl der Zeichen
$text = "Das ist ein eindeutig zu langer Text für unseren Test! Oder was meint Ihr?";


function cut_text_buchstaben($text, $length)
{
	if (strlen($text)>$length) // Wenn länger als $length
	{
		return substr($text, 0, $length);
	}
	else {return $text;}
}

function cut_text_words($text, $length)
{
	$words = explode(' ', $text); // Wörter des Text in ein Array
	
	if (count($words)>$length) // Wenn mehr als $length Wörter
	{
		foreach ($words as $key => $value) // Trennen
		{
			if ($key>$length) // Wenn $array[$key] $key größer $length
			{
				$out .= ''; // Wenn $key größer, $out nicht erweitern
			}
			else
			{
				$out .= $value.' '; // Andernfalls $value dranhängen mit leerzeichen
			}
		}
	}
	return $out;
}


if (isset($_GET['show']) && 'full' == $_GET['show'])
{
	echo $text;
}
else
{
	echo '<p>';
	echo 'Text mit cut_text_buchstaben: <br>';
    echo cut_text_buchstaben($text, $max). ' [...] <a href="?show=full">Vollen Text anschaun.</a>';
    echo '</p>';
    
    echo 'Text mit cut_text_words: <br>';
    echo cut_text_words($text, $max). ' [...] <a href="?show=full">Vollen Text anschaun.</a>';
}
?>
 
Zuletzt bearbeitet von einem Moderator:
Das Ganze kann auch nur mit JavaScript gelöst werden, etwa:
HTML:
<script type="text/javascript" charset="utf-8">
window.onload = function()
{
	var divElements = document.getElementsByTagName("div");
	for( var i=0; i<divElements.length; i++ ) {
		if( !divElements[i].className.match(/\s*show-me-more\s*/) ) {
			continue;
		}
		var showMeMoreLink = document.createElement("a");
		showMeMoreLink.setAttribute("onclick", "showMeMore(this)");
		showMeMoreLink.setAttribute("class", "show-me--link");
		showMeMoreLink.appendChild(document.createTextNode("Mehr …"));
		divElements[i].insertBefore(showMeMoreLink, divElements[i].firstChild);
	}
}
function showMeMore( obj )
{
	obj.parentNode.className = obj.parentNode.className.replace(/\s*show-me-more\s*/, " show-me-less");
	obj.setAttribute("onclick", "showMeLess(this)");
	obj.replaceChild(document.createTextNode("Weniger …"), obj.firstChild);
}
function showMeLess( obj )
{
	obj.parentNode.className = obj.parentNode.className.replace(/\s*show-me-less\s*/, " show-me-more");
	obj.setAttribute("onclick", "showMeMore(this)");
	obj.replaceChild(document.createTextNode("Mehr …"), obj.firstChild);
}
</script>
<style type="text/css" media="screen">
	.show-me--link {
		cursor: pointer;		
	}
	.show-me-more .show-me--link {
		float: right;
	}
	.show-me-less .show-me--link {
		position: absolute;
		bottom: 0;
		right: 0;
	}
	.show-me-more,
	.show-me-less {
		position: relative;
		height: 1.5em;
		line-height: 1.5;
		overflow: hidden;
	}
	.show-me-less {
		overflow: visible;
		height: auto;
	}
</style>

<div class="show-me-more">
	Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<div class="show-me-more">
	Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
 
@ suf*****: Nochmals vielen Dank! Funktioniert einwandfrei. Problem gelöst :)

@ Gumbo: Auch Dir vielen Dank. Wie bereits oben beschrieben, möchte ich JavaScript aber nicht unbedingt einsetzen. Nicht jeder User hat JavaScript aktiviert.
 
Hallo Gumbo, ich probiere gerade deinen Code nachzuvollziehen. Wo wird die max. Anzahl der Wörter bzw. Buchstaben eingestellt?
 

Neue Beiträge

Zurück