Sửa đổi tệp JS với dữ liệu từ cài đặt plugin


9

Tôi có một plugin, trong số những thứ khác, có một tệp javascript yêu cầu một vài cài đặt cụ thể của người dùng. Điều gì sẽ là cách tốt nhất để đưa các cài đặt đó vào javascript từ các tham số cài đặt của plugin?

Nói cách khác, nếu tôi biến các cài đặt đó thành một phần của trang cài đặt nơi người dùng có thể nhập chúng, làm thế nào tốt nhất tôi có thể đưa các giá trị đó vào javascript? Tôi có phải sử dụng một cái gì đó để nối thêm một số thẻ script và đặt chúng qua PHP trên mỗi lần tải trang không? Đặt cookie sẽ là một cách tốt hơn để làm điều này?


2
Đây là một câu hỏi thực sự tuyệt vời và một câu hỏi mà tôi đã dự định hỏi. Cảm ơn đã hỏi nó!
MikeSchinkel

Câu trả lời:


10

tốt hơn là, bạn sử dụng các chức năng của WP cho việc này, một ví dụ cho đa ngôn ngữ:

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

sử dụng tệp này trong tệp 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 );

});

Cũng xem bài viết từ Otto


Tôi không thực sự hiểu mã của bạn quá tốt nhưng tôi thấy liên kết rất hữu ích.
Ryan Elkins

1
Điều này thực sự xuất sắc, cảm ơn bạn! Tôi đã tự hỏi làm thế nào để làm điều này trong một thời gian thực sự dài; cảm ơn bạn! Tôi muốn hỏi nó trong danh sách tin tặc wp nhưng không bao giờ làm thế. Cám ơn bạn một lần nữa.
MikeSchinkel

1
Bạn có thể xem trên plugin cuối cùng của tôi post2media ( wordpress.org/extend/plugins/post2media ) để xem ví dụ về plugin trực tiếp; Plugin không có quá nhiều nguồn và tôi nghĩ rằng đây là nguồn tuyệt vời để đọc nguồn và hiểu giải pháp.
bueltge

1
Đây là một ví dụ đơn giản giúp đưa nó xuống những điều cơ bản (bạn có rất nhiều điều trong ví dụ của bạn): prelovac.com/vladimir/ Kẻ
Viper007Bond

1

Có một số cách mà bạn có thể làm điều này, một trong số đó tôi đã làm trước đây, cách khác tôi chưa từng làm, nhưng tôi đã sử dụng cho các tệp cấu hình XML.

Đầu tiên là bao gồm các biến trong thẻ script bên trong tiêu đề hoặc chân trang WP, trước thẻ script nơi bạn bao gồm tệp JS của mình, ví dụ:

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

Cách khác là bao gồm JS bên trong tệp PHP được bao gồm bên trong thẻ script.

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

Trong tệp này, bạn sẽ bao gồm javascript của mình và vì PHP sẽ phân tích cú pháp nên bạn có thể bao gồm các cuộc gọi PHP theo cách tương tự như trên, chỉ cần lặp lại dữ liệu / tùy chọn mà bạn yêu cầu. Một điều cần lưu ý là bạn có thể cần phải đặt các tiêu đề cho đầu ra là text/javascript.

Cá nhân tôi rất thích phương pháp đầu tiên và là những gì tôi sử dụng khi tôi có các cài đặt có thể thay đổi người dùng ảnh hưởng đến các tệp javascript.


Đẹp viết lên. Đây chính xác là những gì tôi đã làm. OTOH, @bueltge có câu trả lời mà có lẽ tất cả chúng ta đang tìm kiếm; Tôi biết tôi có.
MikeSchinkel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.