Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyszukiwanie obrazka i modyfikowanie stringi
Forum PHP.pl > Forum > Przedszkole
baracuda
Witam serdecznie,
Mam na stronie treści pobierane z bazy danych.

Załóżmy że mam zmienną $txt ze stringiem.

Zdarzają się w nich nich obrazki w różnych postaciach:
- <img alt="XXXX" class="img-fluid" src="random.name" style="height:930px; width:620px" />
- <img alt="XXXX" class="img-fluid" src="random.name"/>
- <img src="random.name"/>
etc

Potrzebuję dodać do każdego obrazka: class "picla" and data-label-class="label-class" - czyli w rezultacie:
- <img alt="XXXX" class="img-fluid picla" src="random.name" style="height:930px; width:620px" data-label-class="label-class"/>
- <img alt="XXXX" class="img-fluid picla" src="random.name" data-label-class="label-class"/>
- <img class="picla" src="random.name" data-label-class="label-class"/>


Wie ktoś może jak to zrobić?smile.gif
phpuser88
  1. $txt = str_replace('img-fluid','img-fluid picla', $txt);
  2. $txt = str_replace('/>','data-label-class="label-class"/>', $txt);

Najprościej, niekoniecznie najlepiej. ( $txt .= w zależności w jaki sposób wyświetlasz)
trueblue
Zanim uruchomisz ten plugin, dodaj po prostu brakujące wartości i atrybuty w JS.
https://api.jquery.com/addclass/
https://api.jquery.com/attr/
baracuda
Cytat(phpuser88 @ 9.05.2022, 22:18:47 ) *
  1. $txt = str_replace('img-fluid','img-fluid picla', $txt);
  2. $txt = str_replace('/>','data-label-class="label-class"/>', $txt);

Najprościej, niekoniecznie najlepiej. ( $txt .= w zależności w jaki sposób wyświetlasz)


to nie zadziała, bo w stringu mam też inne treści, tabelki itp... zdjęcia nie zawsze są :/

Cytat(trueblue @ 9.05.2022, 22:20:05 ) *
Zanim uruchomisz ten plugin, dodaj po prostu brakujące wartości i atrybuty w JS.
https://api.jquery.com/addclass/
https://api.jquery.com/attr/



to musi być po stronie php zmienione sad.gif
phpuser88
Najlepiej byłoby odpytać SQL gdzie znajdują się wartości, które chcesz modyfikować, a następnie wykonać UPDATE i mieć problem z głowy.
edit:
Dużo gorszym rozwiązaniem byłoby zastosowanie if'a ze strpos(), a następnie $txt = str_replace('img-fluid','img-fluid picla" data-label-class="label-class" ', $txt);
trueblue
Cytat(baracuda @ 9.05.2022, 22:38:41 ) *
to musi być po stronie php zmienione sad.gif

A możesz wytłumaczyć dlaczego w PHP?
Przecież biblioteka galerii jest w JS, przed jej uruchomieniem wystarczy dodać atrybuty i wartości również w JS. Co spowoduje, że skrypt galerii w trakcie inicjalizacji znajdziej to co potrzebuje i uruchomi się poprawnie.


Jeśli tak bardzo chcesz PHP:
https://kawalekkodu.pl/the-tag-is-out-there...domxpath-s01e01
https://kawalekkodu.pl/the-tag-is-out-there...domxpath-s01e02
https://kawalekkodu.pl/the-tag-is-out-there...domxpath-s01e03
https://kawalekkodu.pl/the-tag-is-out-there...domxpath-s01e04
Salvation
Cytat(trueblue @ 10.05.2022, 08:20:54 ) *
Przecież biblioteka galerii jest w JS

A gdzie jest taka informacja, że to o galerię chodzi? Bo przeczytałem temat i dopiero Ty wspominasz o galerii.

Ogólnie, to zrobiłbym to regexem i str_replace. Najpierw poszukaj czy zmienna $txt pasuje do patternu <img>, i później... Jeżeli ma już atrybut class, to dodaj klasę na końcu, jeżeli nie, to podmień 'img' na 'img class="..."' + jeżeli nie ma data-atrybutu, to podmień '>' na 'data-atrybut="...">'.
trueblue
Cytat(Salvation @ 10.05.2022, 08:48:39 ) *
A gdzie jest taka informacja, że to o galerię chodzi? Bo przeczytałem temat i dopiero Ty wspominasz o galerii.

A tutaj: http://arunmichaeldsouza.github.io/picla/
baracuda
Cytat(trueblue @ 10.05.2022, 09:13:31 ) *


Tak, chodzi o PICLA smile.gif

zrobiłem taki kod:

  1. $('.content-view img').each(function() {
  2. if ($(this).hasClass('picla') === false) {
  3. $(this).addClass('picla');
  4. $(this).attr('data-label-class', 'label-class');
  5. console.log('- dodaje do' + $(this).attr('src'));
  6. }
  7. });



ale nie dodaje napisów na zdjęciu (jak dodam ręcznie z poziomu kodu html to działa).

JS byłļy lepszy, ale nie chce działać sad.gif Chyba że robi się to jakoś inaczej?
trueblue
Z tego co widzę, to podpisy pobierane są z atrybutu alt.
Jeśli brak tego atrybutu, to podpisu nie będzie.
baracuda
Zdjęcie ma taki atrybut:
  1. <p style="text-align:justify">
  2. <img alt="ornitolog koordynujący montaż budek" src="foto.jpg" style="height:930px; width:620px"/>
  3. </p>


Po dodaniu JSa wyglądada:

https://ibb.co/k05fwBN
trueblue
W odpowiedniej kolejności uruchamiasz skrypty, tj. najpierw Twój, potem picla?
baracuda
Problem rozwiązany smile.gif Miałem złą kolejność 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.