Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP]Zmiana zawartości linku wyświetlanych artykułów z bazy, lub dodanie parametru z ID artkułu
Forum PHP.pl > Forum > Przedszkole
bogdanh
W pętli wyświetlam artykuły z bazy (kilkaset ++). W wielu z nich sa linki do dokumentów typu http://domena.pl/pliki/rozne-pliki.pdf.
Potrzebuję poddać analizie to co się dzieje, więc przekierowuje przez .htaccess wszystkie linki do katalogu /pliki do pliku np. analiza.php.
Problem w tym, że potrzebuję otrzymać w pliku analiza.php także ID z bazy danych konkretnego artykułu , w którym zawarte sa linki (z "klikanego" dokumentu).
Nie mogę znaleźć rozwiązania.
Do .htaccess chyba nie da sie przekazać dodatkowej zmiennej...
Ciasteczka/sesje przy tej ilości artykułów wyświetlanych równocześnie strasznie skomplikowały by kod i spowolniły pracę...
Nie mogę ingerować w bazę, żeby zmieniać linki dodając parametry m. in. z powodu częstych aktualizacji artykułów przez redaktorów...

Jakieś podpowiedzi?
nospor
Te linki są do plikow w twojej domenie?
To zamieniaj te linki w arcie z
http://domena.pl/pliki/rozne-pliki.pdf
na
http://domena.pl/pliki/1,rozne-pliki.pdf

gdzie 1 to id artykulu.
bogdanh
Piszesz: "To zamieniaj te linki w arcie z..."
Dodaj podpórkę bo nie mam pojęcia o co chodzi. sad.gif

Te pliki sa w mojej domenie (domenie serwisu).
Wyszukanie linków w tekście było by trudne i czasochłonne.
Teksty często sa długie (po kilkadziesiąt kilobajtów) tworzone w edytorze HTML (tam też sa linkowane pliki z serwera).
Analiza tekstów aby w każdym znaleźć kilka lub kilkanaście <a href=".....> i dodać ID obciążała by serwer.
Już nie mówiąc o pomyłkach, bo autorzy mogą linkować także inne rzeczy.
trueblue
Spróbuj się oprzeć o HTTP_REFERER. Przy czym URL strony z artykułem musiałby zawierać ID artykułu, tak aby przy obróbce referera wyłuskać to ID.
bogdanh
Cytat(trueblue @ 9.07.2014, 18:14:59 ) *
Spróbuj się oprzeć o HTTP_REFERER. Przy czym URL strony z artykułem musiałby zawierać ID artykułu, tak aby przy obróbce referera wyłuskać to ID.

To już przećwiczyłem i padłem - stad moje pytanie.
Szukam sposobu na zmianę zawartości linków, aby dodać to ID artykułu, ale bez przeszukiwania całości tekstu..
Wyobraziłem sobie coś takiego...
Wyświetlanie artykułów następuje w pętli php (plus stronicowanie).
W każdym przebiegu przekazuję ID do np. skryptu JS (nie wiem jak), który podmienia link na stronie dodając ID do ciągu (nie wiem jak). smile.gif
Innych sposobów poza przeszukiwaniem tekstu nie wymyśliłem.
To przeszukiwanie odpada - zbyt czasochłonne przy kilkuset artykułach i kilkuset czytających równocześnie rózne teksty.
Jak pisałem nie moge ingerować w zawartość artykułów w bazie - aby dopisywać ID - z wielu powodów niezależnych ode mnie.
nospor
Wyrazeniem regularnym podmienisz linki w arcie przed wyswietleniem
bogdanh
Cytat(nospor @ 9.07.2014, 18:45:50 ) *
Wyrazeniem regularnym podmienisz linki w arcie przed wyswietleniem

Tego właśnie chciałem uniknąć, ale jeżeli nie da się inaczej to jak, bo nie moge dać rady...
Przykładowy tekst z bazy do wyświetlenia:
//-------
<p>Poniżej znajduje się link do graficznego przedstawienia struktury organizacyjnej.</p>
<p><strong>Uwaga: celowo wprowadzono zmianę we wpisie, aby zaprezentować zmiany.</strong></p>
<p><a href="../pliki/plik1.pdf">Link do dokumentu</a></p>
<p>Poniżej mamy kolejny link do dokumentu</p>
<p><a href="../pliki/plik drugi ze pacją _ - i ó ł wprowadzony przez idiotę.pdf">Link do dokumentu2</a></p>
//-------
Tutaj poległem. Nie dość, że tych linków przeplatanych różnymi treściami może być sporo, to jeszcze idioci/tki wczytują na serwer i linkują pliki mające w nazwach rózne dziwne rzeczy.
Na to nie mam wpływu!
Jak sobie poradzić z "wyłuskaniem" linków i podmianą?

trueblue
  1. $tresc='tutaj treść';
  2.  
  3. $pattern='/<a .*?href=['""]..\/pliki\/(.+?)['""].*?>(.+?)<\/a>/ig';
  4. $replacement='<a href="../pliki/id,$1">$2</a>'; //id to oczywiście id artykułu
  5. $tresc=preg_replace($pattern,$replacement,$tresc);
bogdanh
Cytat(trueblue @ 9.07.2014, 20:26:43 ) *
  1. $tresc='tutaj treść';
  2. $pattern='/<a .*?href=['""]..\/pliki\/(.+?)['""].*?>(.+?)<\/a>/ig';
  3. $replacement='<a href="../pliki/id,$1">$2</a>'; //id to oczywiście id artykułu
  4. $tresc=preg_replace($pattern,$replacement,$tresc);

Dziękuję.
Niestety nie działa.
Logi wykazują błąd w linii $pattern.
Zapewne chodzi o powtarzające się apostrofy w href=['""]. i ['""].
Jednak po wstawieniu przed nimi "\" zmienna $tresc jest pusta.
Oczywiście po podstawieniu do pierwszej zmiennej $tresc prawdziwego ciągu.

trueblue
  1. $pattern='/<a .*?href=[\'\"\"]..\/pliki\/(.+?)[\'\"\"].*?>(.+?)<\/a>/i';
bogdanh
Cytat(trueblue @ 10.07.2014, 09:48:55 ) *
  1. $pattern='/<a .*?href=[\'\"\"]..\/pliki\/(.+?)[\'\"\"].*?>(.+?)<\/a>/i';

Dziękuję, ze w ogóle chce ci się pomagać. smile.gif
Działa. smile.gif
Co prawda w pętli, już przy 300 artykułach daje się odczuć opóźnienie ale musi być. smile.gif
nospor
A co ty na dzien dobry na stronie wyswietlasz 300 artykulow? O stronicowaniu nie slyszal?
bogdanh
Cytat(nospor @ 10.07.2014, 10:28:38 ) *
A co ty na dzien dobry na stronie wyswietlasz 300 artykulow? O stronicowaniu nie slyszal?

Hehehe - słyszał i robi. smile.gif
Chciałem od reki zasymulować 300 równoczesnych załadowań.
Tak czy inaczej jest ok. smile.gif
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.