2013-03-29 12 views
5

problem jest prosty:php - wordwrap z html

Korzystanie tinyMCE, jestem przechowywania danych html do bazy danych. Następnie na stronie głównej pokazuję 5 najnowszych wpisów, które wstawiłem do bazy danych. Chcę przyciąć każdy z tych słupów do określonej długości, jeśli przekroczą one i umieści link continue reading (może to być tutaj miękkie uprawianie, nie musi być sztywne).

Łatwo byłoby przyciąć ciąg za pomocą funkcji php: wordwrap, ale ponieważ ciąg składa się z html, nie chcę zepsuć kodu HTML przez przycięcie go z niewłaściwego miejsca.

Pytanie brzmi więc: czy istnieje prosty sposób na przycięcie tego (może to być również css, rozwiązanie javascript) lub czy mam napisać długą funkcję z wieloma kontrolami do wdrożenia takiej podstawowej funkcji? Myślałem o używaniu klasy DOM, ale przed stworzeniem funkcji chciałem cię tylko zapytać.

EDIT

Styling jest niezbędna do mnie. Tak więc nie ma możliwości usunięcia znaczników.

Z góry dziękuję.

+0

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

+0

Strona została już otwarta w drugiej zakładce :) Właściwie to mam pomysł DOM z tego wpisu :) @Arvind –

Odpowiedz

2

Możliwym rozwiązaniem byłoby rozebrać tagów, jeśli stylizacji tej HTML nie jest niezbędna, więc można wyciąć, gdzie chcesz: http://php.net/manual/es/function.strip-tags.php

Innym rozwiązaniem dla przeglądarek CSS3, byłoby wykorzystanie text-overflow , przeczytaj więcej na ten temat: http://davidwalsh.name/css-ellipsis

+0

Niestety pierwsza opcja nie jest możliwa. Jeśli chodzi o drugą opcję, już o tym pomyślałem. Ale nadal, w jaki sposób można dodać link do czytania w dalszym ciągu za pomocą css? –

0

zakładając używasz jQuery

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') 

     }) 
    }) 

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;} 

Wystarczy dowód koncepcji. Wymaga optymalizacji JS:

+0

Znalazłem już taką wtyczkę: http://dotdotdot.frebsite.nl/. Jedyny problem z jQuery polega na tym, że czeka on na załadowanie strony, więc zawartość najpierw ładuje się tak, jak musi, następnie zostaje przycięta (nawet przy użyciu przepełnienia: ukryta jest kawałek tekstu, który pojawia się i sprawia, że ​​obraz jest niewygodny). Chociaż nie jest idealny, jeśli nie mogę znaleźć lepszego rozwiązania, przyjmuję tę odpowiedź jako poprawną. Wielkie dzięki za sugestię. –