Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Replace juttu arrayssa

Sivun loppuun

pistemies [29.01.2012 23:01:10]

#

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?

Macro [30.01.2012 07:17:07]

#

<?php
for($i=$i;$i<count($imagesize);$i++){
-->
for($i = 0; $i < count($imagesize); $i++) {

makumaku [30.01.2012 07:42:19]

#

Ja miksi jätät huomioimatta kuvat joiden leveys on 570px?

Lebe80 [30.01.2012 10:38:22]

#

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);

}

pistemies [30.01.2012 11:37:42]

#

Eipä tämä tunnu tomivan. Tuon $i:n olen nollannut...

pistemies [30.01.2012 11:51:10]

#

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.

pistemies [30.01.2012 12:07:39]

#

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

pistemies [30.01.2012 13:38:18]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta