ugrás a tartalomhoz

Kép felbontása alapján változó "class" elem

athlonator · 2018. Dec. 4. (K), 18.02
Üdv.

Van egy adatbázisom, benne egy cikkek nevezetű tábla. A táblából kiolvasom az adatokat, amik a '$text' változóban rögzülnek,
Ezt vizsgálja a preg_replace, es keresi meg a képhivatkozásokat (<img>), hogy aztán ebből egy linket csináljon a kép címével, és a képnézegető várt class elemeivel. Szeretnén hogy az adott fv-be beszúrni egy feltételt, a kép felbontására vonatkozólag, vagy az is jó, ha a könyvtárat vizsgálja. De elég lenne csak annyi, hogy ezeket a kis képeket ne alakítsa át a függvényem hivatkozássà. Sőt, ez lenne a legjobb.
Hogyan tudnám átvariálni a kódom?
Előre is köszönöm a segítségeteket.

function callbackFunction($matches)
{
$subPattern = '/(?<name>\w+)\s*=\s*(['"])(?<value>[^\2]*?)\2/is';
$resultPattern = '<a data-title="%s" class="example-image-link" data-lightbox="example-set" href="%s">%s</a>';

$title = "";
$href = "";
if (preg_match_all($subPattern, $matches[1], $subMatches))
{
foreach ($subMatches['name'] as $idx => $name)
{
switch (strtolower($name))
{
case "alt":
$title = $subMatches['value'][$idx];
break;
case "src":
$parts = explode("/", $subMatches['value'][$idx]);
$last = array_pop($parts);
array_push($parts, $last);
$href = implode("/", $parts);
break;
}
}
if ($href)
{
return sprintf($resultPattern, $title, $href, $matches[0]);
}
else
{
return $matches[0];
}
}

else
{
return $matches[0];
}
}

$pattern = '/<img\s+([^>]+)\/?>/is';

$text = preg_replace_callback($pattern, 'callbackFunction', $text);?>
<div class="text"> <?echo $text?></div>
 
1

colorer

Pepita · 2018. Dec. 4. (K), 18.20
Színezett kód után megpróbálok válaszolni.
2

Mi a cél?

Pepita · 2018. Dec. 5. (Sze), 13.27
Itt úgy tűnik, hogy egy adatbázisban tárolt (kész) HTML stringet alakítasz át, kiírás előtt.
Valószínű, hogy inkább a HTML létrehozásakor kellene megtenni a szükséges átalakításokat, mert akkor csak egyszer kell. Ha egy valamilyen wysiwyg editorral szerkesztik a cikkeket, akkor esélyes, hogy azt is be lehetne configolni megfelelően.

SZERK:
A kép méretét pl a getimagesize függvénnyel tudod lekérdezni, de ehhez lennie kell GD supportnak a PHP-dban.
Továbbá ha nálad tárolt kép, akkor az URL-ből le kell képezned a fájl elérési útját; ha külső a hivatkozás, akkor csak allow_url_fopen=On esetén fog működni. Ha nem létezik a fájl, akkor warningot kapsz, ha létezik, de nem értelmezhető képként, akkor notice-t.

a kis képeket ne alakítsa át
Ezt úgy a legegyszerűbb, ha először külön bontod a két feladatot.
Az első rész csak kiválogatja a kép tageket, és ezeken iterálva (egyesével) meghív egy átalakító függvényt. Célszerű a teljes tag-et átadni ennek a függvénynek.
Az átalakító pedig szintén kész HTML-t ad vissza (mint a jelenlegi is, de) ha kicsi a kép, akkor ugyanazt, amit bemenő paraméterként kapott. Beteheti a külső div-eket is, amit jelenleg az utolsó sorban csinálsz.

Ha nincs GD, de van Gmagick, akkor ezzel is le lehet kérdezni a méretét.
3

Mi a cél?

athlonator · 2018. Dec. 6. (Cs), 21.48
Képzeld el úgy az egészet, mintha csak egy cikk lenne az index-en, vagy bármi más oldalon. A cikkek ugye tele vannak képekkel. Na most, ha valamelyik képre rákkantintok akkor megjelenik egy hasonló képnézegető mint ez.:


A cikkben viszont vannak olyan képek, mint pl. nyilak, és ezt nem szeretném, hogy a képnézegető belevegye,. Sőt azt sem szeretném, ha ezeket a jelenlegei kódom linkké alakítaná át. Tehát a kis képek csak simán képként szerepelnének a cikkeimben, nem pedig hivatkozásként.
Az hülyén néz ki, hogy ha valaki rákattint a cikkben szereplő képekre, majd elkezdi nézegetni, és látná ezeket az oda nem illő képeket is(mint pl. a nyíl képek).

Tehát, a jelenlegi kódomat kellene úgy átalakítani, hogy a preg_replace csak akkor alakítsa át linkké a képet, ha mondjuk nagyobb a felbontása, mint 300px, vagy az elérési útja nem egyezik meg pl. -mappaképek/nagy_kepek-.
Csak szintaktikailag nem tudom, hogyan lehet átalakítani. Ez a kód, amit kitettem már 3 éves. És csak kínlódok az átalakítással.

Már több cikk van megírva, így az nem lehetséges, hogy írjam meg őket.
4

Dobd ki, kezdd tiszta lappal

Pepita · 2018. Dec. 7. (P), 11.10
Ez a kód, amit kitettem már 3 éves. És csak kínlódok az átalakítással.
Nem érdemes foltozgatni, dobd el. Nulláról jól átgondolva sokkal könnyebb lesz megírni.

Jó, hogy így kifejtetted, így már "tiszta a kép". :) Az egy kicsit probléma, hogy a kép mérete alapján akarod eldönteni, hogy az adott kép "csak egy nyíl", vagy fotó. Lehet a nyíl is nagy, és a tényleg megjelenítendő kép is kicsi, simán lehet méretben átfedés - ha a meglévő cikkekben nincs, akkor szerencsés vagy.

Nagyjából marad a megoldási javaslatom: vedd külön a képek kiválogatását és egyesével végezd a mérést / átalakítást.
Annyival kiegészítve, hogy nem a cikk megjelenítésénél kéne ezt röptében kezelni, hanem egy egyszer futtatandó cli-t írj, ami a javított html-t vissza is menti a db-be + a cikk szerkesztőfelületét is "meg kell tanítani" az újfajta html készítésére.
Html átalakításban azt javaslom, hogy a "jó" képekhez adj hozzá egy új class-t, ez alapján a legtöbb képnézegető össze tudja szedni, hogy miket kell vetíteni. Nem érdemes jobban bonyolítani a html-t.