hubihu: Hintergrundbilder über css in php

Hallo!

Ich hoffe, ich kann mein Problem einigermaßen verständlich rüberbringen: Ich arbeite an einem Template für ein Browsergame und bin wegen einer scheinbar simplen Absicht am verzweifeln.

Hier zunächst der CSS-Code:


td {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
cursor: crosshair;
background-color: #000000;
background-image: url(../bla/fasel/blubb/bild.jpg);
}
table.nav {
background-color: #FFFF00;
border: 1px solid #000000;
height: auto;
width: 135px;
}

.navhead {
text-decoration: none;
width: 137px;
height: auto;
padding: 1px;
line-height: 18px;
float: left;
clear: none;
background-color: #000000;
font-weight: bold;
color: #FF0000;
}

a {
color: #FFFF00;
text-decoration: none;
}
a:hover {
font-weight: bold;
}

a.nav {
text-decoration: none;
width: 135px;
height: auto;
padding: 1px;
float: left;
clear: none;
background-color: #000000;
border-top: 1px solid #000000;
border-bottom: 1px solid #000000;
border-right: 1px solid #000000;
border-left: 1px solid #000000;
}

.navhelp {
text-decoration: none;
width: 135px;
height: auto;
padding: 1px;
float: left;
clear: none;
background-color: #000000;
border: 1px solid #000000;
}

a:hover.nav {
background-color: #000000;
border-top: 1px solid #000000;
border-left: 1px solid #000000;
border-bottom: 1px solid #000000;
border-right: 1px solid #000000;
}
a.navhilite {
text-decoration: none;
width: 135px;
height: auto;
padding: 1px;
float: right;
clear: none;
color:#FFFFFF;
background-color: #000000;
border-top: thin solid #000000;
border-bottom: thin solid #000000;
border-right: thin none #000000;
border-left: thin none #000000;
}
a:hover.navhilite {
background-color: #000000;
border-top: thin outset #000000;
border-right: thin none #000000;
border-bottom: thin outset #000000;
border-left: thin none #000000;
}


table {
}
td.charinfo {
border-top-width: 1px;
border-top-style: solid;
border-top-color: #FF0000;
border-right-style: none;
border-bottom-style: none;
border-left-style: none;
}
td.charhead {
background-color: #FF0000;
border: none;
cursor: default;
color: #FF0000;
background-image: url(../bla/fasel/blubb/nochnbild.jpg);
}
table.charinfo {
border: none;
width: 140px;
background-image: url(../bla/fasel/blubb/nochnbild2.jpg);
}
td.pageheader {
background-color: #000000;
background-image: url(../bla/fasel/blubb/nochnbild.jpg);
height: 60px;
}
td.popupheader {
background-color: #000000;
background-image: none;
height: 20px;
}
td.noborder {
border: none;
}
table.noborder {
border: none;
}
td.ort1 {
background-image: url(../images/ort1.jpg);;
}
td.ort2 {
background-image: url(../images/ort2.jpg);
background-repeat: no-repeat;
}
td.ort3 {
background-image: url(../images/ort3.jpg);
background-repeat: no-repeat;

[...gekürzt...]

}
td.footer {
background-image: url(../images/rule.gif);
background-repeat: repeat-x;
background-position: top;
}
.navhi {
color: #FFFF00;
text-decoration: underline;
}

Am zentralen Ort des Games möchte ich eine Hintergrundgrafik anzeigen, die auch an allen weiteren Orten (jeder Ort=eine PHP-Datei) angezeigt wird. Allerdings möchte ich an bestimmten Orten in der PHP-Datei ein eigenes Hintergrundbild angeben können, dessen Attribute in der CSS-Datei vordefiniert sind. Dieses Hintergrundbild soll dann das Hauptbild quasi überschreiben. So dass ich in der PHP nur die Bildurl angeben brauch mit Verweis auf die in der CSS-Class angegebenen Bild-Attributen, die für jedes Hintergrundbild gültig sein sollen.

Zunächst gab ich das Haupthintergrundbild über die zum Template gehörende .htm aus. Meine Absicht mit den separaten Hintergrundbildern in den einzelnen PHP-Dateien schliesst das aber aus. Also setzte ich das Bild in den Haupttabellenbereich der CSS. Leider werden dadurch alle anderen in der CSS-Datei angegebenen Hintergründe (z.B. für einzelne Boxen, in denen es Informationen zum Charakter des Spielers gibt) überschrieben und ich habe keine Idee, wie ich das verhindern kann. Es soll der Haupthintergrund und auch die Hintergründe in den Boxen, im Pageheader, im Footer u.s.w. angezeigt werden. In diesem Fall überschreibt der Haupthintergrund alle anderen.

Ein weiteres Problem ist das Übertragen der separaten Hintergründe in die entsprechenden PHP-Dateien. Hier mal eine dieser Dateien:

<?php

// 21072004

require_once "common.php";
addcommentary();
checkday();

if ($session['user']['alive']){ }else{
 redirect("shades.php");
}
$sql="SELECT acctid1,acctid2,turn FROM pvp WHERE acctid1=".$session[user][acctid]." OR acctid2=".$session[user][acctid]."";
$result = db_query($sql) or die(db_error(LINK));
$row = db_fetch_assoc($result);
if(($row[acctid1]==$session[user][acctid] && $row[turn]==1) || ($row[acctid2]==$session[user][acctid] && $row[turn]==2)){
 redirect("pvparena.php");
}

// if (getsetting("automaster",1) && $session['user']['seenmaster']!=1){
if (getsetting("automaster",1) && $session['user']['seenmaster']!=2){
 //masters hunt down truant students
 $exparray=array(1=>100,400,1002,1912,3140,4707,6641,8985,11795,15143,19121,23840,29437,36071,43930,55000);
 while (list($key,$val)=each($exparray)){
  $exparray[$key]= round(
   $val + ($session['user']['dragonkills']/4) * $session['user']['level'] * 100
   ,0);
 }
 $expreqd=$exparray[$session['user']['level']+1];
 if ($session['user']['experience']>$expreqd && $session['user']['level']<15){
  redirect("train.php?op=autochallenge");
 }else if ($session['user']['experience']>$expreqd && $session['user']['level']>=15){
  redirect("dragon.php?op=autochallenge");
 }
}
$session['user']['specialinc']="";
$session['user']['specialmisc']="";
addnav("Wald","forest.php");
if (@file_exists("houses.php")) addnav("Wohnviertel","houses.php");
addnav("Klingengasse");
addnav("Trainingslager","train.php");
if (getsetting("pvp",1)){
 addnav("Spieler töten","pvp.php");
 addnav("A?Die Arena","pvparena.php");
}
addnav("Ruhmeshalle","hof.php");

addnav("Marktplatz");
if (getsetting("vendor",0)==1) addnav("Wanderhändler","vendor.php");
addnav("W?MightyEs Waffen","weapons.php");
addnav("R?Pegasus Rüstungen","armor.php");
addnav("B?Die alte Bank","bank.php");
addnav("Z?Zigeunerzelt","gypsy.php");
if (@file_exists("pavilion.php")) addnav("P?Auffälliger Pavilion","pavilion.php");

addnav("Tavernenstrasse");
addnav("E?Schenke zum Eberkopf","inn.php",true);
addnav("Mericks Ställe","stables.php");
if (@file_exists("lodge.php")) addnav("J?Jägerhütte","lodge.php");
addnav("G?Der Garten", "gardens.php");
addnav("F?Seltsamer Felsen", "rock.php");

addnav("`bSonstiges`b");
addnav("??F.A.Q. (für neue Spieler)", "petition.php?op=faq",false,true);
addnav("N?Tägliche News","news.php");
addnav("Profil & Inventar","prefs.php");
addnav("Kämpferliste","list.php");
addnav("In die Felder (Logout)","login.php?op=logout",true);
addnav("Spiel-Forum","http://www.logd-welt.de/forum/index.php",false,false,true);

if ($session[user][superuser]>=2){
  addnav("X?`bAdmin Grotte`b","superuser.php");
  if (@file_exists("test.php")) addnav("Test","test.php");
}
//let users try to cheat, we protect against this and will know if they try.
addnav("","superuser.php");
addnav("","user.php");
addnav("","taunt.php");
addnav("","creatures.php");
addnav("","configuration.php");
addnav("","badword.php");
addnav("","armoreditor.php");
addnav("","bios.php");
addnav("","badword.php");
addnav("","donators.php");
addnav("","referers.php");
addnav("","retitle.php");
addnav("","stats.php");
addnav("","viewpetition.php");
addnav("","weaponeditor.php");

if ($session[user][superuser]){
  addnav("Neuer Tag","newday.php");
}

if (getsetting("topwebid", 0) != 0) {
 addnav("Top Web Games");
 if (date("Y-W", strtotime($session['user']['lastwebvote'])) < date("Y-W"))
  $hilight="`&";
 else
  $hilight="";
 addnav("S?".$hilight."Stimme abgeben", "http://www.topwebgames.com/in.asp?id=".getsetting("topwebid", 0)."&acctid={$session['user']['acctid']}", false, true);
}

page_header("Dorfplatz");
//output("<img src='images/trans.gif' width='1' height='700' alt='' align='right'>",true);
output("`@`c`bDorfplatz`b`cDie Einwohner rennen geschäftig umher.  Keiner bemerkt wirklich, dass Du dort stehst.");
output("  Du siehst verschiedene Geschäfte und Läden entlang der Strasse.  Es gibt einen merkwürdig aussehenden Felsen auf einer Seite.  ");
$sql = "SELECT * FROM news WHERE 1 ORDER BY newsid DESC LIMIT 1";
$result = db_query($sql) or die(db_error(LINK));
$row = db_fetch_assoc($result);
output("Auf diesem kannst du die neueste Meldung lesen:`n`n`c`i$row[newstext]`i`c`n");
output("`@Auf jeder Seite wird das Dorf von tiefem dunklem Wald umgeben.`n");
if (getsetting('activategamedate','0')==1) output("Wir schreiben den `^".getgamedate()."`@ im Zeitalter des Drachen.`n");
output("Die Uhr an der Kneipe zeigt `^".getgametime()."`@.");
output(" Das heutige Wetter: `6".$settings['weather']."`@.");

// $t1 = strtotime("now")*getsetting("daysperday",4);
// $t2 = strtotime($session[user][lasthit])*getsetting("daysperday",4);
// $d1 = date("Y-m-d",$t1);
// $d2 = date("Y-m-d",$t2);
//output("`n`nToday is $d1, your last new day was $d2");

output("`n`n`%`@In der Nähe reden einige Dorfbewohner:`n");
viewcommentary("village","Hinzufügen",25);
page_footer();
?>

Also, nach soviel Text kurz gefragt:

  1. Wie kann ich verhindern, dass die Hintergrundgrafik im td-Bereich der Tabelle alle anderen in der CSS bestimmten Hintergründe überschreibt, stattdessen alle normal angezeigt werden?

2a. Wie kann ich am besten in der CSS eine Klasse erstellen, die global alle Informationen für Hintergrundbilder enthält und diese an die PHP-Dateien weitergibt, in denen dann lediglich die Bild-Url eingetragen wird?

2b. Mit welchem Befehl kann ich letztendlich das separate Hintergrundbild in der PHP anzeigen?

Für Eure Hilfe und Geduld bin ich Euch schon vorab dankbar. :)

Gruß, hubihu

  1. Hi hubihu!

    Ich hoffe, ich habe dich richtig verstanden:
    Du möchtest für verschiedene Seiten verschiedene Hintergrundbilder, die in einer CSS-Datei definiert werden, einbinden.
    Richtig?

    Wie kann ich am besten in der CSS eine Klasse erstellen, die global alle Informationen für Hintergrundbilder enthält und diese an die PHP-Dateien weitergibt, in denen dann lediglich die Bild-Url eingetragen wird?

    Du kannst doch in der CSS-Datei den PHP-Code ausführen und je nach angeforderter Seite das richtige Hintergrundbild ausliefern.

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. Hey H☼psel! :)

      Ich hoffe, ich habe dich richtig verstanden:
      Du möchtest für verschiedene Seiten verschiedene Hintergrundbilder, die in einer CSS-Datei definiert werden, einbinden.
      Richtig?

      Ganz genau das!

      Du kannst doch in der CSS-Datei den PHP-Code ausführen und je nach angeforderter Seite das richtige Hintergrundbild ausliefern.

      Genau das ist es, was ich möchte.
      Könntest Du ein Codebeispiel geben?
      Daran hapert es nämlich. :/

      @chrisB:
      Niemand zwingt Dich zu lesen oder zu antworten.
      Zum Glück gibt es auch hilfsbereite Menschen, die sich nicht in jedem zweiten Thema als Moralapostel aufspielen anstatt diese Energie in eine hilfreiche Antwort zu investieren. :)

      1. Hi,

        Du möchtest für verschiedene Seiten verschiedene Hintergrundbilder, die in einer CSS-Datei definiert werden, einbinden.
        Richtig?

        Ganz genau das!

        Und warum schreibst du das dann nicht auch kurz und knackig so - anstatt uns mit deinem Code zuzuscheissen?

        Du kannst doch in der CSS-Datei den PHP-Code ausführen und je nach angeforderter Seite das richtige Hintergrundbild ausliefern.

        Genau das ist es, was ich möchte.
        Könntest Du ein Codebeispiel geben?

        <?php echo "blubb"; ?>

        Code-Beispiel genug?

        Das kannst du gerne auch in eine Datei schreiben, die du per link-Element als CSS-Ressource einbindest; an diesen Aufruf kannst du gerne auch GET-Parameter anhaengen.
        Passenden Content-Type-Header nicht vergessen.

        @chrisB:
        Niemand zwingt Dich zu lesen oder zu antworten.
        Zum Glück gibt es auch hilfsbereite Menschen, die sich nicht in jedem zweiten Thema als Moralapostel aufspielen anstatt diese Energie in eine hilfreiche Antwort zu investieren. :)

        Was hat die Aufforderung, dass du doch bitte dein Problem nicht in epischer Breite, sondern kurz, aber praezise, beschreiben sollst, denn bitte mit "Moralapostelei" zu tun?

        MfG ChrisB

        --
        "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."
      2. Hi hubihu!

        Du kannst doch in der CSS-Datei den PHP-Code ausführen und je nach angeforderter Seite das richtige Hintergrundbild ausliefern.
        Genau das ist es, was ich möchte.
        Könntest Du ein Codebeispiel geben?
        Daran hapert es nämlich. :/

        Du musst die CSS-Datei halt mit PHP ausführen. Am einfachsten erreichst du das, indem du statt der Endung ".css" ".php" verwendest.
        Eine Beispieldatei könnte so aussehen:

        <?php  
        header('content-type: text/css; charset=utf-8');  
        ?>
        
        /* Styleanweisungen */  
          
        body {  
        display:none;  
        }
        

        Achte darauf, dass die Zeichenkodierung auch der Kodierung (charset) entspricht, die du auch wirklich verwendest.

        Niemand zwingt Dich zu lesen oder zu antworten.

        Hat er ja auch freiwillig getan.

        Zum Glück gibt es auch hilfsbereite Menschen, die sich nicht in jedem zweiten Thema als Moralapostel aufspielen anstatt diese Energie in eine hilfreiche Antwort zu investieren. :)

        Hilfsbereit bin ich ja, aber durchgelesen habe ich mir deinen Post auch nicht vollständig. =)

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
  2. Hi,

    Ich hoffe, ich kann mein Problem einigermaßen verständlich rüberbringen:

    Und ich hoffe, du kannst es noch mal kurz, knapp und knackig beschreiben.

    Du nimmst doch nicht ernsthaft an, jemand hier haette Lust, sich durch so eine Masse an - vollkommen unkommentiertem! - Code zu wuehlen!?!

    MfG ChrisB

    --
    "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."