Ändern einer JS-Datei mit Daten aus den Plugin-Einstellungen


9

Ich habe ein Plugin, das unter anderem eine Javascript-Datei enthält, für die einige benutzerspezifische Einstellungen erforderlich sind. Was wäre der beste Weg, um diese Einstellungen aus den Einstellungsparametern des Plugins in Javascript zu integrieren?

Mit anderen Worten, wenn ich diese Einstellungen zu einem Teil der Einstellungsseite mache, auf der der Benutzer sie eingeben kann, wie kann ich diese Werte am besten in Javascript umwandeln? Müsste ich etwas verwenden, um einige Skript-Tags anzuhängen und sie bei jedem Laden der Seite über PHP festzulegen? Wäre das Setzen eines Cookies ein besserer Weg, dies zu tun?


2
Dies ist eine wirklich gute Frage, die ich mir gestellt habe. Danke, dass du es gefragt hast!
MikeSchinkel

Antworten:


10

Besser ist, Sie verwenden hierfür die Funktionen von WP, ein Beispiel für mehrsprachig:

    add_action( 'admin_enqueue_scripts', 'add_scripts' );
    function add_scripts($where) {
        wp_localize_script( 'post2media', 'post2media_strings', $this->localize_vars() );
    }
    function localize_vars() {

        $strings = array(
                'btntext'    => __( 'Link with post', INPSYDE_P2M_TEXTDOMAIN ),
                'txtallnone' => __( 'Include in gallery:', INPSYDE_P2M_TEXTDOMAIN ),
                'txtall'     => __( 'All', INPSYDE_P2M_TEXTDOMAIN ),
                'txtnone'    => __( 'None', INPSYDE_P2M_TEXTDOMAIN ),
                'ttlcb'      => __( 'Include image in this gallery', INPSYDE_P2M_TEXTDOMAIN )
            );

        return $strings;
    }

benutze dies in js-file:

jQuery(function ($) {
buttonaddfunc = function() {
    btntext = post2media_strings.btntext;

    reg = /\d+/;
    $( '.savesend > .button' ) . each( function() {
        inputname = $( this ) . attr( 'name' );
        number = reg . exec( inputname );
        $( this ) . after( '<input type="submit" value="' + btntext + '" name="link[' + number + ']" class="button">' );
    } );
    $( '.describe-toggle-on' ).unbind( 'click', buttonaddfunc );
};
$( '.describe-toggle-on' ).bind( 'click', buttonaddfunc );

});

Siehe auch den Beitrag von Otto


Ich habe Ihren Code nicht wirklich gut verstanden, aber ich fand den Link sehr nützlich.
Ryan Elkins

1
Das ist wirklich exzellent, danke! Ich habe mich schon lange gefragt, wie ich das machen soll. Vielen Dank! Ich wollte es auf der Liste der wp-Hacker fragen, tat es aber nie. Danke nochmal.
MikeSchinkel

1
Sie können auf meinem letzten Plugin post2media ( wordpress.org/extend/plugins/post2media ) ein Beispiel für ein Live-Plugin sehen; Das Plugin hat nicht so viele Quellen und ich denke, dies ist großartig, um Quellen zu lesen und die Lösung zu verstehen.
Bueltge

1
Hier ist ein einfacheres Beispiel, das es auf die Grundlagen bringt (in Ihrem Beispiel ist viel los): pretovac.com/vladimir/…
Viper007Bond

1

Es gibt verschiedene Möglichkeiten, wie Sie dies tun können. Eine davon habe ich bereits getan, die andere nicht, aber ich habe sie für XML-Konfigurationsdateien verwendet.

Die erste besteht darin, die Variablen in ein Skript-Tag in der Kopf- oder Fußzeile des WP vor dem Skript-Tag aufzunehmen, in das Sie Ihre JS-Datei einfügen. Beispiel:

<script type="text/javascript">
    var test = "<?php echo "hello world"; /* the relevant PHP code to echo the data you require */ ?>";
    var slider_type = "<?php echo "nivo"; /* same again */ ?>";
</script>
<script type="text/javascript" src="<?php bloginfo("template_url"); ?>/js/your_js_here"></script>

Die andere Alternative wäre, das JS in eine PHP-Datei aufzunehmen, die in einem Skript-Tag enthalten ist.

<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/javascripts.php"></script>

In diese Datei würden Sie Ihr Javascript einfügen, und wenn PHP es analysieren würde, könnten Sie PHP-Aufrufe auf ähnliche Weise wie oben einfügen, indem Sie einfach die Daten / Optionen wiedergeben, die Sie benötigen. Beachten Sie, dass Sie möglicherweise die Header für die Ausgabe als festlegen müssen text/javascript.

Persönlich bevorzuge ich die erste Methode sehr und verwende sie, wenn ich vom Benutzer veränderbare Einstellungen habe, die sich auf Javascript-Dateien auswirken.


Netter Bericht. Genau das habe ich getan. OTOH, @bueltge hat die Antwort, nach der wir wahrscheinlich alle gesucht haben; Ich weiß, dass ich habe.
MikeSchinkel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.