Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML]Podświetlanie cytowanego fragmentu
Forum PHP.pl > Forum > Przedszkole
Blackhole
Cześć!

Mam swój autorski mechanizm komentarzy. Przymierzam się do jego udoskonalenia o pewien "wodotrysk". Jest już możliwość cytowania wypowiedzi innych poprzez wstawienie znaczników "quote". Udoskonalenie ma działać tak, że jak ktoś kliknie w cytowany fragment wypowiedzi, to uruchamiana jest kotwica do komentarza, gdzie ta cytowana wypowiedź się znajduje (to jest banał i już działa) oraz (i do tego mam pytania) cytowany fragment tekstu w pierwotnym komentarzu ma się podświetlić.
Zastanawiam się, jak to zrobić...

Pierwszy kłopot jest taki, że podświetlenie powinno być wykonane przez wstawienie SPAN wyświetlanego "inline" i nie wiem, czy da się tak, bo cytowany fragment może zawierać inny cytat, który zrealizowany jest na znacznikach DIV wyświetlanych "block". Czy mam podstawy w ogóle się o to martwić? (to podstawowe pytanie)

Kolejnym jest to, że jeden komentarz może być przecież cytowany kilka razy i to różne jego fragmenty, które mogą na siebie zachodzić. Nie da się więc zrobić tak, iż w momencie cytowania wywołać z Ajax'a zmianę komentarza ze źródłem cytatu i wstawić znaczniki SPAN, a po kliknięciu w kotwicę ustawić tylko danego znacznikowi jakąś nazwę klasy.
Dałoby się jednak określić granice cytowanego tekstu wstawiając jakiś własny bbcode przetwarzany w trakcie wyświetlania komentarza. To rozwiązanie możliwe do zrobienia pociągałoby jednak za sobą konieczność każdorazowego przetworzenia (odwołanie się do bazy po jego treść) komentarza (przy kliknięciu w kotwicę) i zamiany jednego z cytowanych z niego fragmentów oznaczonych przez bbcode (bo może ich być więcej) na znaczniki SPAN i wstawienie na stronę po takiej zmianie, by pokazać podświetlenie. Do tego właśnie się przymierzam.

Macie może jakieś sugestie?
Kshyhoo
Może tak, u mnie działa:
  1. function highlight_words($word, $subject) {
  2. if (is_array($word)) {
  3. $regex_chars = "*|#.+?(){}[]^$/";
  4. for ($j = 0; $j < count($word); $j++) {
  5. for ($i = 0; $i < strlen($regex_chars); $i++) {
  6. $char = substr($regex_chars, $i, 1);
  7. $word[$j] = str_replace($char, '\\'.$char, $word[$j]);
  8. }
  9. $subject = preg_replace("/(".$word[$j].")/is", "<span style='background-color: yellow; font-weight: bold; padding-left: 2px; padding-right: 2px'>\\1</span>", $subject);
  10. }
  11. }
  12. return $subject;
  13. }
Blackhole
Po, co podałeś, jest o wiele prostsze od mojego przypadku. Tu masz podświetlanie pojedyńczysz słów, a ja potrzebuję dłuższych fraz, które mogą na siebie zachodzić.
Kshyhoo
A dłuższych fraz nie można trzymać w zmiennej?
Blackhole
Pewnie, że można, ale u mnie mogą się one na siebie nakładać.

Ma ktoś jeszcze jakieś rady/wskazówki?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.