it-swarm-ko.tech

.php 파일에서 .js 파일로 변수를 보내는 방법은 무엇입니까?

누군가 나를 도울 수 있기를 바랍니다. 문제는 다음 중 하나입니다 : 1) 템플릿 파일 php.tpl에 보내기 위해 변수를 할당하는 모듈이 있습니다.

<?php
...
$testvar="Hello from alex!";
$variables['testvar'] = $testvar; 
...
?>

이 변수는 php.tpl 파일에 다음과 같이 표시 될 수 있습니다

<?php print $testvar?>

2) .js 파일을 분리했습니다. .js 파일 내에서이 변수에 액세스하려면 어떻게해야합니까?

.js 파일이 .php.tpl 안에 있으면 어떻게 될지 알고 있습니다.

<?php
$testvar="Hello from alex!";
?>
<script type="text/javascript">
var myVar = '<?php print $testvar?>';
</script>

문제는이 두 파일 .js와 .php.tpl이 분리되어 있으면 어떻게합니까?

39
Alexey

모듈에서 drupal_add_js() 을 사용해야합니다. .tpl.php에 변수를 출력 할 필요가 없습니다.

drupal_add_js(array('YOURMODULE' => array('testvar' => $testvar)), array('type' => 'setting'));

JavaScript에서 Drupal.settings.YOURMODULE.testvar의 값에 액세스 할 수 있습니다.

alert(Drupal.settings.YOURMODULE.testvar);

코드 변수에서 제안한대로 전역 변수를 직접 사용하는 것은 JavaScript에서 전역 네임 스페이스를 정리 이므로 사용하지 않는 것이 좋습니다. 또한 페이지로드시 코드가 트리거 된 경우 Drupal 7 문서에서 JavaScript 관리 (전체 페이지를 읽을 가치가 있음))의 "비헤이비어"섹션을 확인하십시오.

67
Pierre Buyle

MODULENAME.module 파일에서 다음 코드를 사용하십시오.

$testVariable = 'himanshu';
drupal_add_js(array('MODULENAME' => array('testvar' => $testVariable)), array('type' => 'setting'));
drupal_add_js(drupal_get_path('module', 'MODULENAME') . '/MODULENAME.js');

그리고 MODULENAME.js에서 다음 중 하나를 사용하십시오.

(function($) {
  Drupal.behaviors.MODULENAME = {
    attach: function (context, settings) {
      alert(settings.MODULENAME.testvar);
    }
  };

})(jQuery);

이런 식으로 PHP 변수를 JavaScript로 전달하여 사용할 수 있습니다.

17
Himanshu Pathak

Drupal 8 의 경우 drupal_add_js()이 제거되었습니다 (Drupal 7 이미)에서 사용되지 않음) = > 자세한 내용은이 내용 참조 .

PHP 정보를 Javascript로 보내는 방법은 유사한 질문에 @ 4k4의 답변으로 으로 완벽하게 설명되어 있습니다.

return [
  '#theme' => 'item_list',
  '#list_type' => 'ul',
  '#items' => $my_items,
  '#attributes' => ['class' => 'some_class'],
  '#attached' => [
    'library' => ['my_module/my_library'],
    'drupalSettings' => [
      'my_library' => [
        'some_variable1' => $value,        // <== Variables passed
        'another_variable' => $take_this,  // <== 
      ],
    ],
  ],
];

JavaScript에서는 다음과 같이 사용할 수 있습니다.

(function ($, Drupal, drupalSettings) {
  Drupal.behaviors.my_library = {
    attach: function (context, settings) {

      alert(drupalSettings.my_library.some_variable); //alerts the value of PHP's $value

    }
  };
})(jQuery, Drupal, drupalSettings);
5
Florian Müller