Moro!
Mulla on nyt tiedosto random.php, johon saan vaihtuvan kuvan/pelkästään kuvan nimem, mitä vaan... Nyt mun pitäs saaha se kuva laitettua taustakuvaks. Noh, helppohan se olis laittaa randomiin pelkkä kuvan nimi ja koodiin näin: background="<?php include("random.php") ?>".
Mutta sivu, mille koodi tulee, ei ole .php tiedosto. Kyseessä on phpbb:n tyylitiedostot, niiden .tpl tiedostomuotoa ei saa vaihdettua .php:ksi. Miten saan siis taustakuvaksi php tiedostossa lukevan kuvan nimen?
Pitäisin mahdollisena, että phpBB:n tyylitiedostoista voi ajaa PHP:ta jollakin tavalla, mutta en jaksa nyt tutustua asiaan. Muistelen kuitenkin, että joku phpBB:n versio käytti Smartya.
Varmasti onnistuva ratkaisu on CSS. PHP:lla tulostetaan CSS-pätkä, johon linkitetään phpBB:n tyylitiedostosta.
PHP-tiedosto menisi jotenkin näin:
<?php $kuvat = array("majava.jpg", "sorsa.jpg", "spiraali.png"); echo "body { background-image: url('" . $kuvat[array_rand($kuvat)] . "'); }"; ?>
phpBB:n tyylitiedostoon taas tulisi jotain tälläistä:
<html> <head> ... <link rel="stylesheet" href="random.php" type="text/css" /> </head> <body> ...jne. </body> </html>
Head-tagien sisään tulee siis <link>-tagi, joka linkkaa tuohon CSS:ää tuottavaan PHP-tiedostoon.
Ei onnistunu... Kokeilin laittaa random.php:n tyylitiedostoks @importilla ja <link>:illä. Random.php:ssä mulla oli siis tablen tyylit:
random{ background-repeat: no-repeat; width: 795; height: 259; background: <?php $kuvat = array(); $kuvat[] = "kuva1.jpg;"; $kuvat[] = "kuva2.jpg;"; $n = array_rand($kuvat); $z = explode(";", $kuvat[$n]); echo(' '.$z[0].' '); ?>; }
Ja koodiin laitoin td class="random", mutta taustakuvaa ei tule. Missä vika?
Äskeisessä koodipätkässäni oli pari virhettä, eikä enään pääse muokkaamaan. Nyt on taustakuvan näyttö oikeessa muodossa.
Löytyykö apuja?
Miltä näyttää kyseisen koodirimpsun tuloste? Jos koodi on oikein eikä taustakuva siltikään vaihdu, kannattaa kokeilla laittaa tyylitiedoston nimen perään joku randomi rimpsu vaikkapa time-funktiolla tyyliin @import url(style.css?<?php print time();?>); jolloin selain ei hae tyylitiedostoa välimuistista vaan joka kerta hakee tuoreen version.
Tuloste kyllä näyttää iha oikeelta:
td.random{
background-image: url("tausta.jpg");
background-repeat: no-repeat;
width: 795;
height: 259; }
Sivulla, jolle tyylitiedosto liitetään ei toimi php.
Ei toimi vieläkään... :/
Tontttu kirjoitti:
Ei toimi vieläkään... :/
Tehdäänpäs ainakin väliaikaisesti niin, että rasitetaan hieman palvelinta:
td.random{ background-image: url(tausta.php); background-repeat: no-repeat; width: 795; height: 259; }
Laita esim. images-kansioon taustakuvat (tausta1.jpg, tausta2.jpg, tausta3.jpg ja tausta4.jpg)
tausta.php:
<?php header("Content-type: image/jpeg"); $src = "images/tausta".rand(1,4).".jpg"; $im = imagecreatefromJPEG($src); imageJPEG($im,'',70); imageDestroy($im); ?>
saattaa sisältää virheitä, pistin ulkomuistista.
Pöh, mitä järkeä, eikö fiksumpi (/nopeampi) tausta.php olisi
<?php print file_get_contents("images/tausta".rand(1,4).".jpg"; ?>
Eipä vieläkään onnistunu..
td.random{ background-image: url("random.php"); background-repeat: no-repeat; width: 795; height: 259; }
random.php:
<?php $kuvat = array(); $kuvat[] = "ekakuva.jpg;"; $kuvat[] = "tokakuva.jpg;"; $n = array_rand($kuvat); $z = explode(";", $kuvat[$n]); echo("$z[0]"); ?>
Edellinen tulostaa siis kuvan nimen.
Niin, tuossa Lebe80:n koodissahan oli siis ideana vissiinkin se, että php-tiedosto ei tulosta mitään HTML:ää tai CSS:ää, vaan ihan pelkkää kuvadataa. Viittaus random.php:hen toimii siis täsmälleen samoin kuin viittaus kuva.jpg:hen, paitsi että random.php heittää joka kerralla eri kuvan.
Tuo php-tiedosto on siis ajateltava kuvatiedostona, jolloin varmaankin koodin idea hahmottuu. Juuri siksi tuossa alussa lähetetään tuo Content-type -otsake.
Sinun koodisi siis tulostaa kuvan nimen, vaikka pitäisi tulostaa itse kuva. Toivottavasti tajusit, vaikka tämä asia onkin mielestäni aluksi hieman hankala ymmärtää.
Noniiin, nyt toimii. :) Kiitos!
Aihe on jo aika vanha, joten et voi enää vastata siihen.