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


37

누군가 나를 도울 수 있기를 바랍니다. 문제는 다음 중 하나입니다 : 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이 분리되어 있으면 어떻게합니까?


2
맹목적으로 변수를 Javascript로 반향하지 마십시오. Javascript 메타 문자 (특히 작은 따옴표)가 있으면 구문 오류가 발생합니다. 수행 var myVar = <?php echo json_encode($testvar) ?>;에 관계없이 PHP의 VAR의 데이터 유형 / 컨텐츠, 당신을 위해 이러한 문제를 돌볼 것이다.

Drupal 7 js 팁 및 요령 목록 browse-tutorials.com/tutorial/javascript-drupal-7
ram4nd

답변:


65

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 관리 의 "베이비 어"섹션을 확인하십시오 (전체 페이지를 읽을 가치가 있음).


17

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로 전달하여 사용할 수 있습니다.


기능은 무엇을하고 언제 트리거됩니까? Drupal.settings.YOURMODULE.testvar를 직접 사용하지 않는 이유는 무엇입니까?
Incredible

5

들면 드루팔 8 , drupal_add_js()(이미 드루팔 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);

말할 것도없이에 *.libraries.yml정의 된 종속성이 있어야합니다 - core/drupalSettings.
leymannx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.