Senden eines Werts an JavaScript


7

Ich habe den Theme-Handler für ein Formular in Drupal festgelegt und dieser Handler hat eine Vorlagendatei. Was ist der einfachste Weg, um einen Wert von PHP an JavaScript in dieser Include-Datei zu senden?

Antworten:


13

Die Standardmethode in Drupal ist drupal_add_js unter Verwendung des Typs "Einstellung":

drupal_add_js(array('variableName' => 'value'), 'setting');

Dadurch wird die Variable auf der JS-Seite unter Drupal.settings.variableName verfügbar.


1

Einige weitere Beispiele zu drupal_add_js ,

Es ist besser, den Modulnamen beim Hinzufügen einer JS-Variablen anzugeben, um Probleme zu vermeiden.

drupal_add_js(array('myModule' => array('key' => 'value')), 'setting');

Wenn Sie nach der Initialisierung des DOM JS-Code ausführen möchten,

drupal_add_js('jQuery(document).ready(function () { alert("Hello!"); });', 'inline');

1

Der #attachedSchlüssel zu einem Formular kann auch zum Senden einer PHP-Variablen an js verwendet werden.

  $my_variable = 'My custom value';
  $form['some-element']['#attached']['js'] = array(
    array(
     'data' => drupal_get_path('module', 'my_module') . '/js/script.js',
    ),
    array(
      'data' => array(
        'variable' => $my_variable,
       ),
      'type' => 'setting',
    ),
  );

Dies kann hook_form_alterzum Beispiel in verwendet werden.


-10

Am einfachsten ist es, es in ein Skript-Tag zu übertragen:

<script type="text/javascript">
   var variableName = <?php echo $variable ?>;
</script>

Wenn Drupal eine Vorlagensprache verwendet, müssen Sie die <?php echo... ?>durch die relevante Ausgabemethode ersetzen ...


Auch wenn Variable eine Zeichenfolge ist, sollten Sie sie in Anführungszeichen setzen und bei Bedarf maskieren.

1
Scotts Vorschlag, Drupal.settings zu verwenden, ist definitiv der richtige Weg, dies zu tun.
Chaulky

1
Dies ist kein Drupal-Standard.
Jayendra Kainthola
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.