PHP: content + css Dateien mit switch austauschen

Der_baum

Mitglied
Hallo zusammen,

ich hätte mal eine Frage.
Ich bastle im Moment eine Seite mit der ich per PHP den content austauschen lasse. Genauso wie hier, http://www.tutorials.de/forum/php-tutorials/264075-switch-case-fuer-contentwahl.html
Hätte ich das Tut nur früher gesehen….
Nun würde ich gerne zum content noch die .css-Dateien austauschen lassen.

Soweit bin ich im Moment schon:

- Folgende Datein werden behandelt:
index.php, basic.css, a.php, b.php, c.php, a.css, b.css, c.css

Index.php:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html lang="de" xml:lang="de" xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>A B C</title>

<link href="basic.css" rel="stylesheet" type="text/css" />

</head>
<body>
<p>
	<a href="index.php?site=SeiteA">Link A</a><br />
	<a href="index.php?site=SeiteB">Link B</a><br />
	<a href="index.php?site=SeiteC">Link C</a><br />
</p>

<p>
	<?php switch ($_GET['site']) { 
			
				case "SeiteA": 
					include"a.php"; 
					break; 
	
				case "SeiteB": 
					include"b.php"; 
					break; 
	
				case "SeiteC": 
					include"c.php"; 
					break; 
				};
	?>
</p>

</body>
</html>

- basic.css:
Hier Grund-css-Infos, Schriftart etc. etc.
Die basic.css bleibt immer eingebunden.

- a-, b-, c.css:
Hier lasse ich Seitenspezifische css-Eigenschaften laden (spezieller Seitenabstand etc.)
Die a,b,c.css wir mit dem jeweiligen content (a,b,c.php) geladen.

Ich hoffe ich habe mich einigermaßen gut ausgedrückt. Ich hab versucht so gut wie es geht mich an die Regeln zu halten.


Gruß Daniel

P.S.: Ich habe das mit der CODE und HTML Formatierung leider nicht so ganz hinbekommen! Irgendwie zeigt er mir den PHP-Teil nicht so farbig wie es sein sollte. :rolleyes: Sorry!
 
Na, das machst du genauso, wie du den Content einbindest :)
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html lang="de" xml:lang="de" xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>A B C</title>

<link href="basic.css" rel="stylesheet" type="text/css" />
PHP:
switch ($_GET['site']) { 
			
				case "SeiteA": 
					echo '<link href="a.css" rel="stylesheet" type="text/css" />'; 
					break; 
	
				case "SeiteB": 
					echo '<link href="b.css" rel="stylesheet" type="text/css" />';  
					break; 
	
				case "SeiteC": 
					echo '<link href="c.css" rel="stylesheet" type="text/css" />'; 
					break; 
				default:
				        echo '';
				        break;
				};
HTML:
</head>
<body>
<p>
	<a href="index.php?site=SeiteA">Link A</a><br />
	<a href="index.php?site=SeiteB">Link B</a><br />
	<a href="index.php?site=SeiteC">Link C</a><br />
</p>

<p>
PHP:
switch ($_GET['site']) { 
			
				case "SeiteA": 
					include"a.php"; 
					break; 
	
				case "SeiteB": 
					include"b.php"; 
					break; 
	
				case "SeiteC": 
					include"c.php"; 
					break; 
				default:
				        include( 'a.php' );
				        break;
				};
HTML:
</p>

</body>
</html>
 
Guten morgen!

Eine Frage hätte ich doch noch zu dem "default" im head Bereich.
Kann ich "default" da nicht weglassen da es eh leer ist? Ausser ich lade direkt zu der Seite A die a.css als default?


Gruß Daniel

P.S.: Kannst du oder jemand anders mir bitte noch erklären warum die css-Dateien mit echo und nicht mit include eingebunden werden?
 
Zuletzt bearbeitet:
Hallo noch mal,

was mir jetzt grade aufgefallen ist, ist das mir die "default"-css immer dann geladen wird, wenn keine Übereinstimmung mit der Abfrage ist (es also für die PHP Seite keine eigene css-Datei gibt). Ist ja auch logisch.

Ich benutzte nämlich den default Wert als default-Seite. Hoffe soweit einigermaßen alle Verständlich!?
Nun will ich aber eigentlich das ich nur beim ersten Aufruf des Scripts, als der "Index-Seite" die default css und default PHP geladen wird und nicht wenn keine Übereinstimmung besteht.

Grüße,
Daniel
 
Zuletzt bearbeitet:
Dazu müsstest du eine Funktion einbauen, die überprüft, ob der Besucher eine Seite schon besucht hat oder nicht. Das könnte über die Session oder auch über die IP geschehen. Ob das wirklich praxistauglich ist, wage ich aber zu bezweifeln, da ein Neustart des Browsers, bzw. eine Neuvergabe der IP schon ausreichen würde die entsprechende Seite anzusehen. Vorausgesetzt natürlich, dass keine weiteren Kontrollmechanismen eingebaut sind (Login-System) :)
 
P.S.: Kannst du oder jemand anders mir bitte noch erklären warum die css-Dateien mit echo und nicht mit include eingebunden werden?

Das liegt daran das man HTML-(Tags) immer ausgibt an den Browser, während PHP-Code vom Server interpretiert werden muss.

Das Problem mit dem Content bekommst du ungefähr so hin:
PHP:
if (isset($_GET["site"]))
       {
         switch ($_GET['site']) { 
            
                case "SeiteA": 
                    include"a.php"; 
                    break; 
    
                case "SeiteB": 
                    include"b.php"; 
                    break; 
    
                case "SeiteC": 
                    include"c.php"; 
                    break; 
                default:
                        include( 'error.php' );
                }  
       }
       else include "a.php";

Eine sichere Methode wäre folgende:
PHP:
// index.php
include "inc/config.php";  // Mysql-Configuration
       if (isset($_GET["go"]))
       {
         $ds_link = $_GET["go"];
         if (in_array($ds_link,$ds_accesssite) and is_readable("links/".$ds_link.".php"))
         {
           include "links/".$ds_link.".php";
         }
         else include "links/error.php";
       }
       else include "links/news.php";

// config.php
$ds_accesssite = array('SeiteA','SeiteB','SeiteC');

Dies ist ein Bsp. für Contentseiten im Ordner "links".
Übrigens PHP-Highlightning bekommt man, wenn du auf den kleinen PHP-bttn drückst :)

mfg
 
Guten morgen zusammen,

danke erstmal für eure Hilfe. Hat mir sehr geholfen und ich habe soweit die Methode von Online-Skater umgesetzt. Funktioniert soweit. Danke noch mal.
Link: http://www.tutorials.de/forum/php-t...on-ueber-die-url-index-php-section-index.html

Was aber nun logischerweise nicht mehr funktioniert ist das austauschen der CSS-Dateien per o.g. Code. Kann mir da einer weiter helfen? Ich bin zwar im Moment selber grad dran aber die Geschichte klappt noch nicht so ganz!

MuhKuh hat allerdings auch Recht. Es stellt sich nun fast eher die Frage ob sichs nicht eher rentiert die 8 CSS-Dateien wieder von Anfang an zu laden. Denke auch das ich das wieder tun werde.
Trotzdem würde es mich im meinem Lerndrang interessieren wie die Geschichte Funktioniert. Also falls da jemand was hat (Codeschnipsel oder der gleichen) könntet ihr das ja posten, … aber bitte ohne riesigen für euch.


Vielen Danke noch mal,
Gruß Daniel
 
Guten morgen zusammen,

danke erstmal für eure Hilfe. Hat mir sehr geholfen und ich habe soweit die Methode von Online-Skater umgesetzt. Funktioniert soweit. Danke noch mal.
Link: http://www.tutorials.de/forum/php-t...on-ueber-die-url-index-php-section-index.html

Was aber nun logischerweise nicht mehr funktioniert ist das austauschen der CSS-Dateien per o.g. Code. Kann mir da einer weiter helfen? Ich bin zwar im Moment selber grad dran aber die Geschichte klappt noch nicht so ganz!

MuhKuh hat allerdings auch Recht. Es stellt sich nun fast eher die Frage ob sichs nicht eher rentiert die 8 CSS-Dateien wieder von Anfang an zu laden. Denke auch das ich das wieder tun werde.
Trotzdem würde es mich im meinem Lerndrang interessieren wie die Geschichte Funktioniert. Also falls da jemand was hat (Codeschnipsel oder der gleichen) könntet ihr das ja posten, … aber bitte ohne riesigen für euch.


Vielen Danke noch mal,
Gruß Daniel


EDIT: Mir kommts auch so vor als wäre das Script ein bisschen flotter als beim einbinden per switch!?

Wie gut dass es Tutorials zu diesem Thema gibt ^^

Hat nur nicht so funktioniert wie ich mir das vorgestellt habe, aber danke für den Tipp. ;-)
 
Zurück