2009-06-11 3 views
2

Hintergrund: Beim Generieren von HTML-Inhalten mit PHP oder ähnlichem ist es möglich, Links zu JavaScript und CSS in Tags einzufügen, ohne das CSS und JavaScript "in." -line "mit dem Rest des Inhalts. Sie müssen lediglich eine Verknüpfung zu der Datei erstellen.Saubere Links zu PHP-generiertem JavaScript und CSS

Beispiel: {script type = "text/javascript" src = "./ js/fooscript.js"} {/ script}

Frage: Der obige Ansatz funktioniert nicht jedoch, wenn Ihr PHP muss dynamisch einige oder alle Ihren JavaScript-Code generieren. Gibt es eine Möglichkeit, einen sauberen "einzeiligen" Link wie oben zu haben, aber trotzdem dynamisch generiertes JavaScript zu verwenden?

Offensichtlich eine Möglichkeit, es zu tun ist, PHP haben die JavaScript automatisch generieren und schreiben, dass in einer Datei; Dieser Ansatz ist jedoch aus verschiedenen Gründen unerwünscht. Ich frage mich, ob es einen alternativen Trick gibt, an den ich noch nicht gedacht habe.

Antwort

7

Setzen Sie ein .htaccess Datei in Ihrem /js/ Ordner und fügen Sie die .js Erweiterung von PHP, wie folgt aus:

AddHandler application/x-httpd-php .js 

Mit anderen Worten haben alle .js-Dateien als PHP-Dateien PHP analysieren. Ihre Skripte wären also wirklich PHP-Dateien auf der Serverseite, die JavaScript ausgeben. Tun Sie dasselbe für Stylesheets, verwenden Sie nur die .css Erweiterung, natürlich.

Hinweis: Ich habe noch nie in einer separaten Datei .htaccess dies zu tun versucht. Wenn es nicht funktioniert, lege es einfach in deine globale Apache-Konfiguration.

+1

Ich denke, du meinst AddHandler und nicht AddType. AddType legt den abgehenden mimetype-Header fest. –

+0

Hoppla, du hast recht, danke, dass du mich korrigiert hast. Das habe ich schon lange nicht mehr gemacht. :) –

+1

"obwohl das macht PHP alle JavaScript/CSS-Dateien auf dem Server analysieren" muss nicht. stecken Sie es einfach in einen oder Tag für das Verzeichnis, in dem Sie die php js-Dateien bereitstellen. – nategood

1

Sie können PHP-Dateien in JavaScript- und CSS-Aufrufen verwenden. Es ist nicht schön und jeder, der Ihre Quelle anschaut, weiß, dass es ein Skript ist, aber es spart den Aufwand der Konfiguration auf dem Server. Wenn Sie dynamisches JavaScript erstellen, würde ich vorschlagen, am Ende einen Zeitstempel hinzuzufügen, damit der Browser ihn nicht zwischenspeichert.

Beispiel.

<script src="myjavascript.php?a=20090611-021213"></script> 
+1

Wenn Sie diesen Ansatz verwenden, stellen Sie sicher, dass Sie den entsprechenden Header "Content-type" hinzufügen. – nategood

7

Aus meiner Erfahrung müssen Sie selten (und selten sollten Sie) ein gesamtes Skript dynamisch generieren. Zum Beispiel, in Javascript müssen Sie möglicherweise einige Daten (wie Benutzerinformationen oder Einstellungen) in Javascript, aber der Rest des Skripts (Klassen/Funktionen/DOM-Manipulationen) ist für alle Benutzer statisch.

Normalerweise würden Sie in diesem Fall das dynamische Zeug "inline" einfügen, dynamisch aus PHP ausgeben und dann die js (die 95%, die nicht dynamisch generiert werden müssen) als externes Skript verwenden. Der offensichtlichste Grund dafür ist die Zwischenspeicherung der js/css.

Überlegen Sie, wie reddit.com es tut, indem für das Erhalten von Benutzerdaten in Javascript, um ihren Quellcode suchen.

var reddit = { 
    /* is the user logged in */ logged: 'username', 
    /* the subreddit's name (for posts) */ post_site: "", 
    /* are we in an iframe */ cnameframe: false, 
    /* this page's referer" */ referer: "", 
    /* the user's voting hash */ modhash: 'lzbcszj9nl521385b7e075e9750ee4339547befc6a47fa01e6', 
    /* current domain */ cur_domain: "reddit.com", ... 
} 

Der Rest ihrer js ist in externen Dateien gefunden.

+0

Ich habe den Code neu formatiert, um nicht scrollen zu müssen, um ihn zu lesen. –

+1

+1 Sie sollten wirklich Benutzern erlauben, so viel Cache wie möglich zwischenzuspeichern – rojoca

+1

Gute Antwort. Aus einer Design-Perspektive ermöglicht dies eine gute MVC-Trennung und Kapselung +1 – dreftymac

1

Sie könnten nur mod_rewrite verwenden, um bestimmte PHP-Dateien zu machen, wie CSS/JS

zum Beispiel zu sehen, /css/screen-style.css zeigt auf css.php?friendly_id = Bildschirm-Stil