Modificar un archivo JS con datos de la configuración del complemento


9

Tengo un complemento que, entre otras cosas, tiene un archivo javascript que requiere algunas configuraciones específicas del usuario. ¿Cuál sería la mejor manera de obtener esa configuración en JavaScript desde los parámetros de configuración del complemento?

En otras palabras, si hago que esa configuración forme parte de la página de configuración donde el usuario puede ingresarla, ¿cómo podría obtener esos valores en JavaScript? ¿Tendría que usar algo para agregar algunas etiquetas de script y configurarlas a través de PHP en cada carga de página? ¿Establecer una cookie sería una mejor manera de hacer esto?


2
Esta es una muy buena pregunta y una que he estado planeando pedir. Gracias por preguntar!
MikeSchinkel

Respuestas:


10

mejor es, usa las funciones de WP para esto, un ejemplo para multilenguaje:

    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;
    }

use esto en 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 );

});

Ver también el post de Otto


Realmente no entendí tu código demasiado bien, pero el enlace me pareció muy útil.
Ryan Elkins el

1
Esto es realmente excelente, gracias! Me he estado preguntando cómo hacer esto durante mucho tiempo; ¡gracias! Había estado queriendo preguntarlo en la lista de wp-hackers, pero nunca lo hice. Gracias de nuevo.
MikeSchinkel

1
Puede ver en mi último complemento post2media ( wordpress.org/extend/plugins/post2media ) para ver un ejemplo en el complemento en vivo; el complemento no tiene tanta fuente y creo que es genial para leer la fuente y entender la solución.
bueltge

1
Aquí hay un ejemplo más simple que lo lleva a lo básico (hay muchas cosas en su ejemplo): prelovac.com/vladimir/…
Viper007Bond

1

Hay un par de formas en que puede hacer esto, una de las cuales he hecho antes, la otra no, pero la he usado para archivos de configuración XML.

La primera es incluir las variables en una etiqueta de script dentro del encabezado o pie de página de WP, antes de la etiqueta de script donde incluye su archivo JS, por ejemplo:

<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>

La otra alternativa sería incluir el JS dentro de un archivo PHP que se incluye dentro de una etiqueta de script.

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

Dentro de este archivo, incluiría su javascript, y como PHP lo analizaría, podría incluir llamadas PHP de una manera similar a la anterior, simplemente haciendo eco de los datos / opciones que necesita. Una cosa a tener en cuenta es que es posible que deba configurar los encabezados para la salida como text/javascript.

Personalmente, prefiero el primer método, y es el que uso cuando tengo configuraciones modificables por el usuario que afectan los archivos javascript.


Buena redacción. Esto es exactamente lo que he estado haciendo. OTOH, @bueltge tiene la respuesta que probablemente todos hemos estado buscando; Sé que tengo
MikeSchinkel
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.