Передайте змінну PHP в javascript


13

Чи є можливість передавати деякі змінні PHP в JavaScript, щоб я міг їх використовувати пізніше?

Тільки в single.php.
Я чув про те, wp_enqueue_scriptsале з цим потрібно оголосити шлях до файлу JS, але він мені не потрібен.


Що ви повідомляєте пізніше , і де ви хочете використовувати змінні (щодо місця змін PHP)? Звичайно, ви можете відлучити / надрукувати код JavaScript через PHP, і таким чином вставити значення змінних PHP. Але я думаю, що це не те, що ти хочеш ...
tfrommen

Я створив нову таблицю db з деякими Response.id з facebook api. Це таблиця: action_id, user_id, post_id, fb_id, де fb_id є response.id від дії у Facebook. Тоді в Single.php у мене є кнопка, де, якщо я натискаю, я повинен видалити дію fb з api: FB.api ('/' + fb.response, 'delete'); де fb.response має бути fb_id з таблиці.
Себастьян Корнеліу Ворлан

Відповіді:


18

Найкращий метод практики

Погляньте wp_localize_script, що призначено робити саме так.

Але це вимагає попереднього використанняwp_enqueue_scripts , отже, вам потрібно буде перемістити JS в окремий файл.
Це варте тих кількох хвилин зусиль, правда.

function wpse_96370_scripts()
{
    if ( is_single() ) {

        wp_register_script(
           'your_script_handle',
           get_template_directory_uri() . '/js/your-script.js',
           array( /* dependencies*/ ),
           1.0,
           true
       );

       wp_enqueue_script( 'your-script-handle' );

       $script_params = array(
           /* examples */
           'post' => 99,
           'users' => array( 1, 20, 2049 )
       );

       wp_localize_script( 'your-script-handle', 'scriptParams', $script_params );

    }
}
add_action( 'wp_enqueue_scripts', 'wpse_96370_scripts' );

У JS ви зможете використовувати такі передані параметри, як:

var posts = scriptParams.post,
    secondUser = scriptParams.users[1]; /* index starts at 0 */

// iterate over users
for ( var i = 0; i < scriptParams.users.length; i++ ) {
    alert( scriptParams.users[i] );
}

[Редагувати] Ваша ситуація

Відповідно до вашого коментаря

Я створив нову таблицю db з деякими response.idз facebook api. Це таблиця: action_id, user_id, post_id, fb_id, де fb_id є response.id від дії у Facebook. Потім у single.php у мене є кнопка, де, якщо я натискаю, я повинен видалити fb з api: FB.api('/'+fb.response, 'delete');де fb.responseмає бути fb_idз таблиці.

Поставте наступну /js/папку вашої теми , створіть її, якщо її немає.
Давайте назвемо файл fb-response.js:

jQuery( '#button_id' ).click( function() {
    FB.api( '/' + fbParams.id, 'delete' );
});

Потім зареєструйте, запишіть і локалізуйте, як показано вище. Припустимо, що у вас є ідентифікатор, який ви хочете передати, скажімо $fb_id:

wp_register_script(
    'fb-response',
     get_template_directory_uri() . '/js/fb-response.js',
     array( 'jquery' ),
     1.0,
     true
);

wp_enqueue_script( 'fb-response' );

wp_localize_script( 'fb-response', 'fbParams', array( 'id' => $fb_id ) );

NB. Очевидно, вищесказане припускає, що це є темою. Якщо ми говоримо про "плагін", змініть місця відповідно.


Я трохи починаю в цьому, тому намагаюся реалізувати це на своєму wordpress: papermashup.com/jquery-iphone-style-ajax-switch . Як ви бачите, є файл js та декілька рядків коду js, який слід помістити у файл використання. Або я можу помістити ці кілька рядків коду в інший файл?
Себастьян Корнеліу Ворлан

Отже, для будь-якої невеликої дії JavaScript я повинен створити файл? Якщо у вас є можливість, можете додати в skype: sebyku17?
Себастьян Корнеліу Ворлан

Це залежить від того, що ви хочете зробити, де ви хочете це зробити тощо. Як правило: Ні, вам не потрібно використовувати зовнішній файл JS. Але якщо ви захочете, ви можете помістити все, що завгодно, в один файл . Немає необхідності в декількох файлах, якщо у вас є кілька функцій, якщо про це ви запитували. Однак ви вже прийняли цю (IMHO досить складна і у вашому випадку трохи непомітна відповідь) - не повністю зрозумівши, як я це сприймаю. Без образи, @Johannes. ;)
tfrommen

1
Не прийнято, @tf. Поки це може бути надмірна надмірна кількість, але для одного його код може зростати, а для іншого, початкове питання говорило про "змінні", у формі множини. Ваша відповідь однаково справедлива, тому +1 від мене.
Йоганнес Піл

2
wp_localize_script - це дуже невикористана та потужна функція для передачі значень PHP у файл Javascript. Дивно, що мало хто насправді знає про цю потужну особливість Wordpress.
Дуейн Чаррінгтон

1

Прочитавши ваш коментар, я розумію, що ви хочете зробити щось подібне:

// Do something to get the ID
$facebook_id = ...

// Create and print the button
echo '<input onclick="FB.api('/'+'.$facebook_id.', 'delete')" />';

Ні, це сторінка, на якій я працюю: funny-videoro.com/the-dark-knight-rises-trailer-oficial . Якщо ви хочете, ви можете увійти на веб-сайт. Тоді ви побачите кнопку jquery ios style. Коли я ковзаю на Off, я повинен видалити за допомогою fb api a post. Ідентифікатор допису знаходиться в db.
Себастьян Корнеліу Ворлан

Ну, це в основному те, що я написав у своїй відповіді. Вийміть ідентифікатор з бази даних і збережіть його в змінній. Потім безпосередньо надрукуйте його у своєму однолінійному дзвінку функції JavaScript. Її <input ... />функція була лише в демонстраційних цілях. Наскільки я вас зрозумів, там все сказано, що вам потрібно. Якщо ні, спробуйте пояснити ще дещо, але у своєму питанні, а не в коментарях.
tfrommen

Я не хочу використовувати php та js-код в одному рядку, у wordpress - це деякі функції автоматично ...
Себастьян Корнеліу Ворлан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.