Hallo zusammen,
ist es möglich den Teasertext automatisch aus dem Text generieren zu lassen und diesen dann nach x Zeichen zu kürzen?
Gruss Oliver
Hallo zusammen,
ist es möglich den Teasertext automatisch aus dem Text generieren zu lassen und diesen dann nach x Zeichen zu kürzen?
Gruss Oliver
Klar, musst aber in Template machen.
Mit strpos und nem offset geht das sehr gut.
Damit nicht mitten im Wort oder unsinnig im Satz gekürzt wird, am besten noch das offset nach dem ersten gefundenen SatzPunkt anpassen hinter dem offset anpassen.
Ich hab die paar Zeilen code irgendwo liegen. Kann ich morgen posten.
Grüße Tim
Sent from my iPhone using Tapatalk
http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.
Wäre voll cool wenn du ein paar Zeilen posten könntest. Vielen Dank im Voraus
Ich benutze für die News das was in diesem Thread gepostet wurde... funktioniert sehr gut.
Gruß
Thomas
blucomp | Webdesign & Onlinelösungen
Hallo zusammen,
vielen Dank für eure Antworten. Ich habe es soweit angepasst. Die autom. Teasererzeugung funktioniert wie gewünscht.
Bei der Erstellung soll der Text nach dem Wortende zerschnitten werden.
Also habe ich diese Zeile in:korrigiert. Nun ist alles perfektPHP-Code:
<?php echo substr(strip_tags($this->text), 0, strpos(strip_tags($this->text), " ", 160)).' ...'; ?>
Gruss Oliver
Geändert von derolli (31.07.2011 um 18:41 Uhr)
Hi, ich muss nochmal nachfragen, da jetzt doch ein Problem auftauchte mit der o.g. Lösung und da meine PHP Kenntnisse dafür nicht ausreichen.
Problem: Sobald der gepostete Text kürzer ist als die Zeichenanzahl, nach der abgeschnitten wird, taucht eine Fehlermeldung auf. Das passiert zwar selten, aber kann.
Frage: Ist es möglich das so zu modifizieren, dass bei weniger Zeichen eben der ganze Text angezeigt wird? Ich würde das auch in Auftrag geben, aber vielleicht ist das ja einfacher als ich denke.
Gruß
Thomas
//edit: Falls hilfreich, hier noch der entsprechende Templatecode:
PHP-Code:
<div class="layout_latest block<?php echo $this->class; ?>">
<?php if ($this->addImage): ?>
<div class="image_container<?php echo $this->floatClass; ?>"<?php if ($this->margin || $this->float): ?> style="<?php echo trim($this->margin . $this->float); ?>"<?php endif; ?>>
<?php if ($this->href): ?>
<a href="<?php echo $this->href; ?>"<?php echo $this->attributes; ?> title="<?php echo $this->alt; ?>">
<?php endif; ?>
<img src="<?php echo $this->src; ?>"<?php echo $this->imgSize; ?> alt="<?php echo $this->alt; ?>" />
<?php if ($this->href): ?>
</a>
<?php endif; ?>
<?php if ($this->caption): ?>
<div class="caption"><?php echo $this->caption; ?></div>
<?php endif; ?>
</div>
<?php endif; ?>
<h3><?php echo $this->newsHeadline; ?><br /><?php if ($this->hasMetaFields): ?>
<span class="info"><?php echo $this->date; ?> <?php echo $this->author; ?> <?php echo $this->commentCount; ?></span>
<?php endif; ?></h3>
<?php if ($this->teaser): ?>
<p class="teaser"><?php echo $this->teaser; ?></p>
<?php else: ?>
<p class="teaser"><?php echo substr(strip_tags($this->text), 0, strpos(strip_tags($this->text), " ", 275)); ?>... <?php if ($this->text): ?>
<span class="more"><a href="{{link_url::54}}">Zum Blog</a><!--<?php echo $this->more; ?>--></span>
<?php endif; ?></p>
<?php endif; ?>
</div>
Geändert von tblumrich (03.11.2011 um 14:55 Uhr)
blucomp | Webdesign & Onlinelösungen
Hallo zusammen
Ich habe dasselbe Problem wie Thomas:
Wenn zu wenig Text vorhanden ist, erscheint im FE folgende Fehlermeldung:
Kann mir jemand helfen, dass bei zu wenig Text kein Fehler angezeigt wird?Code:Warning: strpos() [function.strpos]: Offset not contained in string in /var/www/v
Besten Dank im Voraus!
Michael
Geändert von Michael (19.04.2012 um 14:02 Uhr)
Contao ist echt !
Habe den Fehler wie folgt behoben:
PHP-Code:
<div class="teaser">
<?
$text= $this->text;
if (strlen($text) >= 120){
echo strip_tags(substr($text, 0, strpos($text," ",160)))."...";
} else {
echo $text;
}
?>
<p class="more"><?php echo $this->more; ?></p>
</div>
Contao ist echt !
Hallo,
Danke Michael, habe auch Deinen Code genommen und alles supi!!!
Jetzt wäre es doch sinnvoll "Weiterlesen..." auszublenden wenn der Text eben weniger als die gewünschten Zeichen hat!
Hat dafür jemand schon eine Idee oder eine Lösung? Wäre sicher sinnvoll.
Danke!
Irgendwie habe ich die Code-Schnipsel selber hinbekommen:
Also der "Teaser" wird automatisch aus dem Text generiert und wird am Wortende abgeschnitten.
Wenn weniger als 299 Zeichen, wird kein "Weiterlesen..." generiert.
Übrigens bei mir im modifizierten Template "news_latest.html5"HTML-Code:<div class="teaser"> <? $text= $this->text; if (strlen($text) >= 299){ echo strip_tags(substr($text, 0, strpos($text," ",300))).". . ."; } else { echo $text; } ?> </div> <?php if (strlen($text) >= 299): ?> <p class="more"><?php echo $this->more; ?></p> <?php endif; ?>
Hier komplett:
HTML-Code:<div class="layout_latest block<?php echo $this->class; ?>"> <?php if ($this->hasMetaFields): ?> <p class="info"><time datetime="<?php echo $this->datetime; ?>"><?php echo $this->parseDate("d.m.Y", $this->timestamp); ?></time> <?php echo $this->author; ?> <?php echo $this->commentCount; ?></p> <?php endif; ?> <?php if ($this->addImage): ?> <figure class="image_container<?php echo $this->floatClass; ?>"<?php if ($this->margin || $this->float): ?> style="<?php echo trim($this->margin . $this->float); ?>"<?php endif; ?>> <?php if ($this->href): ?> <a href="<?php echo $this->href; ?>"<?php echo $this->attributes; ?> title="<?php echo $this->alt; ?>"> <?php endif; ?> <img src="<?php echo $this->src; ?>"<?php echo $this->imgSize; ?> alt="<?php echo $this->alt; ?>"> <?php if ($this->href): ?> </a> <?php endif; ?> <?php if ($this->caption): ?> <figcaption class="caption" style="width:<?php echo $this->arrSize[0]; ?>px"><?php echo $this->caption; ?></figcaption> <?php endif; ?> </figure> <?php endif; ?> <h2><?php echo $this->text ? $this->linkHeadline : $this->newsHeadline; ?></h2> <div class="teaser"> <? $text= $this->text; if (strlen($text) >= 299){ echo strip_tags(substr($text, 0, strpos($text," ",300))).". . ."; } else { echo $text; } ?> </div> <?php if (strlen($text) >= 299): ?> <p class="more"><?php echo $this->more; ?></p> <?php endif; ?> </div>
Geändert von okni (19.07.2012 um 21:28 Uhr)
Hallo an Alle,
da ich grad mit diesem Code hantiere hier eine kleine optische Optimierung.
Im Original werden 3 einzelne Punkte ausgegeben:
schöner und typografisch richtiger ist aber das hier: Das Auslassungszeichen (&hellip, davor ein Leerzeichen:
Danke aber für den Ursprungscode, ich habe den in ein Template eingebaut und er funktionierte auf Anhieb!Code:echo strip_tags(substr($text, 0, strpos($text," ",300)))." …";
Gruß
Typo
Besser, wenn du eine Methode von Contao benutzt. substr() od. substrHtml(), siehe core-3.1.3\system\modules\core\library\Contao\String.ph pPHP-Code:
<?php
$intMaxLenght = 120;
$text = strip_tags($this->text);
if (strlen($text) >= $intMaxLenght)
{
echo substr($text, 0, $intMaxLenght).'...';
}
else
{
echo $this->text;
}
?>
Dann müsste das hier reichen
Neuere Contao VersionenPHP-Code:
<?php
#echo \String::substrHtml($this->text, 120);
echo \String::substr($this->text, 120);
?>
PHP-Code:
<?php
echo \StringUtil::substrHtml($this->text, 120);
// oder
echo \StringUtil::substr($this->text, 120);
?>
Geändert von Andreas (29.01.2018 um 14:58 Uhr)
Bitte!
Vor Anfragen im Forum HTML validieren.
Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.
Vielen Dank an alle Wunschlistenerfüller
Andreas Burg, Web Solutions
@andreas:
Besten Dank! Funktioniert tiptop!
Contao ist echt !
Das Template ist super!! Gibt es eine Möglichkeit auch das erste Bild aus dem Beitrag anzeigen zu lassen? Da stehe ich gerade etwas auf dem Schlauch...
Hi!
Ja, ich habe das gleiche Problem. Die Bilder werden nicht aus dem News-Eintrag ausgelesen. Bilder, die dem Teaser zugefügt wurden, werden aber angezeigt.
Außerdem klappt es bei mir nicht, dass der Weiterlesen-Link nur angezeigt wird, falls mehr als die definierte Zeichenzahl im Text steht.
Ich kenne mich mit php leider nicht wirklich aus und bastle mir die Templates immer etwas zusammen... Das ganze soll auf Contao 3.4.4 laufen.PHP-Code:
<div class="layout_latest arc_<?php echo $this->archive->id; ?> block<?php echo $this->class; ?>">
<?php if ($this->hasMetaFields): ?>
<p class="info"> </p>
<?php endif; ?>
<div class="newslist_teaser">
<?php if ($this->addImage): ?>
<figure class="image_container_news<?php echo $this->floatClass; ?>"<?php if ($this->margin): ?> style="<?php echo $this->margin; ?>"<?php endif; ?>>
<?php if ($this->href): ?>
<a href="<?php echo $this->href; ?>"<?php echo $this->attributes; ?> title="<?php echo $this->alt; ?>">
<?php endif; ?>
<?php $this->insert('picture_default', $this->picture); ?>
<?php if ($this->href): ?>
</a>
<?php endif; ?>
<?php if ($this->caption): ?>
<figcaption class="caption"><?php echo $this->caption; ?></figcaption>
<?php endif; ?>
</figure>
<?php endif; ?>
<div class="newslist_teasertext">
<h2><?php echo $this->text ? $this->linkHeadline : $this->newsHeadline; ?>
</h2>
<?php if ($this->teaser): ?>
<p class="teaser"><?php echo $this->teaser; ?>
<?php else: ?>
<?php echo String::substr($this->text, 300); ?>
</p>
<?php endif; ?>
<?php if (strlen($this->text) >= 301): ?>
<p class="more"><?php echo $this->more; ?></p>
<?php endif; ?>
</div>
</div>
</div>
Vielen Dank schonmal für die Hilfe!
Geändert von Isabel_Htkp (05.04.2015 um 18:33 Uhr)
Mit diesem Code kannst du die Variablen, welche im Template ankommen im FE ausgeben.
Oder so in eine Datei system/logs/debug.log schreibenPHP-Code:
<?php $this->showTemplateVars(); ?>
Das hierPHP-Code:
<?php
$debug = "\n\n".'file: '.__FILE__.' (line '.__LINE__.')'."\n\n";
$debug .= print_r($this->arrData, true);
log_message($debug, 'debug.log');
?>
Ist das gleiche wiePHP-Code:
<?php if($farbe == 'blau'): ?>
<p>Blau</p>
<?php endif; ?>
Oft wird es übersichtlicher, wenn man die 2. Variante benutzt. Wenn du das nicht so gut kannst, dann kannst du das Temlplate erstmal ganz leeren und Stück für Stück aufbauen, dabei lernst du es dann.PHP-Code:
<?php
if($farbe == 'blau')
{
echo '<p>Blau</p>';
}
?>
Bitte!
Vor Anfragen im Forum HTML validieren.
Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.
Vielen Dank an alle Wunschlistenerfüller
Andreas Burg, Web Solutions
Hallo zusammen
Ich habe die Lösung von Andreas im News-Template eingebaut.
Leider verschwindet dabei bei der Ausgabe der Absatz. Eigentlich ist der Preis ein <p> und der Text danach ein <p>, aber nun wird alles zusammengeschrieben, ohne Absatz.Besser, wenn du eine Methode von Contao benutzt. substr() od. substrHtml(), siehe core-3.1.3\system\modules\core\library\Contao\String.ph p
Dann müsste das hier reichen
HTML-Code:<?php echo String::substr($this->text, 120); ?>
Im Text sieht das dann so aus:
Bildschirmfoto 2016-06-16 um 06.56.29.png
Im Quelltext so:
Bildschirmfoto 2016-06-16 um 06.56.48.png
Ich habe die Ausgabe des normalen Teasers auskommentiert, da sieht man die eigentliche HTML-Struktur.
Gibt es dafür eine Lösung oder verschwinden da alle HTML-Zeichen? Notfalls löse ich es mit der subheadline... wäre jedoch toll, wenn es eine andere Lösung für das fehlende HTML gäbe.
Liebe Grüsse
Eva
Geändert von Eva (16.06.2016 um 06:37 Uhr)
NimmPHP-Code:
\StringUtil::substrHtml
Servus Leude,
hab das jetzt mal so übernommen und an und für sich tut's was es soll - sprich Teasertext wird gekürzt auf 120 zeichen - allerdings ist jetzt kurioserweise bei einem der Einträge statt dem Teasertext einfach nur eine "1" und sonst nix. Zu erwähnen sei an der Stelle ggf. das sich der Nachrichteneintrag insofern von den anderen unterscheidet, als dass es sich hierbei nur um eine Weiterleitung zu einem Youtube Video handelt, d.h. zwar ein Teasertext im Container, aber kein Inhalt an sich hinterlegt ist.
Weiß einer woran das liegen könnte?
www.dr-carl-partner.de (Gleich auf der Startseite)
Poste dein News Template.
Jo hat sich erledigt, habs selber gemerkt warum. Falls es wen interessiert: Normalerweise steht im Templateund der Vorschlag istCode:<?php echo $this->teaser ?>sprich ich hab verpennt das "text" wieder zu "teaser" zu ändern, was zur Folge hat, dass er den Inhaltstext nimmt und nicht den Teasertext vom Container der Nachricht.Code:<?php echo \StringUtil::substr($this->text, 120); ?>
Hallo,
ich bin auch auf der Suche nach einer Möglichkeit, den Teaser automatisch generieren zu lassen. Hat es schon jemand unter Contao 4 am Laufen und könnte ggf. einfach das ganze Template posten, also mit den Original-Zeilen oder mir zumindest mitteilen, wo welcher Teil rein muss?
Gruß
Tefracky
Wie hier oben in #12 https://community.contao.org/de/show...l=1#post290588 beschrieben (letzter Block - für neuere Contao Versionen).
Einfach deinen Teaser-String durch die Funktion laufen lassen.
oder direkt da wo dein String ausgegeben wirdPHP-Code:
$myString = 'foo';
$myShortString = \StringUtil::substrHtml($myString, 120);
PHP-Code:
vorher
<?= $myString ?>
nachher
<?= \StringUtil::substrHtml($myString, 120) ?>
Bitte!
Vor Anfragen im Forum HTML validieren.
Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.
Vielen Dank an alle Wunschlistenerfüller
Andreas Burg, Web Solutions
Alles klar, jetzt verstehe ich es auch, danke! Allerdings gibt es immer noch ein Problemchen. Ich benutze den RSS Feed, um dann über IFTTT das Ganze noch auf Facebook zu posten. Doch leider erscheint dort immer noch kein Teaser. Ich vermute, es liegt daran, dass der Teasertext auch nicht angezeigt wird, wenn ich den Newsbeitrag km BE auswähle.
Dazu hätte ich gerne am Ende des Teasertextes noch 3 Punkte, da es ja kein angeschlossener Satz ist.
Wie könnte man das noch optimieren?
Geändert von tefracky (29.01.2018 um 21:50 Uhr)
Wenn man \StringUtil:substr() benutzt, dann ist die Ellipsis schon mit dabei (kann auch verändert werden - 3. Parameter angeben) https://github.com/contao/core/blob/...ngUtil.php#L40
Bei \StringUtil:substrHtml() https://github.com/contao/core/blob/...gUtil.php#L101 gibt es diese Möglichkeit leider noch nicht. Evtl. mal als Feature Request einstellen.
Bei substrHtml() könnte man auch sowas hier machen (ungetestet)
CSS:PHP-Code:
<?php
$targetLength = 120;
$sourceLength = strlen(trim(strip_tags($this->teaser)));
if($sourceLength > $targetLength)
{
$this->teaser = '<div class="shortened_string">'.\StringUtil::substrHtml($this->teaser, $targetLength).'</div>';
}
?>
PHP-Code:
.shortened_string:after {
content: "…";
}
Bitte!
Vor Anfragen im Forum HTML validieren.
Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.
Vielen Dank an alle Wunschlistenerfüller
Andreas Burg, Web Solutions
Hallo,
ich habe einfach das substrHtml durch substr ersetzt und jetzt funktioniert alles einwandfrei.
Allerdings wird es nicht in die Datenbank geschrieben und ist daher auch nicht im RSS Feed sichtbar. Gibt es dafür auch eine Lösung?
Was passiert eigentlich mit News, die schon existieren, werden die dann überschrieben? Wenn ja, kann man das verhindern?
Gruß
Tefracky
Geändert von tefracky (31.01.2018 um 20:02 Uhr)
Nein, über Code, welcher in den Ausgabetemplates steht, werden keine Einträge in der DB modifiziert, es sei denn du programmierst dies explizit in dem Template, dass beim Aufruf des Templates irgendetwas in der DB verändert werden soll.
Dieser Code ist ja nur für die Templates gedacht. D.h. nur für die Ausgabe. Der Wert in der DB bleibt dabei original, das sollte ja auch so sein. Du musst also nach deinem Template suchen, welches dir das RSS erstellt und den Code dort anwenden.
Geändert von Andreas (01.02.2018 um 16:50 Uhr)
Bitte!
Vor Anfragen im Forum HTML validieren.
Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.
Vielen Dank an alle Wunschlistenerfüller
Andreas Burg, Web Solutions
Wenn du das sagst, dann klingt das alles immer so einfach... Aber ich weiß was du meinst, es ist ja auch naheliegend.
Bei RSS habe ich die Auswahl zwischen "rss_default.html5" und "rss_items_only.html5". Da ich nur die Teasertexte exportieren möchte, würde ich jetzt das "items_only" bearbeiten, was folgendermaßen aussieht:
Ich müsste jetzt ja irgendwie das "<div class="description"><?= $item['description'] ?>" ersetzen, oder? Aber mit was? Irgendwie ist da die Struktur etwas anders als bei dem News Template.PHP-Code:
<?php $this->extend('block_unsearchable'); ?> <?php $this->block('content'); ?> <?php foreach ($this->items as $item): ?> <div class="rss_items_only<?= $item['class'] ?>"> <h2><a href="<?= $item['link'] ?>" target="_blank" rel="noopener"><?= $item['title'] ?></a></h2> <div class="description"><?= $itEm['description'] ?></div> </div> <?php endforeach; ?> <?= $this->pagination ?> <?php $this->endblock(); ?>
Hier noch zum Vergleich das default Template:
GrußPHP-Code:
<?php $this->extend('block_unsearchable'); ?> <?php $this->block('content'); ?> <div class="rss_default_header"> <h1><a href="<?= $this->link ?>" target="_blank" rel="noopener"><?= $this->title ?></a></h1> <?php if ($this->image): ?> <a href="<?= $this->href ?>" title="<?= $this->alt ?>"><img src="<?= $this->src ?>" alt="<?= $this->alt ?>"></a> <?php endif; ?> <?php if ($this->description): ?> <div class="description"><?= $this->description ?></div> <?php endif; ?> </div> <?php foreach ($this->items as $item): ?> <div class="rss_default<?= $item['class'] ?>"> <h2><a href="<?= $item['link'] ?>" target="_blank" rel="noopener"><?= $item['title'] ?></a></h2> <div class="description"><?= $item['description'] ?></div> </div> <?php endforeach; ?> <?= $this->pagination ?> <?php $this->endblock(); ?>
Originale Templates brauchst du hier nicht zu posten, da reicht ein Link auf Github
https://github.com/contao/core/blob/..._default.html5
https://github.com/contao/core/blob/...ems_only.html5
Diese Templates sind nur für den RSS-Reader, mit welchem du RSS-Feeds auf deiner Website als HTML darstellen kannst. Da kannst du dann ->description modifizieren.
Den Text in der XML-Datei zu modifizieren ist schwer, da es da kein Template und keinen Hook für gibt. Ich benutze dies sehr selten, habe aber mal was davon mitbekommen, dass da etwas eingerichtet werden soll, da auch andere Entwickler die Ausgabe der XML-Dateien steuern möchten. Suche mal auf Github im Ticketsystem danach.
Bitte!
Vor Anfragen im Forum HTML validieren.
Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.
Vielen Dank an alle Wunschlistenerfüller
Andreas Burg, Web Solutions
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Lesezeichen