Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wstawianie linków wewnątrz tekstu
Forum PHP.pl > Forum > Przedszkole
adam882
Wita

Na niektórych strona internetowych zauważyłem, że wewnątrz dłuższych opisów, niektóre słowa zawierają linki np. do tagów. Sądzę, że są one tworzone automatycznie. Czy działa on na takiej zasadzie, że tekst rozbijany jest na każde słowo, a następnie jest ono sprawdzane, czy występuje w tablicy słów kluczowych? Jakie funkcje należałoby użyć do napisania takiego modułu? Na oko wydaje mi się, że taki moduł może być zasobożerny.
Shido
Coś w podobie mam zamiar robic w niedalekiej przyszlości.

Opcje jakie widzę:
1/ Tak jak piszesz rozbicie takiego tekstu na pojedyncze słowa i porównywanie, ale to jak sam zaówarzyłeś jest zasobożerne.

2/ Wykorzystanie fajnej funkcji strpos() która wyszukuje w stringach dany ciag znaków i zwraca na której pozycji zaczyna się dany ciąg np:
  1. $a = "ala ma kota, kot ma jagody";
  2. echo strpos($a, 'jagody');

Wyświetli 20 ponieważ "j" ( pierwsza litera jagody ) znajduje się na 20 pozycji w tablicy $a ( string to tablica znaków )
i jeszcze dalej się bawiąc z liczeniem długości szukanego slowa mozna kombinować dodawanie linka napisane na biegu:
  1. <?
  2. $szuk = 'jagody';
  3. $a = "ala ma kota, kot ma jagody";
  4. echo(''.$a.'<br /><hr />');
  5. $b = strpos($a, $szuk);
  6. if($b)
  7. {
  8. $a1 = substr($a, 0, $b);
  9. $a2 = substr($a, $b+strlen($szuk), strlen($b));
  10. $a = $a1.'<a href="#">'.$szuk.'</a>'.$a2;
  11. }
  12. echo(''.$a.'<br /><hr />');
  13. ?>


3/Można wykorzystać też str_replace(), funkcja ta znajduje dany ciąg w stringu i zamienia na inny:
  1. <?
  2. $szuk = 'jagody';
  3. $a = "ala ma kota, kot ma jagody";
  4. echo(''.$a.'<br /><hr />');
  5. $a = str_replace($szuk, '<a href="#">'.$szuk.'</a>', $a);
  6. echo(''.$a.'<br /><hr />');
  7. ?>


Jeszcze można sie bawić się z wywołaniem tego przy tworzeniu takiego stringa ( w tym samym skrypcie ) czy np. wysłaniem go równolegle by ajax sie nim zają. Zresztą sposoby wywołania sa dowolne.
adam882
Cóż, akurat o czymś takim już myślałem, ale mimo wszystko dzięki za odpowiedź. Jestem ciekaw, czy istnieje nieco bardziej optymalny sposób.
Shido
Wydaje mi się że optymalnie (dla servera) byłoby gdyby zrobić to w js, skoro java wykonuje się po stronie przeglądarki, to nie obciążalibyśmy tym servera. Jednak takie rozwiązanie jest dobre do tekstów które się często zmieniają. Ja w swoim skrypcie na pewno będę korzystał z str_replace() do tworzenia linków, a strpos() przy usuwaniu ich.
Wydaje mi się że jednak lepiej to puszczać od siebie, a by nie zajmowało to czasu planuje zrobić to przy pomocy ajaxa, czyli tu sobie dodam do bazy jakiś tekst do którego będą linki i razem z zapisem wyśle ajaxa by przeszukiwał resztę bazy i linkował.
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.