Zum Hauptinhalt gehen

body-Inhalt als Text ausgeben

Kommentare

6 Kommentare

  • Zendesk API User
    Author: thomas_walter - 7/21/2010 7:25

    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 ?

    0
  • Zendesk API User
    Author: MarcusDau - 7/21/2010 7:37

    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.

    0
  • Zendesk API User
    Author: Peter_Jodeleit - 7/21/2010 7:47

    #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!

    0
  • Zendesk API User
    Author: MarcusDau - 7/21/2010 8:13

    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!

    0
  • Zendesk API User
    Author: hoebbel - 7/21/2010 8:14

    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 :smileywink:

    0
  • Zendesk API User
    Author: Peter_Jodeleit - 7/21/2010 8:39

    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.

    0

Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.