Wortabkürzungs-Funktion für Teaser auf Startseite...

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wortabkürzungs-Funktion für Teaser auf Startseite...

    Hallo!

    Auf der Startseite meiner Website werden in Zukunft unter "Neueste Meldungen" die letzten fünf Pressemeldungen aus der DB angezeigt, und zwar als Teaser, d.h. nach einer definierten Anzahl von Zeichen wird die Zeichenkette "abgebrochen" und drei Punkte hintergesetzt. Hier die Funktion:

    PHP-Code:
    function teaser($string$length)
    {
     if(
    strlen($string)>$length) {
    $ausgabe=substr($string0$length)."...";
    }
    else{
    $ausgabe=$string;
    }
    return 
    $ausgabe;

    Klappt auch wunderbar, hab $length auf 350 Zeichen... aber ich bin am überlegen, wenn in diesen ersten 300 Zeichen ein <img...>-Tag steht und das Bild somit mit in den Teaser wandert, aber das Tag mittendrin "zerhackt" wird nach 300 Zeichen...

    Hat wer ne Idee wie man das verhindern kann? Ist bisher noch nicht zum Problem geworden, aber ich will natürlich auch keine automatisch generierten broken links haben.

  • #2
    naja. du könntest mit strip_tags den text von html code befreien
    mfg

    Kommentar


    • #3
      Den will ich ja gerade drin behalten.

      Kommentar


      • #4
        Dann bastel dir doch einen eigenen kleinern Parser ... der alle Zeichen zählt, die außerhalb von < und > stehen.
        Wenn ein < auftaucht, wird das Erhöhen des Zählerstandes so lange unterbrochen, bis wieder das abschließende > auftaucht.
        Und ggf. könnte er auch noch HTML-Entities oder nummerische Zeichenreferenzen berücksichtigen - so dass diese jeweils nur als ein Zeichen gezählt werden, statt als vier oder fünf ...


        Andere Möglichkeit, die ich u.U. sogar präferieren würde: Man führt etwas kleines BB-Code-artiges ein, z.B. [break], was dann schon beim Erstellen des Eintrages vom Ersteller an einer passenden Stelle eingesetzt wird.
        Beim Auslesen des Teasers liest man eben nur bis zu diesem [break] aus - und beim Anzeigen des ganzen Eintrages wird [break] einfach herausgestrichen.
        Hätte den Vorteil, dass man jetzt nicht mehr die Maschine entscheiden lassen muss, wo sie ohne Sinn und Verstand und nur aufgrund einer vorgegebenen festen "Länge" einen Text abbricht - sondern dass man selber bestimmen kann, dass der Teaser z.B. erst nach einem vollständigen Satz aufhört, so dass es nicht ganz so sinnentstellend ist, wie man das oftmals sieht.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Original geschrieben von wahsaga


          Andere Möglichkeit, die ich u.U. sogar präferieren würde: Man führt etwas kleines BB-Code-artiges ein, z.B. [break], was dann schon beim Erstellen des Eintrages vom Ersteller an einer passenden Stelle eingesetzt wird.
          Stimmt, eigentlich eine gute Idee. Ich glaub ich bau die Tags [teaser][/teaser] in meine Definitions ein... ich hab ja bei mir die"stringparser_bbcode"-Klasse implementiert.

          Wenn ich die zu sowas wie "<div class="teaser"></div>" parsen lasse und per strstr()auf der Startseite gucke ob dieses div-Tag vorhanden ist, müsste man das ja eigentlich so hinkriegen dass dann entweder der Teaser gesetzt wird oder bei Nicht-Vorhandensein meine "alte" Funktion wieder greift (und zusätzlich alles "strippt"), oder?
          Zuletzt geändert von Karsten06; 11.05.2006, 15:06.

          Kommentar


          • #6
            ich hoffe, dass dieser preg dir weiter hilft
            PHP-Code:
            $pattern '/(?:<[^<]+>)*([^<]*)(?:<[^<]+>)*/su';
            preg_match_all($pattern$TXT$arrayPREG_PATTERN_ORDER);
             
            print_r($array); 
            wenn du stringlänge von allen array-elementen in dem zweitem array zehlst, kannst du feststellen an welche stelle es gekürzt sein muss.
            dann muss du equiwalente index bei erstem array finden, und ab bestimmter stelle bis vokommen von erstem Tag kürzen.
            schau dir ergebnis einfach an, dann kommst du schon auf ein paar ideen.
            Slava
            bituniverse.com

            Kommentar


            • #7
              PHP-Code:
              function tease($text$append '...') {
                  
              $teaser substr($textstrpos($text'[tease]') + 7);
                  
              $teaser substr($teaser0strpos($teaser'[/tease]'));
                  if (
              strlen($teaser) > 0)
                      
              $teaser .= $append;
                  return 
              $teaser;
              }

              function 
              display($text) {
                  
              $teaser tease($text'');
                  if (
              strlen($teaser) > 0)
                      
              $display str_replace('[tease]'.$teaser.'[/tease]'''$text);
                  else
                      
              $display $text;
                  return 
              $display;
              }


              $text 'Vor dem Teaser[tease]Das ist der Teaser[/tease]Nach dem Teaser';

              echo 
              $text;
              echo 
              '<br />';
              echo 
              tease($text);
              echo 
              '<br />';
              echo 
              display($text); 
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                hey cool danke ich glaube das ist so ziemlich das was ich brauche


                Edit: Habs grad implementiert, ist echt super praktisch!
                Zuletzt geändert von Karsten06; 11.05.2006, 16:59.

                Kommentar

                Lädt...
                X