2013-03-29 4 views
5

Das Problem ist einfach:php - wordwrap mit html

Mit tinyMCE, ich HTML-Daten in die Datenbank zu speichern. Dann auf der Homepage, zeige ich 5 letzte Posts, die ich in die Datenbank eingefügt habe. Ich möchte jeden dieser Pfosten auf die angegebene Länge zuschneiden, wenn sie ihn überschreiten und einen continue reading Link setzen (kann eine weiche Ernte hier sein, muss nicht starr sein).

Es wäre leicht, die Zeichenfolge mit PHP wordwrap Funktion zu beschneiden, aber da die Zeichenfolge aus HTML besteht Ich möchte nicht den HTML-Code ruinieren, indem Sie es von einem falschen Ort beschneiden.

Also die Frage ist: Gibt es eine einfache Möglichkeit, dies zu beschneiden, (kann eine css, Javascript-Lösung auch sein) oder habe ich eine lange Funktion mit vielen Prüfungen, um eine solche grundlegende Funktion zu implementieren? Ich dachte daran, die DOM Klasse zu verwenden, aber bevor ich die Funktion erstellte, wollte ich Sie nur fragen.

EDIT

Styling ist mir wesentlich. Es gibt also keine Möglichkeit, die Tags zu entfernen.

Vielen Dank im Voraus.

+0

Siehe: http: //stackoverflow.com/questions/4682878/apply-wordwrap-to-html-content-excluding-html-attributes – Arvind

+0

Die Seite wurde bereits in der anderen Registerkarte geöffnet :) Eigentlich habe ich die DOM-Idee von diesem Post :) @Arvind –

Antwort

2

Eine mögliche Lösung könnte sein, Tags abzustreifen, wenn das Styling dieser HTML nicht lebenswichtig ist, kann so schneiden Sie, wo immer Sie wollen: http://php.net/manual/es/function.strip-tags.php

Eine andere Lösung für CSS3-Browser, wäre Textüberlauf zu verwenden, lesen Sie mehr über diese: http://davidwalsh.name/css-ellipsis

+0

Leider ist die erste Option nicht möglich. Was die zweite Option angeht, habe ich das bereits berücksichtigt. Aber immer noch, wie kann man weiterlesen, indem Sie CSS verwenden? –

0

vorausgesetzt, Sie jQuery verwenden

JavaScript

 $(function() { 
     $('p').filter(function() { 
      return $(this).height() > 50; 
     }).addClass('collapsed').css('position', 'relative').append('<a href="#" class="expand">read more</a>'); 
     $('.expand').on('click', function(){ 
      if($(this).parents('.collapsed').length) 
       $(this).parents('.collapsed:first').removeClass('collapsed') 
      else 
       $(this).parents(':first').addClass('collapsed') 

     }) 
    }) 

die css

.collapsed{overflow: hidden; height: 20px; margin-bottom: 10px; position: relative} 
.expand{position: absolute; right: 0; bottom: 0; background: #fff; padding: 0 0 0 15px;} 

nur ein Proof of Concept. Needs JS Optimierung

+0

Ich habe schon ein solches Plugin gefunden: http://dotdotdot.frebsite.nl/. Das einzige Problem mit jQuery ist, dass es wartet, bis die Seite geladen wird, so dass der Inhalt zuerst geladen wird, und dann abgeschnitten wird (auch wenn Überlauf verwendet wird: versteckt ist ein Text, der erscheint und die Anzeige umständlich macht). Obwohl, nicht die perfekte, wenn ich keine bessere Lösung finden kann, werde ich diese Antwort als richtig akzeptieren. Vielen Dank für den Vorschlag. –