Autor | Zpráva | ||
---|---|---|---|
Tomast Profil |
#1 · Zasláno: 6. 6. 2011, 21:11:26
Zdravím, na jednom webu, teď už si nevzpomenu kterém, jsem viděl, že v textu byli zapuštěny obrázky s odkazy.
Napadlo mě, jak by se to dalo udělat, když si z DB vytáhnu nějaký proměnný řetězec, ve kterém je hafo obrázků, a okolo každého obrázku udělat odkaz. Podmínkou je, že nesmí být obrázek větší než 30000 obrazových bodů (výškaXšířka, nezáleží co je větší), pak by se odkaz neudělal. Pokud budu upravovat obrázky do řetězce přes nějaký editor (třeba tinymce) vždy se k nim napíše rozměr, takže to asi není problém přes nějakou fn potom vytáhnout. Myslím, že by to celé šlo přes preg_replace, ale vůbec se v tomhle nevyznám. Díky za rady. Tom |
||
Darker Profil |
#2 · Zasláno: 7. 6. 2011, 09:16:55 · Upravil/a: Darker
Pokud budeš mít v DB rozměry obrázků, šlo by to jednoduchým dotazem
SELECT * FROM DB WHERE rozlis<30000 Za předpokladu, že jde tedy do dotazu dát menšítko. Rozlišení lze klidně ukládat i pomocí PHP, na zjištění velikosti obrázku jsou funkce. |
||
Tori Profil |
#3 · Zasláno: 7. 6. 2011, 11:13:18 · Upravil/a: Tori
Tohle jste myslel?
$src = <<<EOT asdasd <img height="30" width="325" src="30x325.jpg">asd asd <img width='10' height=50 src="10x50.jpg">rrrrrrr aseds<img height=1000 src="1000x325.jpg" width='325'>asdfasdfsasdf EOT; function picReplace($matches) { $parts = explode(' ',$matches[0]); $width = $height = $src = ''; foreach ($parts as $att) { // projde jednotlivé vlastnosti prvku <img> $pos = strpos($att,'='); $name = substr($att,0,$pos); // případně strtolower(substr(....)) // trim zajistí, aby se daly použít hodnoty v uvozovkách, v apostrofech i bez nich $value = trim(substr($att,$pos+1), " \"'><"); // pokud narazí na jednu z těchto vlastností, uloží její hodnotu do proměnné stejného názvu. if (in_array($name, array('height','width','src'))) $$name = $value; } return ($height*$width > 30000) ? $matches[0] : "<a href='$src'>$matches[0]</a>"; } $out = preg_replace_callback('~<img[^>]*>~i', 'picReplace', $src); Šlo by použít i komplikovanější regulár a v callback funkci jen vynásobit výškaXšířka, ale muselo by být vždy stejné pořadí atributů. |
||
Tomast Profil |
#4 · Zasláno: 7. 6. 2011, 20:25:34
Tak tohle je na jedničku s hvězdičkou, funguje zatím bez problému! Díky moc, tohle než bych vypotil, tak by ze mě nic nezbylo. Díky!
Tom |
||
Časová prodleva: 13 let
|
0