Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][PHP]Zmiana zawartości linku wyświetlanych artykułów z bazy, lub dodanie parametru z ID artkułu, [PHP] [JS]
bogdanh
post
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 22.04.2012

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
bogdanh
post
Post #3





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 22.04.2012

Ostrzeżenie: (0%)
-----


Piszesz: "To zamieniaj te linki w arcie z..."
Dodaj podpórkę bo nie mam pojęcia o co chodzi. (IMG:style_emoticons/default/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.


Ten post edytował bogdanh 9.07.2014, 15:42:09
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 809
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
bogdanh
post
Post #5





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 22.04.2012

Ostrzeżenie: (0%)
-----


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). (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Wyrazeniem regularnym podmienisz linki w arcie przed wyswietleniem
Go to the top of the page
+Quote Post
bogdanh
post
Post #7





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 22.04.2012

Ostrzeżenie: (0%)
-----


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ą?

Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 809
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  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);
Go to the top of the page
+Quote Post
bogdanh
post
Post #9





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 22.04.2012

Ostrzeżenie: (0%)
-----


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.

Go to the top of the page
+Quote Post
trueblue
post
Post #10





Grupa: Zarejestrowani
Postów: 6 809
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  1. $pattern='/<a .*?href=[\'\"\"]..\/pliki\/(.+?)[\'\"\"].*?>(.+?)<\/a>/i';
Go to the top of the page
+Quote Post
bogdanh
post
Post #11





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 22.04.2012

Ostrzeżenie: (0%)
-----


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ć. (IMG:style_emoticons/default/smile.gif)
Działa. (IMG:style_emoticons/default/smile.gif)
Co prawda w pętli, już przy 300 artykułach daje się odczuć opóźnienie ale musi być. (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




A co ty na dzien dobry na stronie wyswietlasz 300 artykulow? O stronicowaniu nie slyszal?
Go to the top of the page
+Quote Post
bogdanh
post
Post #13





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 22.04.2012

Ostrzeżenie: (0%)
-----


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. (IMG:style_emoticons/default/smile.gif)
Chciałem od reki zasymulować 300 równoczesnych załadowań.
Tak czy inaczej jest ok. (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 03:04