Eleganter mit GET
Eine weitere Methode besteht darin, dass JS On The Fly zu generieren. Ich erwähne diese Methode eigentlich nur der Vollständigkeit halber, wirklich brauchbar ist sie nicht. Zumindest nicht wenn man Daten aus einem PHP-Script an ein JS-Script übergeben will.
Zunächst benötigen wir ein leicht modifiziertes JS welches eigentlich gar kein JS ist.
<?php $a = $_GET['my_js_var']; $b = $_GET['anothervar']; echo' jQuery(function ($){ $(document).ready(function(){ if( $("#header").is("*") ){ $("#blog-title").text("' . $a . '"); $("#blog-description").text("' . $b . '"); } }); }); '; exit; ?>
Wie man unschwer erkennt handelt es sich hierbei nicht um eine JS- sondern um eine PHP-Datei die JS ausgibt. Die PHP-Datei nimmt zwei Variablen via GET entgegen und setzt diese in das auszugebenden JS ein. Anschließend wird das PHP-Script mit einem exit
beendet. Nun brauchen wir noch eine Funktion die uns den Script-Aufruf erzeugt:
add_action( 'init', 'script_with_get' ); function script_with_get(){ $vars = array( 'my_js_var' => 'Hallo Welt!', 'anothervar' => 'Schubidu' ); $jsfile = plugins_url('/php2js_script_with_get.js.php', __FILE__ ); if( '?' != substr( $jsfile, -1 ) ) $jsfile .= '?'; foreach( $vars as $key => $val ){ $jsfile .= urlencode( $key ) . '=' . urlencode( $val ) . '&'; } $jsfile = rtrim( $jsfile, '&' ); wp_enqueue_script( 'php2js-with-get', $jsfile, false, false, true ); }
Wie man sieht ist diese Funktion schon etwas umfangreicher. Zuerst werden in einem assoziativen Array Schlüssel und Werte abgelegt, danach in einer Schleife alle Schlüssel und Werte mit einem Gleichheitszeichen verbunden, wobei sowohl Schlüssel als auch Werte url-encodiert werden, diese Paare werden danach an die URL angehängt und mit einem Ampersand (&) verbunden, abschließend wird das überschüssige Ampersand am Ende wieder entfernt und das ganze dann als Script-Aufruf eingereiht.
Ja, sehr elegant. Nicht wahr? Ungefähr so elegant wie ein einbeiniger Elefant auf der Flucht. Diese Methode eignet sich höchstens für sehr einfache Schlüssel-Werte-Paarungen. Zum Beispiel eine relative URL, Breiten- und Höhenangaben in Pixeln. Also in etwa so etwas: ?path=img/gif/tiny.gif&width=320&height=160
. Url-Encodierung bitte nicht vergessen, auch wenn WordPress hier aufpasst und es nachholt. Das ist dann der nächste Nachteil an der Sache. Am besten man verwendet keine Zeichen die irgendwie Probleme bei der Url-Encodierung machen, was die zur Auswahl stehenden Zeichen arg einschränkt.
Und selbst wenn die Url-Encodierung gut läuft, wird die Sache ab drei oder vier Variablen schon sehr unübersichtlich. Von der Gefahr einer Code-Injection durch böse HaXoRzzZ mal ganz zu schweigen. Also elegant geht anders.
Schlagworte: Anfänger, Fortgeschrittene, JavaScript, JS, Lokalisation, PHP