Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] php switch mit Dateinamen in CSS

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] php switch mit Dateinamen in CSS

    Hallo zusammen!


    Ich verzweifle hier an einem Problem, an dem ich seit mittlerweile zwei Stunden herumbastle.

    Die Ausgangssituation: Ich möchte abhängig von der Seite die gerade angezeigt wird im CSS bestimmte Parameter setzen, z.B. Hintergrundfarbe eines Menüpunktes.

    Ich habe es dank zahlreicher Internetseiten mittlerweile geschafft, dass ich die zurzeit geöffnete Seite abfrage, nämlich mit
    PHP-Code:
    <?php
      $currentFile 
    $_SERVER["PHP_SELF"];
      
    $parts Explode('/'$currentFile);

      
    $currentSite $parts[count($parts) - 1];
    ?>
    Diese Abfrage liefert mir zum Beispiel den String "wer.php" in $currentSite zurück. So weit, so gut.

    Nun möchte ich mit switch die CSS-Parameter setzen, z.B.
    PHP-Code:
    <?php
      
    switch("$currentSite") {
        case 
    "was.php":
          
    $bg_was="#ff0";
          break;
        case 
    "wer.php":
          
    $bg_wer="#f00";
          break;
    }
    ?>
    Die Variable wird dann später dynamisch im CSS eingesetzt, also in etwa
    Code:
    #menu a.wer {
      border-left:1px solid #ddd;
      border-top:1px solid #ddd;
      border-bottom:1px solid #ddd;
      border-right:0px;
      background-color:<?=$bg_wer;?>;
    }
    Aber das funktioniert nicht. Wenn ich einen default case einfüge wird der ausgeführt, d.h. dass "wer.php" offenbar nicht das wer.php in der Abfrage ist. Ich dachte schon daran, dass es ev. am Punkt im String liegen könnte, deswegen hab ich mit
    PHP-Code:
    $currentSite str_replace(".php","",$parts[count($parts) - 1]); 
    mal den ".php"-Teil weggelöscht und die case-Blöcke entsprechend angepasst, ... ohne Erfolg.

    Wo ist mein Denkfehler??! Kann mir da irgendwer helfen, damit ich endlich von meiner langen Leitung runtergehe?


    LG
    Martin

  • #2
    Die Variable durch PHP auszugeben sollte klappen. Einfach das CSS in der HTML Ausgabe (inline) mit angeben, dann passt das.

    Kommentar


    • #3
      Ähm... ich bin mir zwar nicht sicher was du meinst, aber ich glaube es ist nicht das was ich brauche.

      Ich hätte vielleicht noch anmerken sollen, dass diese PHP-Abfrage direkt in der CSS-Datei steht. Und dort soll's nach Möglichkeit auch bleiben, zusammen mit den ganzen Format-Angaben.

      Die PHP-Abfrage der Datei an sich funktioniert auch, wie schon gesagt, nur scheint switch damit nicht umgehen zu können. Oder es erwartet bei case etwas anderes als ich ihm angebe.

      Kommentar


      • #4
        Oder es erwartet bei case etwas anderes als ich ihm angebe
        Dann mach einen var_dump auf das was Du angibst, dann siehst Du es.

        Kommentar


        • #5
          Okaaay... danke für den Hinweis!

          PHP-Code:
          <?php
            $currentFile 
          $_SERVER["PHP_SELF"];
            
          $parts Explode('/'$currentFile);

            
          $currentSite str_replace(".php","",$parts[count($parts) - 1]);
            
            
          var_dump($currentSite);
            
          var_dump("wer");
          ?>
          gibt mir

          string(3) "wer"
          string(3) "wer"

          Hmm... soll ich mich jetzt freuen oder ärgern? Offenbar sind die strings ident, trotzdem meint switch sie wären unterschiedlich? Gibt's eine andere Möglichkeit strings zu vergleichen?

          Kommentar


          • #6
            case "wer.php"
            wer.php ist nicht gleich wer

            Kommentar


            • #7
              Okay, sorry. Ja, das stimmt natürlich. Hab aber an meinem File schon einiges herumgebastelt. Zur Zeit sieht der Code so aus:

              PHP-Code:
              /* .............................. */
              /* Preset some background colors */
              /* .............................. */
                
              $bg_wer="#eee";
                
              $bg_was="#eee";
                
              $bg_sdg="#eee";

              /* .............................. */
              /* check which file is currently opened */
              /* .............................. */
                
              $currentFile $_SERVER["PHP_SELF"];
                
              $parts Explode('/'$currentFile);

                
              $currentSite str_replace(".php","",$parts[count($parts) - 1]);

              /* .............................. */
              /* select the right case and set the background color accordingly */
              /* .............................. */
                
              switch($currentSite) {
                  case 
              "was":
                    
              $bg_was="#ff0";
                    break;
                  case 
              "wer":
                    
              $bg_wer="#f00";
                    break;
                  default:
                    
              $bg_sdg="#00f";
                    break;
              }
              ?> 
              Insofern wird schon "wer, "was", etc. abgefragt, und nicht mehr "wer.php"... Sorry, hätt' ich besser herausstreichen müssen.

              Kommentar


              • #8
                Und wo ist das Problem jetzt?

                Kommentar


                • #9
                  Dass es nicht funktioniert, das ist das Problem!

                  Es wird immer nur der default case genommen, sprich: für switch ist offenbar der Inhalt von $currentSite nicht gleich "wer", wenn die Seite ./wer.php aufgerufen ist. In $currentSite steht aber "wer" drin. Es ist zum Haare raufen!

                  Kommentar


                  • #10
                    Poste den Kompletten jetzigen Stand. Ansonsten kann ich Dir nicht weiterhelfe.

                    Kommentar


                    • #11
                      Zitat von msu Beitrag anzeigen
                      Ich hätte vielleicht noch anmerken sollen, dass diese PHP-Abfrage direkt in der CSS-Datei steht.
                      In einer externen CSS Datei? Dann glaube ich liegt es daran. Du kannst doch in einer CSS Datei kein PHP ausführen.

                      Wenn ich mich irre berichtigt mich bitte

                      Grüsse

                      Kommentar


                      • #12
                        Solange die CSS-Datei die Endung .php hat, schon.

                        Kommentar


                        • #13
                          Ich bin jetzt mal davon ausgegangen dass er unter einer CSS-Datei eine Datei mit der Endung .css versteht. Aber wenn das so ist

                          Kommentar


                          • #14
                            Okay.... also nochmal alles geordnet und von vorne.

                            Ich hab eine CSS-Datei mit PHP-Code drin - oder eigentlich umgekehrt.

                            Das heißt, meine CSS/PHP-Datei beginnt mit
                            PHP-Code:
                            <?php
                            /* .............................. */
                            /* Preset some background colors */
                            /* .............................. */
                              
                            $bg_wer="#eee";
                              
                            $bg_was="#eee";
                              
                            $bg_sdg="#eee";

                            /* .............................. */
                            /* check which file is currently opened */
                            /* .............................. */
                              
                            $currentFile $_SERVER["PHP_SELF"];
                              
                            $parts Explode('/'$currentFile);

                              
                            $currentSite str_replace(".php","",$parts[count($parts) - 1]);

                            /* .............................. */
                            /* select the right case and set the background color accordingly */
                            /* .............................. */
                              
                            switch($currentSite) {
                                case 
                            "was":
                                  
                            $bg_was="#ff0";
                                  break;
                                case 
                            "wer":
                                  
                            $bg_wer="#f00";
                                  break;
                                default:
                                  
                            $bg_sdg="#00f";
                                  break;
                            }
                            ?>

                            /* .............................. */
                            /* Body Headers Links */
                            /* .............................. */

                            body {
                              color: #666;
                              font-size: 11px;
                              letter-spacing:1px;
                              line-height:18px;
                              font-family: Verdana,Arial,sans-serif;
                              padding-top:15px;
                              padding-bottom:10px;

                            /* ziemlich viel doofes CSS-Zeugs*/

                            #menu a.wer {
                              border-left:1px solid #ddd;
                              border-top:1px solid #ddd;
                              border-bottom:1px solid #ddd;
                              border-right:0px;
                              background-color:<?=$bg_wer;?>;
                            }

                            /* und noch mehr doofes CSS-Zeugs*/
                            So. Diese CSS/PHP-Datei wird von meiner - ich nenne sie mal so - main.php ganz normal eingebunden mit
                            Code:
                              <link rel="stylesheet" type="text/css" media="screen,print" href="styles.css.php"/>
                            Dieses Einbinden funktioniert erstklassig. Jetzt will mich auf eine Unterseite durchklicken in der ebenfalls diese CSS/PHP-Datei eingebunden wird (was ebenfalls funktioniert), z.B. die Seite wer.php. Eigentlich sollte dann der Hintergrund von einem Menüeintrag eine andere Farbe bekommen. Tut er aber nicht, weil irgendwas in switch sich nicht so verhält wie ich es erwarte (oder umgekehrt). Stattdessen wird immer nur der default case schlagend.

                            Fehlt noch eine Info? Ich hoffe nicht....

                            Kommentar


                            • #15
                              Ja, das kann natürlich nicht funktionieren.
                              $currentFile ist styles.css und nicht wer.

                              Liest Dir nochmal durch was $_SERVER["PHP_SELF"] zurückgibt.
                              Der Dateiname des aktuell ausgeführten Skripts, relativ zum Document Root. Beispielsweise enthält $_SERVER['PHP_SELF'] in einem Skript, das über die Adresse http://example.com/test.php/foo.bar aufgerufen wird, den Wert /test.php/foo.bar/.

                              Kommentar

                              Lädt...
                              X