Modificando un archivo JS con datos de los ajustes del plugin

14 ago 2010, 22:02:03
Vistas: 2.38K
Votos: 9

Tengo un plugin que, entre otras cosas, tiene un archivo javascript que requiere algunos ajustes específicos del usuario. ¿Cuál sería la mejor manera de obtener esos ajustes en javascript desde los parámetros de configuración del plugin?

En otras palabras, si hago que esos ajustes sean parte de la página de configuración donde el usuario puede ingresarlos, ¿cómo podría obtener mejor esos valores en javascript? ¿Tendría que usar algo para agregar algunas etiquetas de script y configurarlas mediante PHP en cada carga de página? ¿Sería mejor establecer una cookie para hacer esto?

1
Comentarios

Esta es una pregunta realmente genial y una que había planeado hacer. ¡Gracias por preguntarla!

MikeSchinkel MikeSchinkel
15 ago 2010 00:46:34
Todas las respuestas a la pregunta 2
5
10

es mejor que uses 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'    => __( 'Enlazar con publicación', INPSYDE_P2M_TEXTDOMAIN ),
                'txtallnone' => __( 'Incluir en galería:', INPSYDE_P2M_TEXTDOMAIN ),
                'txtall'     => __( 'Todos', INPSYDE_P2M_TEXTDOMAIN ),
                'txtnone'    => __( 'Ninguno', INPSYDE_P2M_TEXTDOMAIN ),
                'ttlcb'      => __( 'Incluir imagen en esta galería', INPSYDE_P2M_TEXTDOMAIN )
            );

        return $strings;
    }

usa esto en el archivo js:

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

} );

También revisa la publicación de Otto

14 ago 2010 22:43:40
Comentarios

No entendí muy bien tu código, pero encontré el enlace muy útil.

Ryan Elkins Ryan Elkins
14 ago 2010 23:26:07

¡Esto es realmente excelente, gracias! Llevaba mucho tiempo preguntándome cómo hacer esto; ¡gracias! Había querido preguntarlo en la lista wp-hackers pero nunca lo hice. Gracias de nuevo.

MikeSchinkel MikeSchinkel
15 ago 2010 00:52:15

Puedes ver en mi último plugin post2media (http://wordpress.org/extend/plugins/post2media/) para ver un ejemplo en un plugin en vivo; el plugin no tiene mucho código fuente y creo que es genial para leer el código y entender la solución.

bueltge bueltge
15 ago 2010 13:01:46

Aquí tienes un ejemplo más simple que reduce todo a lo básico (tu ejemplo tiene muchas cosas): http://www.prelovac.com/vladimir/best-practice-for-adding-javascript-code-to-wordpress-plugin

Viper007Bond Viper007Bond
17 ago 2010 05:55:13
1

Existen un par de formas de hacer esto, una de las cuales he usado antes, la otra no, pero la he utilizado para archivos de configuración XML.

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

<script type="text/javascript">
    var test = "<?php echo "hola mundo"; /* el código PHP relevante para mostrar los datos que necesitas */ ?>";
    var slider_type = "<?php echo "nivo"; /* lo mismo de nuevo */ ?>";
</script>
<script type="text/javascript" src="<?php bloginfo("template_url"); ?>/js/tu_js_aqui"></script>

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

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

Dentro de este archivo incluirías tu javascript, y como PHP lo procesaría, podrías incluir llamadas PHP de manera similar a lo anterior, simplemente mostrando los datos/opciones que necesitas. Algo a tener en cuenta es que podrías necesitar establecer las cabeceras para la salida como text/javascript.

Personalmente, prefiero mucho más el primer método, y es lo que uso cuando tengo configuraciones modificables por el usuario que afectan a archivos javascript.

14 ago 2010 22:25:09
Comentarios

Buena redacción. Esto es exactamente lo que he estado haciendo. Por otro lado, @bueltge tiene la respuesta que probablemente todos hemos estado buscando; sé que yo sí.

MikeSchinkel MikeSchinkel
15 ago 2010 00:47:59