- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
body-Inhalt als Text ausgeben
Hy!
Wie kann ich mir das hier $CMS_VALUE(#global.page.body("inhalt"))$ als reinen Text ausgeben? Am besten nur die ersten 200 Zeichen, aber das wรคre nicht so wichtig im ersten Schritt.
Habe es damit bereits versucht:
- $CMS_VALUE(#global.page.body("inhalt").toText(false))$
- $CMS_VALUE(#global.page.body("inhalt").toString())$
- $CMS_VALUE(#global.page.body("inhalt").rednerToString())$
Aber nichts brachte das gewรผnschte Ergebnis.
Weiร hier jemand Rat?
Danke im Voraus!
Grรผรe
Marcus
- Labels:
-
Developers
-
Knowledgebase
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Habe das nun entsprechend so gelรถst, dann sind auch die HTML-Tags weg:
<meta name="description" content="$CMS_IF(!pt_zusammenfassung.isEmpty)$$CMS_VALUE(pt_zusammenfassung.toText(false).trim())$$CMS_ELSE$$CMS_SET(fragment)$$CMS_VALUE(#global.page.body("inhalt"))$$CMS_END_SET$$CMS_VALUE(fragment.toString.replaceAll("<[^>]*>"," ").replaceAll("\n"," ").trim().substring(0,200))$...$CMS_END_IF$" />
Danke fรผr die schnelle Hilfe!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Als Schwabe mรผsste ich jetzt zuerst mal "hรค ?" sagen ๐ Was genau soll den ausgegeben werden?
Die erste 200 Zeichen des ersten Absatzes oder alle Absรคtze in diesem Inhaltsbereich ?
Wenn zweiteres gewรผnscht ist mรผssten รผber eine Schleife alle Absรคtze ausgelesen werden:
$CMS_FOR(section,#global.page.body("Inhalt").children)$
$CMS_VALUE(section.getData.toString)$
$CMS_END_FOR$
Allerdings kommt dann erstmal auch alles mรถgliche XML mit. Bin nicht sicher, ob es da schon eine vorhandene Methode gibt, die hier den Text ausfiltert.
Evtl. ist das bei Euch aber auch nicht so kompliziert und es lรคsst sich im Vorfeld schon sagen, aus welchem Element die 200 Zeichen kommen sollen ? Evtl. immer ein DOM-Objekt ?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Danke fรผr die Antwort. Also es sind zu 95% immer CMS_INPUT_DOM-Elemente. Und ja, es sollen die ersten 200 Zeichen รผber alle Absรคtze ausgegeben werden. Also wirklich die ersten 200 Zeichen des BODY.
Ich brauche da reinen Text, ohne XML, ohne HTML-Tags. Soll spรคter mal als Anreiรer fรผr eine Suchmaschine dienen, wenn keine besseren Texte dafรผr vorhanden sind.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
#global.page.body("inhalt") liefert einen Knoten vom Typ de.espirit.firstspirit.access.store.pagestore.Body. Was du willst, ist das toString eines Template-Fragments.
Dazu muss man das gewรผnschte erst einmal in ein Template-Fragment einfassen
$CMS_SET(fragment)$$CMS_VALUE(#global.page.body("inhalt))$$CMS_END_SET$
Das gewรผnschte Ergebnis liefert dann
$CMS_VALUE(fragment.toString.substring(0,200))$
Im Text kรถnnen aber HTML-Tags enthalten sein und wenn man bei Zeichen 200 schneidet ist das Ergebnis potentiell nicht mehr valide!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Habe das nun entsprechend so gelรถst, dann sind auch die HTML-Tags weg:
<meta name="description" content="$CMS_IF(!pt_zusammenfassung.isEmpty)$$CMS_VALUE(pt_zusammenfassung.toText(false).trim())$$CMS_ELSE$$CMS_SET(fragment)$$CMS_VALUE(#global.page.body("inhalt"))$$CMS_END_SET$$CMS_VALUE(fragment.toString.replaceAll("<[^>]*>"," ").replaceAll("\n"," ").trim().substring(0,200))$...$CMS_END_IF$" />
Danke fรผr die schnelle Hilfe!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Also einfach das hier (Annahme: jeder Absatz hat den Inhalt in der Eingabekomponente mit dem Namen "dom" stehen.)
$CMS_FOR(body,#global.page.children)$
$CMS_FOR(section,body.children)$
$CMS_IF(!section.data.get("dom").isEmpty)$$CMS_SET(text,section.data.get("dom").getEditor().get(#global.language).toText(false).substring(0, 200))$$CMS_VALUE(text.substring(0, text.lastIndexOf(" ")))$$CMS_END_IF$
$CMS_END_FOR$
$CMS_END_FOR$
Ich hab es jetzt nicht testet, also bitte kritisch auf Tippfehler prรผfen.
$CMS_VALUE(text.substring(0, text.lastIndexOf(" ")))$ dient natรผrlich nur dazu, dass der Ausschnitt nicht mitten in einem Wort endet.
Ich sehe gerade, dass ich mich "verlesen" habe, und nicht die ersten 200 Zeichen jedes Absatz benรถtigt werden, sondern nur vom ersten. Ich lasse die Antwort trotzdem mal stehen
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Das replaceAll("\n"," ").trim() kann man sich noch sparen, wenn man um das innere Template-Fragment ein $CMS_TRIM legt.
Und Holgers Lรถsung berรผcksichtigt noch, das nicht mitten im Wort abgeschnitten wird.

