it-swarm.asia

كيفية تمرير PHP المتغيرات إلى Javascript / jQuery؟

لقد وجدت هذه الطريقة لإرسال المتغيرات من PHP إلى جافا سكريبت.

داخل template.tpl.php ملف لدي الكود التالي.

<?php 
  echo '<div class="drupal-vars" style="display:none;">'.json_encode($variables).'</div>';
?>

في جافا سكريبت ، لدي الكود التالي:

(function ($) {
  $(document).ready(function() { 
      var variables = jQuery.parseJSON($('.drupal-vars').html()); 
      //Remove if youwant to clean the code.
      $('.drupal-vars').remove();
  });

}(jQuery));

لقد وجدت حلًا آخر ، ولكنه أكثر تعقيدًا ، على الرغم من أنه قد يكون أفضل.

  1. هل هناك طريقة افضل لفعله؟
  2. كم هو قبيح ما أفعله هنا؟

يذهب البرنامج التعليمي مثل:

سأبدأ بإنشاء تطبيق hook_menu () لإنشاء استدعاء للصفحة:

<?php
function helper_menu() {

  $items = array();

  $items['js-vars'] = array(
    'title' => t('Javascript Variables'),
    'description' => t('Javascript Variables'),
    'page callback' => 'helper_page_callback_js_vars',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,    
  );

  return $items;

}
?>

بعد ذلك ، سأحدد استدعاء الصفحة:

<?php
function helper_page_callback_js_vars() {

  // include module javascript file
  drupal_add_js(drupal_get_path('module','helper') . '/js/helper.js');

  // define variables you'd like to pass to the DOM
  $js_vars = array(
    'js_vars' => array(
      'message' => t('Hello @username', array('@username' => $GLOBALS['user']->name)),
      'an_array' => array(
        'color' => t('red'),
        'name' => t('Eric'),
      ),
    ),
  );

  // pass variables to javascript
  drupal_add_js($js_vars, 'setting');

  // generate some page output
  return "TEST";

}
?>

وإليك محتويات جافا سكريبت تتضمن الملف الذي تمسكه في دليل الوحدة الخاص بي:

$(document).ready(function(){

  // debug variables directly in FireBug
  console.debug(Drupal.settings.js_vars);

  // popup mesage passed from Drupal
  alert(Drupal.settings.js_vars.message);

});
7
Xavi Colomer

ستكون أفضل حالًا باستخدام drupal_add_js() لتمرير الكائن الخاص بك في كائن JS Drupal.settings:

// In PHP:
drupal_add_js(array('myModule' => array('variables' => $variables)), 'setting');

// In JS
var variables = Drupal.settings.myModule.variables;

يتعامل دروبال مع جميع تحويلات العناصر/المصفوفات داخليًا ، وهذه مجرد طريقة أنظف بكثير للقيام بذلك ... في الوقت الحالي أنت تقوم بتضمين JSON الخام كجزء من إخراج الصفحة وهو ليس رائعًا من حيث الدلالات ؛ ضع في اعتبارك أيضًا أن محركات البحث ستلتقط هذا النص على الرغم من أنك تخفيه عن المستخدمين الذين لديهم جافا سكريبت.

أوصي أيضًا بفصل هذا المنطق عن ملف القالب نفسه ووضعه في وظيفة template_preprocess_ في ملف السمة template.php ... مرة أخرى ، إنه أكثر نظافة. على سبيل المثال.

function MYTHEME_preprocess_html(&$vars) {
  $variables = $your_variables;
  drupal_add_js(array('myModule' => array('variables' => $variables)), 'setting');
}

ألق نظرة على رابط الوظيفة drupal_add_js() ، هناك الكثير من الخيارات وربما ستجدها مفيدة جدًا.

16
Clive

أيضا ، في حالات أخرى ، يمكنك استخدام drupal_to_js . يقوم بتحويل متغير PHP إلى مكافئ جافا سكريبت الخاص به.

<?php
  $php_settings = array(
    'key1' => 'value1',
    'key2' => 'value2',
  );
?>
<script type="text/javascript">
  var phpSettings = <?php echo drupal_to_js($php_settings); ?>
</script>
1
Jekis

مثال على كيفية تحويل داتا العقدة إلى كائن js:

في template.php

function mythemename_preprocess_node(&$variables){  
     drupal_add_js(array('node' => $variables['node']), 'setting');
}

في page.tpl.php

  var node = Drupal.settings.node; 
 // console.log(node);
1
Matoeil