Wie übergebe ich die jquery-Variable an drupal (ajax)

7

Ich möchte

weitergeben

var x = 10; zu drupal / php Variable $ x ohne Seitenaktualisierung.

Kann jemand vorschlagen?

Vielen Dank für die Antwort. Eigentlich entwickle ich ein eigenes Modul für die E-Commerce-Seite (Drupal 6). Auf Produktseite habe ich 4 Attribute als Textfeld (Breite Zoll, Breite Fuß, Höhe Zoll, Höhe Fuß) Durch einige Berechnungen bekam ich einen neuen Preis für dieses Produkt. Ich habe diese Berechnung in j durchgeführt. Jetzt ändere ich "uc_add_to_cart_form" und füge 1 verstecktes Feld hinzu und bekomme jquery neuen Preis in dieses versteckte Feld mit $ _SESSION. Bis zu diesem Punkt funktioniert alles gut.

Ich möchte diesen neuen Preis für den Produktknoten speichern. Ich kann diesen neuen Preis nicht auf $ node- & gt; price setzen. Ich benutze uc_ajax_cart für die Schaltfläche "In den Warenkorb".

Kann mir bitte jemand vorschlagen, wie ich fortfahren kann?

    
Drupal_newbie 28.01.2011, 23:49
quelle

2 Antworten

35

Das Übergeben der variablen Daten von JavaScript an Drupal / PHP ist eine Sache. Die Weitergabe der Informationen von Drupal / PHP an JavaScript ist eine andere Sache. Ich denke, du meintest den ersten in deiner Frage. Also werde ich weitermachen und antworten.

Übergabe von Variablen von JavaScript an Drupal / PHP

1) Implementieren Sie einen Menü-Hook . Sie können dies für ein vorhandenes oder neues benutzerdefiniertes Modul tun, abhängig davon, was Sie tun. Es ist ziemlich einfach und direkt, es ist auch gut dokumentiert auf der Drupal-Website.

%Vor%

Lassen Sie uns das obige Beispiel aufschlüsseln.

$items['my_custom_callback/%']

$ items ist nur ein Array und kann beliebig benannt werden. Wenn die URL meiner Website www.alexanderallen.name lautet, dann wäre http://www.alexanderallen.name/my_custom_callback die Ressource, die ich von meiner JavaScript-Anwendung aus aufrufen würde.

Im Schlüssel des Arrays ist das Prozentzeichen nach dem Wort mein_benutzer_callback ein Platzhalter. Hier übergeben Sie Ihre Daten von JS an PHP. Wenn also der Wert der Variablen x 10 ist, sieht der Aufruf von Ihrem JQuery wie folgt aus:

http://www.alexanderallen.name/my_custom_callback/10

Wenn Sie diese URL laden, findet Drupal Ihren Menü-Hook und ruft die Funktion auf, die Sie im Array-Schlüssel 'Seiten-Callback' definiert haben. In diesem Fall wäre das:

%Vor%

Dort können Sie alles, was Sie wollen, mit dem Wert der Variablen x machen, wie es in der Datenbank gespeichert wird.

Wenn Sie den Menü-Hook auf ein benutzerdefiniertes Modul setzen und der Name Ihres Moduls "example_module" wäre, würden der Menü-Hook und der benutzerdefinierte PHP-Callback folgendermaßen aussehen:

%Vor%

Wenn Sie mehrere Variablen von JQuery an Drupal / PHP übergeben möchten, könnten Sie JSoning in JavaScript in Erwägung ziehen, bevor Sie es an PHP übergeben. Denken Sie daran, dass, wenn die Nutzlast sehr groß ist, Sie JQuery .post () anstelle von .get () berücksichtigen sollten. Die PHP-Funktionen zum Decodieren von JSON sind hier auf php.net .

Vergessen Sie nicht, am Ende der Funktion example_module_menu () $ -Einträge zurückzugeben. Wenn Sie zwei oder mehr Argumente von JavaScript an PHP übergeben möchten, sieht der Menüeintrag ähnlich aus:     

%Vor%

In diesem Fall gebe ich drei Argumente an PHP weiter. 'Seitenargumente' gibt den Teil der URL an, den Sie an PHP übergeben möchten. Wenn Sie 'page arguments' => array(0), schreiben würden, wäre das Argument für Ihre PHP-Funktion die Zeichenfolge my_custom_callback .

2) Rufen Sie den Menü-Hook Ihres JS-Codes mit JQuery auf. JQuery bietet verschiedene AJAX-Methoden. Welche Sie verwenden, hängt unter anderem vom Format der Daten ab, mit denen Sie arbeiten, und von der Größe.

Wahrscheinlich werden Sie eine von zwei JQuery-Methoden verwenden. .post () oder .get () , wobei berücksichtigt wird, dass diese Post-Anfragen eine größere Datennutzlast ermöglichen als Anfragen. Wenn also die Größe der Variablen x = 10 ist, möchten Sie vielleicht bei .get () bleiben. Sowohl die Methoden .post () als auch .get () sind eine Erweiterung der Methode .ajax () oder beruhen auf ihr . Die Methode .ajax () ist flexibler, weil sie Ihnen mehr Möglichkeiten bietet, wie zB das Format der Daten (JSON oder Nur-Text), einen Benutzernamen / ein Passwort mit Ihrer Anfrage zu senden, zwischen synchron oder asynchron zu wählen Anfragen, und ob der Browser die Anfrage zwischenspeichern sollte oder nicht.

Dies ist die Methodensignatur für die JQuery-Methode .get ():

jQuery.get( url, [ data ], [ callback(data, textStatus, XMLHttpRequest) ], [ dataType ] )

Wenn Sie Ihre Daten mit GET zu Drupal / PHP senden würden, könnten Sie mit dem obigen Beispiel so etwas tun:

%Vor%

Beachten Sie, dass die Verwendung des Datenarguments für die .get () -Methode optional ist. In meinem Beispiel habe ich sie weggelassen, aber den gleichen Effekt erzielt, indem ich die Daten mit dem Rest der URL an Drupal / PHP übergeben habe .

Wenn ich das ausführen würde, würde die HTTP-GET-Anfrage wie folgt aussehen:

http://www.alexanderallen.name/my_custom_callback/alexander/10/20

und die Antwort würde wie folgt aussehen:

Hi Alexander, X + Z = 30

Daten von Drupal an JavaScript übergeben

Dafür würdest du Verhaltensweisen verwenden, ich gehe nicht ins Detail, da ich denke, dass das nicht deine Frage war, aber du kannst zur offiziellen Dokumentation für Drupal 6-Verhaltensweisen gehen hier .

    
amateur barista 31.01.2011 03:43
quelle
4

Sie müssen wissen:

Die Menü-API:
Ссылка
Einige Drupal JSON-Funktionen (vielleicht)
Ссылка
variable_set ()
Ссылка
Und jQuery ajax API:
Ссылка

Im Wesentlichen müssen Sie einen Menüeintrag erstellen, der an einen Rückruf delegiert wird (seien Sie vorsichtig mit Ihren Berechtigungen) und rufen Sie ihn dann mit $ .ajax () auf. Wenn Sie etwas mit der Antwort tun müssen, lesen Sie die Funktion json_encode.

Vielleicht möchten Sie hier einige Menübeispiele ansehen:
Ссылка

Ich denke, es gibt eine Drupal-Schnittstelle zur jQuery ajax API. Vielleicht kann jemand kommentieren, wenn sie einen besseren Weg kennen.

    
Rimian 29.01.2011 00:32
quelle

Tags und Links