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).
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.
Pierwszym 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
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.
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]