Skróty artykułów w systemach zarządzania treścią

Niejednokrotnie pisząc aplikację internetową spotykamy się z problemem wstępów do artykułów, wpisów na blogach czy aktualności, których pełna treść ukazuje się dopiero po kliknięciu w odpowiedni link. Chciałbym poświęcić chwile na przedstawienie trzech, prostych w implementacji sposobów, dzięki którym otrzymamy możliwość tworzenia takich skrótów zawartości naszej strony.

Pole skrótu w bazie

Jest to chyba najprostsze rozwiązanie, które sprowadza się do stworzenia dodatkowego pola w bazie danych, w którym będzie przechowywana skrócona wersja treści. Dzięki temu na stronie z listą artykułów, czy newsów pobieramy z bazy tylko wartość pola, w którym przechowujemy krótką wersję (np. introtext), a gdy chcemy wyświetlić szczegółową informacje to pobieramy dane z drugiego pola (fulltext).

Artykuły w bazie

Zalety:

  • łatwa implementacja, skrót artykułu otrzymujemy natychmiast bez dodatkowych ingerencji w zapytanie SQL
  • skrót nie musi zawierać fragmentu tekstu pełnego, oba pola mogą zawierać niezależną od siebie treść.

Wady:

  • powstaje kolejne pole w panelu administracyjnym do wypełnienia, często będące kilkoma akapitami tekstu pełnego.

Pierwsze n znaków

Jest to również bardzo prosta metoda, której podstawową zaletą jest całkowita automatyzacja tworzonego skrótu tekstu. Właścicielowi serwisu pozostaje tylko ustawienie do ilu znaków chciałby ograniczyć skrót. Implementacja takiego rozwiązania może być przeprowadzona w dwojaki sposób, po stronie serwerowej np w PHP:

function charsLimit($string, $limit = 400)
{
return trim(substr($string, 0, $limit));
}

lub po stronie bazy danych, przy użyciu języka SQL i funkcji LEFT.

Rozwiązanie to ma jedną zasadniczą wadę, istnieje możliwość iż podczas skracania tekstu pozostawimy niedomknięte tagi HTML, co może negatywnie wpłynąć na wygląd całej naszej strony. Zatem, albo będziemy używać tej techniki przy nieskomplikowanych tekstach gdzie zastosowanie strip_slashes, nie wpłynie negatywnie na prezentacje naszej strony, albo skorzystamy ze skryptów, które pozamykają tagi jak np. HTML Purifier, co jednak nieuchronnie wiąże się ze zmniejszeniem wydajności naszej aplikacji internetowej.

Zalety:

  • pełna automatyzacja tworzenia skrótów
  • możliwość zmiany długości skróconego tekstu w każdym momencie

Wady:

  • tylko do prostych tekstów
  • generuje błędy w HTMLu (niedomknięte tagi)
  • do wygodnego użytkowania wymagane dodatkowe skrypty, co powoduje spadek wydajności

Znacznik w treści

Trzecia i ostatnia metoda tworzenia skrótów, polega na dodaniu specyficznego znacznika do treści, który zostanie wykorzystany do podzielenia tekstu podczas zapytania do bazy danych.Na podobnej zasadzie działa <!-- more --> w Wordpress.

PagebreakPierwszym krokiem przy implementacji tej metody jest dodanie w wybranym przez nas miejscu znacznika, którego będziemy potem wyszukiwać w tekście, możemy go wpisać ręcznie, lub jeżeli korzystamy z jakiegoś zewnętrznego edytora WYSIWYG typu TinyMCE możemy to zrobić poprzez odpowiednie zdefiniowane wtyczki (Pagebreak). Najlepiej jest jeżeli dodawany przez nas znacznik jest nie widoczny dla użytkownika, więc podajemy go w formie komentarza HTML. Teraz jeżeli tak stworzony tekst znajduje się w bazie pobranie z niego danych może wyglądać np. tak:

SELECT *, LEFT(content, LOCATE('<!-- pagebreak -->', content)-1) as content_short 
FROM cms_articles
ORDER BY data_add DESC

Dzięki powyższemu zapytaniu w zmiennej content_short, będzie znajdowała się cześć do wystąpienia naszego znacznika, a w zmiennej content, pełny tekst. Jak widać na powyższym listingu skorzystaliśmy, podobnie jak w metodzie drugiej, z funkcji LEFT. Jednak tym razem zamiast na sztywno określić długość tekstu, pobierzemy pozycje znacznika (<!-- pagebreak -->). Uzyskamy to dzięki funkcji LOCATE, która zwraca wartość wystąpienia pierwszego znaku wzorca w całym tekście (<). Należy pamiętać o odjęciu 1 wartości tak, aby pierwszy znak nie zawierał się w naszym skróconym tekście. Oczywiście podobny efekt możemy uzyskać w PHP poprzez funkcję explode. Wybór pozostawiony jest preferencji programisty.

Zalety:

  • pełna kontrola nad podziałem treści
  • możliwość stosowania przy dużej ilości tagów HTML
  • łatwa implementacja

Wady:

  • tekst skrócony musi być częścią tekstu pełnego

Podsumowanie

Na tym blogu zastosowałem metodę wykorzystującą znaczniki w tekście, według mnie idealnie nadaję się do takich systemów jak blogi czy systemy informacyjne. Oczywiście wybór metody powinien zależeć od wymogów serwisu, ja jednak skłaniałbym się do wyboru pomiędzy pierwszą i trzecią, są one najbardziej efektywne i nie przysparzają żadnych nie oczekiwanych problemów. Oczywiście nie są to wszystkie możliwe rozwiązania problemu skrótów artykułów, jeżeli znasz lub stosujesz inną technikę, zapraszam do komentowania i dzielenie się wiedzą i doświadczeniami.

DyskusjaKomentarze: 4

  • Tomasz Kowalczyk 14 styczeń 2011 17:34
    Niedawno męczyłem się ze skrótami artykułów w jednym z tworzonych serwisów, ale udało się to jakoś zrobić z wykorzystaniem funkcji operujących na stringach w PHP. Szkoda, że nie widziałem tego wpisu wcześniej. ;]
  • Michał Koza 23 luty 2011 21:23
    a czy myślałeś o takim rozwiązaniu:
    2 pola - skrót, rozwinięcie
    w 1 polu jak sama nazwa wskazuje jest trzymana "zajawka" artykułu, a po kliknięciu "czytaj więcej" dodawany jest do niej tekst z rozwinięcia (łączone 2 pola z bazy)?
    do tej pory używając datalife engine zdany byłem na pierwsza metodę, którą opisujesz, ale przy dużej ilości artów (aktualnie mam tego około 500 i baza waży ~1,3mb, ale kiedyś zetknąłem się bodajże w statystykach exsite.pl gdzie okolo 170000 artów było z rozmiarem bazy ponad 1gb) baza nabiera na wadze, a myślę, że dałoby się tego uniknąć. jedyny mankament to wydłużony czas oczekiwania na wykonanie zapytania, ale myślę, że to mała różnica.
    • Krzysztof Bachula 27 luty 2011 11:07
      Hmm... twoja propozycja to jest dokładnie to samo co rozwiązanie pierwsze. Co do rozmiaru bazy danych to jeżeli będziesz miał sporo artykułów to rozrostu bazy nie unikniesz. Oczywiście, jeżeli zawsze "skrót" będzie tylko powtarzającą się częścią całego artykułu to optymalnie, według mnie, będzie wykorzystać metodę ze "znacznikiem more".
  • jarou 26 kwiecień 2013 11:41
    Stosuję aktualnie mix 1 i 2 rozwiązania. Artykuł podzielony jest na lead i content. Jeśli lead spełnia kryterium długości to samodzielnie robi za skrótowca, jeśli nie - uzupełniany jest contentem do wymaganej liczby znaków. A ściślej rzecz biorąc do najbliższej spacji przed tą liczbą. To tak w uproszczeniu i zarysie, bo jest tam jeszcze kilka mechanizmów poprawiających zawartość. W moim przypadku istotną kwestią jest zapewnienie możliwie największego automatyzmu i prostoty obsługi, dlatego zrezygnowałem z wprowadzania dodatkowych tagów. Skrótowce są cache'owane, więc filtry zamykające tagi oraz pozostałe procedury nie stanowią krytycznego problemu. Pozdrawiam.

Dodaj komentarz Komentarze są moderowane, a przy linkach używane jest rel="nofollow". Prosimy o nie reklamowanie i nie spamowanie w komentarzach.
Linki tworzone za pomocą tagu [url] np: [url=www.xyz.pl]xyz[/url]
Źródła za pomoc tagu [code] z wskazaniem języka np. [code=php] echo [/code]

Copyright © 2019 Webnote

Projekt i wykonanie: Xelos

Dodaj link