Pikku pulma tässä oikean kuvan leveys-tietojen järjestelyssä. Rajusti karsittua skriptiä tässä... Tällaisella scriptillä haen imagesize-arrayhyn kuvien tiedot. Http-array sisiältää kuvien osoitteet.
<?php for($i=0;$i<count($http);$i++){ $http[$i] = str_replace(" ","%20",$http[$i]); $imagesize[$i] = getimagesize(trim($http[$i])); } for($i=$i;$i<count($imagesize);$i++){ if($imagesize[$i][0] > 570){ $mess = preg_replace("/\[img\](.*?)\[\/img\]/i","kuva 1",$mess); } elseif($imagesize[$i][0] > 400 && $imagesize[$i][0] < 570){ $mess = preg_replace("/\[img\](.*?)\[\/img\]/i","kuva 2",$mess); } elseif($imagesize[$i][0] < 401){ $mess = preg_replace("/\[img\](.*?)\[\/img\]/i","kuva 3",$mess); } } ?>
Imagesize-arrayn ulkoasu:
Array ( [0] => Array ( [0] => 800 [1] => 600 [2] => 2 [3] => width="800" height="600" [bits] => 8 [channels] => 3 [mime] => image/jpeg ) [1] => Array ( [0] => 435 [1] => 485 [2] => 1 [3] => width="435" height="485" [bits] => 7 [channels] => 3 [mime] => image/gif ) )
Preg-replace juttu hoituu aina tuon suurimman kuvan mukaan. Jos laittaa tuonne silmukkaan, joka on tuon pienemmän kuvan mukainen, vaikka echo "OK"
se tulostuu sieltä, mutta tuon replacen se hoitaa tuossa ylemmässä silmukassa. Miksi?
Ja miksi jätät huomioimatta kuvat joiden leveys on 570px?
Varmaan kannattaisi heittää noista if-lauseista turhan, jo tarkistetut arvot hittohon:
if($imagesize[$i][0] > 570){ $mess = preg_replace("/\[img\](.*?)\[\/img\]/i","kuva 1",$mess); } elseif($imagesize[$i][0] > 400 ){ $mess = preg_replace("/\[img\](.*?)\[\/img\]/i","kuva 2",$mess); } else { $mess = preg_replace("/\[img\](.*?)\[\/img\]/i","kuva 3",$mess); }
Eipä tämä tunnu tomivan. Tuon $i:n olen nollannut...
Olen muutellut tätä vaikka miten, viimeksi näin:
<?php for($i=0;$i<count($imagesize);$i++){ if($imagesize[$i][0] > 570){ $iso = $i; } elseif($imagesize[$i][0] > 400){ $keskik = $i; } else{ $pieni = $i; } if($i == $iso){ # kuva 1 } if($i == $keskik){ # kuva 2 } if($i == $pieni){ # kuva 3 } }
Mutta aina se toimii samoin, ottaa tuo isomman kuvan ($mess-tekstissä ja $http-arrayssa ekana olevan kuvan) replace-tekstin.
Offtopic
Ehkä tämä on sellaista joutavaa tarkkuden hakua, eikä siksi ala toimimaan. :) Nimittäin olen tehnyt sivuilleni seuraavia muutoksia:
1. Sivun maksimi-leveys suuremmilla näytöillä on 1220px.
2. Pienemmillä näytöillä tai selainikkuan pienentäminen suurella näytöllä kuitenkin kaventaa sivua selaimeen sopivaksi.
3. Jos javascript ei ole kävijällä päällä, sivun leveys on 1150px.
Tämä skripti sitten koskee sivua, jossa kävijöillä on mahdollisuus lisätä kuvia käyttämällä kuvalinkkejä.
Siihen olen suunnitellut suraavia asetuksia:
1. Suurilla näytöillä (leveydessä 1220px) kuva näytetään maksimissaan 570px levyisenä, suuremmat kuvat pienennetään suunnilleen tuohon kokoon (90%).
2. Pienemmillä näytöillä maksimi kuvan koko on 400px, pienemmät kuvat näytetään sellaisenaan.
3. Jos kävijällä ei ole javascript päällä, kuvan maksimi koko on 400px tai 90% kuvan koosta riippuen.
Nämä hommat ihan sen takia, etteivät kävijöiden lisäämät kuvat venytä sivua tai paremminkin, kun on kyse css-muotoilusta, kuvasta osa ei tule sivupalkin päälle.
En oikein haluaisi tehdä sellaista juttua, että jos on liian leveä kuva, sitä ei näytetä ollenkaan.
Offtopic
Saimpa onnistumaan! Tähän tyyliin:
<?php $replis = array(); for($i=0;$i<count($imagesize);$i++){ if($imagesize[$i][0] > 570){ array_push($replis,"<img class=\"iso-kuva\" src=\"".$http[$i]."\" alt=\"iso-kuva\"/>"); } elseif($imagesize[$i][0] > 400){ array_push($replis,"<img class=\"keskik-kuva\" src=\"".$http[$i]."\" alt=\"keski-kuva\"/>"); } else { array_push($replis,"<img class=\"pieni-kuva\" src=\"".$http[$i]."\" alt=\"pieni-kuva\"/>"); } } for($i=0;$i<count($replis);$i++){ $http[$i] = str_replace("/","\/",$http[$i]); $http[$i] = str_replace(".","\.",$http[$i]); $mess = preg_replace("/\[img\]$http[$i]\[\/img\]/i",$replis[$i],$mess); } ?>
Sitten vaan värkkäämään noita css-tyylejä ja keille näytetään mitäkin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.