PHP değişkenini javascript'e aktarın


13

Daha sonra kullanabilmek için bazı PHP değişkenlerini javascript'te geçirme imkanı var mı?

Sadece içinde single.php.
Duymuştum wp_enqueue_scriptsama bununla birlikte bir JS dosyasına bir yol beyan etmek gerekiyor, ancak bir tanesine ihtiyacım yok.


Daha sonra ne yapıyorsunuz ve değişkenleri nerede kullanmak istiyorsunuz (PHP değişkenlerinin nerede olduğuna göre)? Elbette PHP ile JavaScript kodunu yankılayabilir / yazdırabilir ve böylece PHP değişken değerleri ekleyebilirsiniz. Ama istediğin bu değil sanırım ...
tfrommen

Bazı aplikasyon ile yeni bir db tablosu oluşturdum. Facebook api'den. Bu tablo: action_id, user_id, post_id, fb_id burada fb_id bir facebook eyleminden response.id. Sonra single.php içinde ben bir düğmeye basın Eğer api: FB.api ('/' + fb.response, 'delete'); Burada fb.response tablodan fb_id olmalıdır.
Sebastian Corneliu Vîrlan

Yanıtlar:


18

En iyi yöntem

wp_localize_scriptTam olarak bunu yapmak için bir göz atın .

Ancak daha önce kullanılmasını gerektirirwp_enqueue_scripts , bu nedenle JS'nizi gerçekten ayrı bir dosyaya taşımanız gerekir.
Elbette, bu birkaç dakika çabaya değecek.

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'de geçirilen parametreleri şu şekilde kullanabilirsiniz:

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

Durumunuzu düzenleyin

Yorumunuza göre

Ben response.idfacebook api bazı s ile yeni bir db tablo oluşturdu . Bu tablo: action_id, user_id, post_id, fb_id burada fb_id bir facebook eyleminden response.id. Daha sonra single.php dosyasında, eğer basarsam api ile fb eylemini silmem gereken bir düğme var: FB.api('/'+fb.response, 'delete');nerede tablodan fb.responseolmalıdır fb_id.

Aşağıdaki temanın /js/klasörünü koyun, yoksa oluşturun.
Dosyayı arayalım fb-response.js:

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

Daha sonra yukarıda görüldüğü gibi kaydolun, sıralayın ve yerelleştirin. Girmek istediğiniz kimliğiniz olduğunu varsayarsak $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 Açıkçası, yukarıda bunun bir tema içinde olduğu varsayılıyor. "Eklenti" den bahsediyorsak, konumları uygun şekilde değiştirin.


Ben bu konuda biraz acemi, bu yüzden bu benim wordpress uygulamak için deneyin: papermashup.com/jquery-iphone-style-ajax-switch . Gördüğünüz gibi, bir js dosyası ve kullanım dosyasına koymak için birkaç satır js kodu var. Yoksa bu kod satırını başka bir dosyaya koyabilir miyim?
Sebastian Corneliu Vîrlan

Yani herhangi bir küçük javascript eylem için bir dosya oluşturmak gerekir? Eğer varsa skype: sebyku17 ekleyebilirsiniz?
Sebastian Corneliu Vîrlan

Bu, ne yapmak istediğinize, nerede yapmak istediğinize vb. Bağlıdır. Genellikle: Hayır, harici bir JS dosyası kullanmanıza gerek yoktur. Ancak isterseniz, istediğiniz her şeyi tek bir dosyaya koyabilirsiniz . Birden fazla işleve sahipseniz, istediğin buysa, birden fazla dosyaya gerek yoktur. Ancak, bunu (IMHO oldukça karmaşık ve sizin durumunuzda biraz fazla abartılmış ) cevabı zaten kabul etmeden, tam olarak anlamadan kabul ettiniz . Hücum yok, @Johannes. ;)
tfrommen

1
Alınan yok, @tf. Şimdiye kadar sınırda aşırı olabilir, ancak biri için kodu büyüyebilir ve diğeri için ilk soru "değişkenlerden" çoğul biçimde bahsetti. Cevabınız aynı derecede geçerli, bu yüzden benden +1.
Johannes Pille

2
wp_localize_script PHP değerlerini bir Javascript dosyasına aktarmak için çok az kullanılan ve güçlü bir fonksiyondur. Pek çok insanın Wordpress'teki bu güçlü özelliği bilmemesi şaşırtıcıdır.
Dwayne Charrington

1

Yorumunuzu okuduktan sonra, böyle bir şey yapmak istediğinizi anlıyorum:

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

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

Hayır, çalıştığım sayfa: funny-videoro.com/the-dark-knight-rises-trailer-oficial . İsterseniz web sitesine giriş yapabilirsiniz. Sonra bir jquery ios tarzı düğmesi göreceksiniz. Kapalı kaydırdığımda fb api ile bir yazıyı silmeliyim. Posta kimliği db'de.
Sebastian Corneliu Vîrlan

Temel olarak cevabımda yazdım. Kimliği veritabanından alın ve bir değişkende saklayın. Ardından doğrudan tek satırlık JavaScript işlev çağrınıza yazdırın. Ve <input ... />işlevi yalnızca gösterim amaçlıdır. Seni anladığım kadarıyla, ihtiyacın olan her şey var. Değilse, lütfen biraz daha açıklamaya çalışın, ancak sorunuzda, yorumlarda değil.
tfrommen

Ben php ve js kodu aynı satırda kullanmak istemiyorum, wordpress bazı otomatik fonksiyonları vardır ...
Sebastian Corneliu Vîrlan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.