Php funkcija unutar CSS-a

Pozdrav.

Potrebno mi je da izvučem određenu liniju iz tekstualnog fajla koji imam na serveru, i da tu liniju upotrebim kao backround u css klasi. Ta određena linija (npr peta linija) sarži link do neke slike.

Za izvlačenje linije koristio sam:

$lines = file('file.txt');
echo $lines[4];

Taj kod radi sasvim okej unuar php-a/html-a, ali imam problem sa ubacivanjem te iste funkcije (dakle $lines[4]) u CSS klasu.
Da napomenem da mi je taj CSS kod stavljen unuar php fajla (dakle nije externi css fajl), i konkretan css u koji trebam to ubaciti je:

#blog1 { background: url("LINIJA 5 OVDE") center center;}  

Pokušavao sam nekoliko varijanti, ali pošto nikad nisam ubacivao php unuar css-a pojma nemam kako to da uradim.

Unapred zahvalan,
Nikola

Huh, imaš tri načina:

  1. staviš php kod ravno u < head> filea unutar < style></ style> tagova. Malo zastarjelo, ali garantirano radi…
  2. Napraviš .php file i zavaraš browsere da misle kako je .css ( http://css-tricks.com/css-variables-with-php/ ) Problem je što ne radi na svim browserima (Navodno su maknuli iz IE-a ovu mogućnost jer su tako upadali u browsere) i na svim serverima…
  3. LESS - less je najnovija metoda, omogućava ti da napišeš css kod s varijablama, if funkcijama, matematičkim formulama i onda se putem .js čita ili možeš iz toga izgenerirati kod. Ja se nisam previše bavio s tim, ali uskoro bi ovo mogao postati standard…

Hm, nisam siguran da li smo se razumeli.
Dakle ja to sve radim unutar jednog php fajla - index.php. Unutar tog fajla imam prvo čist php kod, pa onda počinje html kod u kome imam naravno style tagove sa css kodovima. E sad ja sam na sam početak tog index.php fajla stavio

$lines = file('file.txt');

I sada samo unuar CSS koda trebam pozvati:

$lines[4];

Ako je to uopšte moguće tako uraditi, kao što rekoh nisam nikad tako nešto pokušavao.

Oke, znači, u < head> element, nakon što učitaš vanjske css fileove, stavi:

<style type="text/css">
#blog1 { background: url("<?php echo $lines[4]; ?>") center center;}
</style>

ako imas ovakav kod

<style>
#nesto{ width:200px;height:100px...}
...
</style>

mozes staviti ovako php unutar php filea u style

<style>
#nesto{width:<?php echo $lines['4'];?>}
...
</style>

jasno, zamjenis css properties s onim sto tebi treba

Hm, upravo probao, i neće da radi.
Evo kako izgleda taj php fajl o kom pričam…

    $lines = file('file.txt');
global $context, $modSettings;  
if ($context['user']['is_guest'])
{
		echo '
<style type="text/css">
/* animated spoiler CSS */
.spoilerbutton {cursor: pointer; width: 770px; border-radius: 3px; border: 0px; background: #D5DDE1; font-size: 18px; color: #fff; margin-bottom: 10px; padding: 6px 0px 8px 0px;}
.spoilerbutton:hover {background: #3A3A3A; border: 0px;}
.spoilerbutton:active {background: #3A3A3A; border: 0px;}
.spoiler {overflow:hidden;background: #f5f5f5;}
.spoiler > div {-webkit-transition: all 0.2s ease;-moz-transition: margin 0.2s ease;-o-transition: all 0.2s ease;transition: margin 0.2s ease;}
.spoilerbutton[value="LOAD MORE"] + .spoiler > div {margin-top:-100%;}
.spoilerbutton[value="LOAD LESS"] + .spoiler {padding:5px;} 
/* Peta linija iz txt fajla u css-u*/
#blog1 { background: url("<?php echo $lines[4]; ?>") center center;}
</style> 

<div id="blog1">
	<Div class="EntryDesc">
            <a href="';
			echo $lines[0];
			echo'" class="blog-article-a"><h3>';
			echo $lines[1];
			echo'</h3></a>
				<p>';
				echo $lines[2];
				echo'</p>
	</Div>
</div>
div class="line"></div>';

Da napomenem da prikaz ostalih linija iz tog fajla radi normalno bez problema.

Probaj ovako:

$lines = file('file.txt');
global $context, $modSettings;  
if ($context['user']['is_guest'])
{
?>
<style type="text/css">
/* animated spoiler CSS */
.spoilerbutton {cursor: pointer; width: 770px; border-radius: 3px; border: 0px; background: #D5DDE1; font-size: 18px; color: #fff; margin-bottom: 10px; padding: 6px 0px 8px 0px;}
.spoilerbutton:hover {background: #3A3A3A; border: 0px;}
.spoilerbutton:active {background: #3A3A3A; border: 0px;}
.spoiler {overflow:hidden;background: #f5f5f5;}
.spoiler > div {-webkit-transition: all 0.2s ease;-moz-transition: margin 0.2s ease;-o-transition: all 0.2s ease;transition: margin 0.2s ease;}
.spoilerbutton[value="LOAD MORE"] + .spoiler > div {margin-top:-100%;}
.spoilerbutton[value="LOAD LESS"] + .spoiler {padding:5px;} 
/* Peta linija iz txt fajla u css-u*/
#blog1 { background: url("<?php echo $lines[4]; ?>") center center;}
</style> 

<?php

echo '<div id="blog1">
	<Div class="EntryDesc">
            <a href="';
			echo $lines[0];
			echo'" class="blog-article-a"><h3>';
			echo $lines[1];
			echo'</h3></a>
				<p>';
				echo $lines[2];
				echo'</p>
	</Div>
</div>
div class="line"></div>';

Trebalo bi to jos urediti ali ovako bi barem trebalo raditi.

dodas {background:url( “.$lines[‘4’].”) center center;}

ali, sveukupno, nije ti najbolje rijesenje bas ovako pisati kod… ali valjda znas sta radis

Hm, iz nekog razloga ništa od toga nije radilo.

Na kraju sam morao da prepravim celokupnu strukturu fajla i sad radi, ali nisam na kraju ni koristio funkciju unuar css-a tako, već sam css stavio inline u div style i tako radi bez problema.

hvala na pomoći u svakom slučaju momci, svakako ću se malo pozabaviti ovime i videti u čemu je bio problem…

Par savjeta, možda pomogne:

Od head taga, ti ne moraš pisati skriptu sa php echo funkcijom. Dovoljno je da zatvoriš php tagove i onda nastaviš samo sa head tagom, style tagom, body tagom itd. Kad ti unutar tih tagova zatreba neka varijabla iz php-a, onda otvaraš php tagove i dodaješ potrebni php code

<?php /* php code*/ ?>

Razmišljaj da se php prvo izvršava, tako ako imaš situaciju:

<span><?php echo $mojSpan ?></span>

ti si pomoću unaprijed definirane varijable $mojSpan, utjecao na sadržaj tog elementa.

A u situaciji kad si već započeo pisati HTML tagove sa php echo funkcijom …onda ne možeš unutar php-a otvarati nove php tagove!! Ako s php-om ispisuješ string, onda php varijable moraš zbrajati sa tim stringom koristeći se točkom:

$x='tvoj';
echo 'neki '.$x.' tekst';

Ako si string zadao s dvostrukim navodnicima, onda čak niti točka nije potrebna:

$x='tvoj';
echo "neki $x tekst";

Ovo ti sve uglavnom mora biti logično, jer ako nije…nešto temeljno ne razumiješ. Kad sam ja jednom davno pitao kako da prenesem varijablu iz php-a u javascript…pa sam dobio ovakav odgovor:

var mojaJsStringVarijabla='<?php echo $mojaPhpStringVarijabla ?>' ;
var mojaJsIntegerVarijabla=<?php echo $mojaPhpIntegerVarijabla ?>;

…pa mi je to izgledalo magično jer nisam razumio niti što je echo, niti redosljed izvršavanja koda…a onda se odmah za tim povlačila i zbunjenost zašto prvi slučaj ima navodnike…a drugi nema…

nije to nikaka magija, string se definira kao string - unutar jednostrukih ili dvostrukih navodnika, integer je broj i on se definira kao broj

Naravno da nije magija…ali hoću reći dok nisam razumio pozadinu i redosljed izvršavanja, onda sam morao napamet zapamtiti kako prenest varijablu iz PHP-a u JS.

No kad se stvar razumije…onda se to lako kombinira. A da on razumije, onda sigurno nebi napravio grešku da unutar echo funkcije otvori php tagove.
Zato mora shvatiti da php zapravo generira skripte koje browser kasnije prepoznaje i radi kako mu te skripte zapovjedaju.
echo je upravo funkcija pomoću koje php ispisuje ono što se šalje prema browseru, a server prepoznaje djelove php koda tako što su oni omeđeni php tagovima. Tek kad server odradi svoj dio posla, onda taj “rezultat” se šalje na klijentovo računalo i tamo zapravo php tagova više nema, nego samo ono što je php generirao.

Tekst koji imaš u skripti izvan php tagova, on se isti takav prosljeđuje sa servera prema klijentu. No ako unutar tog teksta negdje ugnjezdiš php tagove, unutar tih tagova možeš koristiti slobodno cijelu php sintaksu, i pomoću echo ispisati neki novi dio, koji će se kasnije nalaziti upravo tamo gdje si ugnjezdio te php tagove.