Hallo,
ich verwende das news_short Template, leider werden die Nachreichten trotzdem in voller Länge angezeigt. Was kann ich machen damit die Nachricht nur verkürzt angezeigt wird?
Viele Grüße und lieben Dank im Vorraus
Druckbare Version
Hallo,
ich verwende das news_short Template, leider werden die Nachreichten trotzdem in voller Länge angezeigt. Was kann ich machen damit die Nachricht nur verkürzt angezeigt wird?
Viele Grüße und lieben Dank im Vorraus
Das default news_short Template kürzt den Teaser nicht: https://github.com/contao/core/blob/...ws_short.html5
Das musst du wenn dann selbst machen (mit \StringUtil::substr oder \StringUtil::substrHtml, je nachdem).
Danke aber sorry aber wie muss ich das wo machen :eek:
Du musst in deinem entsprechenden News templateersetzen mitPHP-Code:
<?= $this->teaser ?>
oderPHP-Code:
<?= \StringUtil::substr($this->teaser, 100) ?>
wenn du die HTML tags erhalten möchtest. Die Zahl '100' ersetzt du natürlich mit deiner gewünschten Zahl.PHP-Code:
<?= \StringUtil::substrHtml($this->teaser, 100) ?>
Wow danke für die schnelle Hilfe!:D:D:D
Sorry wie mache ich das jetzt das es nach anklicken von reade more ... nicht mehr abgekürzt wird?
Du könntest dir den Teaser zwei mal ausgeben, einmal gekürzt, einmal ungekürzt, den ungekürzten per CSS verstecken und dann per JavaScript den gekürzten verstecken und den ungekürzten anzeigen lassen. (Eine von vielen Möglichkeiten.)
Oder du nimmst eine tuncate funktion um halt zu verhinden, das der string dannach bissel komsich aussieht..
PHP-Code:
public function truncate($text, $length, $options = array()) {
$default = array(
'ending' => '...', 'exact' => true, 'html' => true
);
$options = array_merge($default, $options);
extract($options);
if ($html) {
if (mb_strlen(preg_replace('/<.*?>/', '', $text)) <= $length) {
return $text;
}
$totalLength = mb_strlen(strip_tags($ending));
$openTags = array();
$truncate = '';
preg_match_all('/(<\/?([\w+]+)[^>]*>)?([^<>]*)/', $text, $tags, PREG_SET_ORDER);
foreach ($tags as $tag) {
if (!preg_match('/img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param/s', $tag[2])) {
if (preg_match('/<[\w]+[^>]*>/s', $tag[0])) {
array_unshift($openTags, $tag[2]);
} else if (preg_match('/<\/([\w]+)[^>]*>/s', $tag[0], $closeTag)) {
$pos = array_search($closeTag[1], $openTags);
if ($pos !== false) {
array_splice($openTags, $pos, 1);
}
}
}
$truncate .= $tag[1];
$contentLength = mb_strlen(preg_replace('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', ' ', $tag[3]));
if ($contentLength + $totalLength > $length) {
$left = $length - $totalLength;
$entitiesLength = 0;
if (preg_match_all('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', $tag[3], $entities, PREG_OFFSET_CAPTURE)) {
foreach ($entities[0] as $entity) {
if ($entity[1] + 1 - $entitiesLength <= $left) {
$left--;
$entitiesLength += mb_strlen($entity[0]);
} else {
break;
}
}
}
$truncate .= mb_substr($tag[3], 0 , $left + $entitiesLength);
break;
} else {
$truncate .= $tag[3];
$totalLength += $contentLength;
}
if ($totalLength >= $length) {
break;
}
}
} else {
if (mb_strlen($text) <= $length) {
return $text;
} else {
$truncate = mb_substr($text, 0, $length - mb_strlen($ending));
}
}
if (!$exact) {
$spacepos = mb_strrpos($truncate, ' ');
if (isset($spacepos)) {
if ($html) {
$bits = mb_substr($truncate, $spacepos);
preg_match_all('/<\/([a-z]+)>/', $bits, $droppedTags, PREG_SET_ORDER);
if (!empty($droppedTags)) {
foreach ($droppedTags as $closingTag) {
if (!in_array($closingTag[1], $openTags)) {
array_unshift($openTags, $closingTag[1]);
}
}
}
}
$truncate = mb_substr($truncate, 0, $spacepos);
}
}
$truncate .= $ending;
if ($html) {
foreach ($openTags as $tag) {
$truncate .= '</'.$tag.'>';
}
}
return $truncate;
}
Äh, das macht doch \StringUtil::substrHtml schon ;)
Das klingt irgendwie kompliziert? Wie kann ich denn aus "read more" "mehr lesen" machen? :o
Hast du deinen Browser auf Englisch gestellt bei den bevorzugten Sprachen? Normalerweise sollte da "Weiterlesen..." kommen.
Wie dem auch sei, die Bezeichnung kannst du ändern, indem du in der system/config/langconfig.php unterhalb des Kommentars einträgst:
Oder, wenn du es nur für eine Sprache ändern willst.PHP-Code:
$GLOBALS['TL_LANG']['MSC']['more'] = 'mehr lesen';
PHP-Code:
if ($GLOBALS['TL_LANGUAGE'] == 'de')
{
$GLOBALS['TL_LANG']['MSC']['more'] = 'mehr lesen';
}
Vielen Dank!