Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] powiększanie zdjęcia w tekście
Forum PHP.pl > Forum > PHP
dachu
Witam,
Chciałbym zrobić coś takiego, w tekście mam zdjęcia,, np. zdjecie.jpg , jednocześnie na ftp ładowane jest zdjęcie o tej samej nazwie, tylko z końcówką (_b) - zdjecie_b.jpg (jest to zdjęcie powiększone).
Nie wiem jak napisać skrypt, dzięki któremu w tekście sprawdzane było by czy istnieje _b (itp) jeśli tak, to zamiana była by zapisu na powiększenie:

  1. <a href="images/zdjecie.jpg" id="lightbox"><img src="images/zdjecie_b.jpg" /></a>


czyli zapis do bazy treści był by np:

  1. blb ble ble ble <img src="images/zdjecie.jpg" /> ble ble ble


jeśli jest ta sama nazwa pliku na serwerze: zdjecie_b.jpg to zapis, powiększający zdjęcie w lightboxie:

  1. blb ble ble ble <a href="images/zdjecie.jpg" id="lightbox"><img src="images/zdjecie_b.jpg" /></a> ble ble ble


lub inny sposób,, galeria odpada,,, zależy mi na tym, żeby zdjęcie było osadzane gdziekolwiek w tekście a nie szablonowo :|
prosze o pomoc
nospor
Wyrażeniem regularnym pobierasz nazwę zdjęcia, sprawdzasz czy to zdjęcie istnieje na ftp i jeśli tak to zamieniasz na wersję jaką chcesz.
deha21
Jeśli dobrze zrozumiałem to chodzi o zwykły warunek IF z użyciem file_exists i pathinfo (z rozbiciem na filename i extension), hm?
nospor
to musisz jeszcze użyć preg_match oraz str_replace.
dachu
Pokombinowałem w taki sposób i działa,,, ale tylko dla pierwszego napotkanego obrazka :/ a chciałbym dla każdego ...

  1. preg_match ("/<img(.*?)>/is", $tresc, $znalezione);
  2.  
  3. $tresc = str_replace($znalezione[0],'<a href="'.str_replace(".jpg","_b.jpg",$znalezione[1]).'">'.$znalezione[0].'</a>',$tresc);
  4.  
  5. $tresc = str_replace('<a href=" alt=""','<a href="',$tresc); // wywalam alt z znacznika a
  6. $tresc = str_replace('<a href=" src="','<a href="',$tresc); // wywalam src z znacznika a
  7. $tresc = str_replace('/"',' ',$tresc); // wywalam niepotrzebny "
nospor
Skoro nie sprawdzasz, czy plik istnieje, więc możesz użyć od razu preg_replace()
Jakbyś jednak chciał sprawdzać czy istnieje na ftp, to preg_match_all()
dachu
z preg_match_all wywala mi Array ... :/
nospor
Bo z preg_match_all masz użyc pętli.... preg_match_all zwraca ci wsyzstkie wyniki i ty masz przez nie przeiterować i w petli zamieniac.
dachu
Cytat(nospor @ 3.10.2011, 07:59:14 ) *
Bo z preg_match_all masz użyc pętli.... preg_match_all zwraca ci wsyzstkie wyniki i ty masz przez nie przeiterować i w petli zamieniac.


tylko nie wiem jak to zapisać sad.gif
nospor
print_r($wynikpregmatchall);
zobacz co zawiera i poprostu użyj pętli.

FOREACH
dachu
na pętli,, ale to jest w treści np. artykułu...
nospor
Sorki, ale Twojego poprzedniego posta ni w ząb nie kumam.
dachu
  1. treść treść treść treść treść treść treść treść treść treść <img src="obrazek1.jpg" alt="" />treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść<img src="obrazek2.jpg" alt="" /> treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść


wyświetlony tekst z bazy powinien być taki:

  1. treść treść treść treść treść treść treść treść treść treść <a href="obrazek1_b.jpg"><img src="obrazek1.jpg" alt="" /></a> treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść <a href="obrazek2_b.jpg"><img src="obrazek2.jpg" alt="" /></a> treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść treść

nospor
No to wiemy. Dostałeś juz rozwiązanie parę postów wcześniej.
preg_match_all zwraca ci tablicę szukanych fraz. Teraz lecisz po nich w petli i zamieniasz, dokładnie tak samo jak zamieniałeś dla jednego w preg_match.
phpion
Nie prościej/lepiej preg_replace lub preg_replace_callback?
nospor
isałem już o preg_replace ale zostało to zignorowane. Pewnie dlatego, że trzeba sprawdzić czy taki plik ostnieje na ftp.
Co do preg_replace_callback() to jest równie "skomplikowane" co preg_match_all
dachu
Próbuje tak:, ale coś źle wyświetla,,,

  1. preg_match_all ("/<img(.*?)>/is", $tresc, $znalezione);
  2.  
  3. foreach ($znalezione as $wynik)
  4. {
  5.  
  6. $tresc= str_replace($wynik[0],'<a href="'.str_replace(".jpg","_b.jpg",$wynik[1]).'">'.$wynik[0].'</a>',$tresc);
  7. $tresc= str_replace('<a href=" alt=""','<a href="',$tresc);
  8. $tresc= str_replace('<a href=" src="','<a href="',$tresc);
  9. $tresc= str_replace('/"','',$tresc);
  10.  
  11. }
  12.  
  13. echo $tresc;
nospor
print_r($znalezione);
Patrzyłes jak ta tablicy wygląda? Pokaż nam.
dachu
Cytat(nospor @ 3.10.2011, 10:14:34 ) *
print_r($znalezione);
Patrzyłes jak ta tablicy wygląda? Pokaż nam.


Array ( [0] => Array ( [0] => tutaj kod obrazka cały [1] => tutaj kod obrazka cały ) [1] => Array ( [0] => src="obrazek1.jpg" / [1] => src="obrazek2.jpg" / ) )
nospor
No i jak widać nazwy obrazków są pod indeksem 1 i dopiero po nim masz iterować.
  1. foreach ($znalezione[1] as $key=>$wynik){
  2. echo $wynik
  3. }
dachu
Cytat(nospor @ 3.10.2011, 10:24:18 ) *
No i jak widać nazwy obrazków są pod indeksem 1 i dopiero po nim masz iterować.
  1. foreach ($znalezione[1] as $key=>$wynik){
  2. echo $wynik
  3. }


to mi nic nie wyświetla
nospor
Bo zjadłem średnik a ty skopiowałeś jak leci
dachu
wymęczyłem, i ostatecznie wystarczyło tylko:
  1. $html = preg_replace("/<img src=\"(.*?)\"[^>]*>/e", "'<a href=\"'.'\\1'.'\"><img src=\"'.'\\1'.'\" /></a>'", $html);
  2. $html = str_replace('.jpg">', '_b.jpg">' ,$html);


zamykamy temat,,,
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.