Autor Zpráva
Tomast
Profil
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
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
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
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

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0