Wie zu übergeben, jquery variable an drupal (ajax)
Möchte ich weitergeben
var x = 10;
zu drupal/php-variable $x ohne Seite aktualisieren.
Kann jeder jeden schlagen?
Vielen Dank für die Antwort.
Eigentlich bin ich die Entwicklung benutzerdefinierter module für E-commerce-site(Drupal 6).
Auf der Produkt-Seite, habe ich 4 Attribute als text-Feld (Breite, Zoll, Fuß Breite, Höhe, Zoll, Höhe Fuß), Indem Sie einige der Berechnung bekam ich neue Preis für das Produkt. Ich wusste, dass die Berechnung bei j-query.
Jetzt habe ich alter "uc_add_to_cart_form", und fügen Sie 1 verstecktes Feld und Holen Sie sich jquery neuen Preis in das hidden-Feld mit $_SESSION. Bis zu diesem Punkt ist alles in Ordnung.
Ich wollen speichern Sie diese neue Preis-Produkt-Knoten. Ich bin nicht in der Lage, legen Sie diesen neuen Preis auf $node->Preis.
Ich bin mit uc_ajax_cart für "Add to cart" - button.
Kann bitte jemand mir empfehlen, wie kann ich Vorgehen?
- Die Frage macht nicht viel Sinn. Bitte verlängern Sie die Frage und erklären, was Sie zu tun versuchen. Kurz gesagt, es ist kein Punkt, der Zuweisung eines Wertes an eine Variable $var zu, es sei denn, Sie tun etwas mit $var. Die variable und alles andere wird verschwunden sein, nachdem die Anfrage beendet ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Übergeben Sie die variable Daten, die von JavaScript Drupal/PHP, ist eine Sache. Die Weitergabe von Drupal/PHP zu JavaScript ist eine separate Sache. Ich denke, dass Sie meinte, die erste in Ihrer Frage. Also werde ich gehen Sie vor und beantworten.
Die übergabe von Variablen von JavaScript an Drupal/PHP
1) Implementieren Sie eine Menü Haken. Sie können tun, dass auf eine vorhandene beigetragen oder neue benutzerdefinierte Modul, es hängt davon ab, was Sie tun. Es ist ziemlich einfach und geradlinig, es ist auch gut dokumentiert auf der Drupal-Website.
Let ' s break down für das Beispiel oben.
$items['my_custom_callback/%']
$items ist nur ein array, und es kann benannt werden, was Sie wollen. Wenn die URL meiner website ist http://www.alexanderallen.name, dann
http://www.alexanderallen.name/my_custom_callback
wäre die Ressource, die ich nennen würde, aus meiner JavaScript-Anwendung.In der array-Schlüssel, der Prozentsatz-symbol nach dem Wort my_custom_callback ist ein Platzhalter. Dies ist, wo kommen Sie an Ihre Daten von JS an PHP. Also, wenn der Wert der variable x ist 10, der Anruf aus dem JQuery sieht wie folgt aus:
http://www.alexanderallen.name/my_custom_callback/10
Beim laden, die URL, Drupal findet Ihr im Menü den Haken, und es wird die Funktion aufrufen, die Sie in den 'page callback' array-Schlüssel. In diesem Fall wäre das:
Dort können Sie tun was Sie wollen mit den Wert der variable x, wie Sie in der Datenbank gespeichert.
Wenn Sie legen Sie im Menü Haken, die auf einem benutzerdefinierten Modul und den Namen Ihres Moduls wurden example_module, die Menü-hook und eigene PHP-callback würde das wie folgt Aussehen:
Wenn Sie überholen wollte, mehrere Variablen von JQuery an Drupal/PHP, könntest du überlegen, JSONifying Sie in JavaScript, vor der übergabe an PHP. Denken Sie daran, dass, wenn die Nutzlast ist sehr groß, sollten Sie überlegen, JQuery .post() statt .get(). Die PHP-Funktionen für die Dekodierung von JSON sind hier auf php.net.
Vergessen Sie nicht, return $items am Ende der example_module_menu () - Funktion. Wenn Sie wollte, an zwei oder mehr Argumente, die von JavaScript an PHP dann den Menüpunkt würde in etwa so Aussehen:
In diesem Fall bin ich an drei Argumente an PHP. 'page arguments' gibt den Teil der URL, die Sie übergeben möchten, PHP. Wenn Sie schreiben
'page arguments' => array(0),
, dann das argument, um Ihre PHP-Funktion wäre der string my_custom_callback.2) Rufen Sie die Menü-hook von deinem JS-code mit JQuery. JQuery bietet verschiedene AJAX-Methoden. Welche Sie verwenden, hängt vom format der Daten zu tun haben und es ist eine Größe, unter anderem.
Wahrscheinlich, werden Sie eine der beiden JQuery-Methoden. .post() oder .get(), in Anbetracht der Tatsache, dass post-requests können für eine größere Daten -, payload ' als get-Anforderungen. Also, wenn die Größe der Variablen x = 10, möchten Sie vielleicht zu bleiben .get(). Beide .post() und .get () - Methoden sind eine Erweiterung von, oder Vertrauen auf die .ajax() Methode. Die .ajax () - Methode ist flexibler, denn es bietet Ihnen weitere Optionen, wie die Fähigkeit, legen Sie das format für die Daten (JSON oder plain-text), senden Sie eine Benutzername/Passwort zusammen mit Ihrer Anfrage wählen Sie zwischen synchron oder asynchron Anforderungen, und ob der browser-cache sollte oder nicht, die Anfrage.
Dies ist die Signatur der Methode für die JQuery .get () - Methode:
jQuery.get( url, [ data ], [ callback(data, textStatus, XMLHttpRequest) ], [ dataType ] )
Wenn Sie wollten, senden Ihre Daten per GET zu Drupal/PHP, mit dem Beispiel oben könnte man etwas wie das hier tun:
Beachten Sie, dass die Nutzung der Daten argument auf der .get() Methode ist optional, und in meinem Beispiel habe ich es weggelassen, aber erzielt den gleichen Effekt, durch die Verkettung der Daten zur übergabe an Drupal/PHP mit dem rest der URL.
Wenn ich ausführen, dass der HTTP-GET-Anfrage würde 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
Übergabe von Daten aus Drupal JavaScript
Dafür ist, dann würden Sie Verhalten verwenden, ich bin nicht die Eingabe in die details, da ich denke, dass war nicht deine Frage, aber Sie können gehen Sie auf die offizielle Dokumentation für Drupal 6 Verhaltensweisen, die hier.
Müssen Sie wissen:
Dem Menüpunkt API:
http://api.drupal.org/api/drupal/includes--menu.inc/group/menu/7
Einige Drupal JSON-Funktionen (vielleicht)
http://api.drupal.org/api/drupal/includes--common.inc/function/drupal_json_encode/7
variable_set()
http://api.drupal.org/api/drupal/includes--bootstrap.inc/function/variable_set/7
Und jQuery-ajax-API:
http://api.jquery.com/category/ajax/
Im wesentlichen, müssen Sie einen Menübefehl erstellen, dem die Delegierten auf einen Rückruf (seien Sie vorsichtig mit Ihren Berechtigungen) und dann rufen Sie mit $.ajax(). Wenn Sie brauchen, um etwas zu tun, mit der Antwort, siehe die Funktionen json_encode Funktionalität.
Möchten Sie vielleicht einen Blick hier für einige Menü-Beispiele:
http://drupal.org/project/examples
Ich denke, es ist ein Drupal-Schnittstelle zu den jQuery-ajax-API. Vielleicht kann jemand kommentieren, wenn Sie wissen, einen besseren Weg.