Drupal-HTTP-POST-Daten

7

Wie sende ich HTTP POST / GET-Daten an drupal?

Zum Beispiel: Ich habe ein HTML-Formular:

<form action="mydrupalcite.com" method="get">
    <input type="text" name="title" />
</form>

Wie bekomme ich die titleDaten in das Antwortmodul von drupal? (oder in ein beliebiges Modul?)

Ich suche nach der Drupal-Methode, um dies zu tun (ich bin relativ neu bei Drupal und wie es wirklich funktioniert)

Hat es etwas mit dem Servicemodul zu tun?

tom91136
quelle
Ich bin nicht wirklich auf der Suche nach Formularen zu erstellen, sondern Daten an ein Formular in Drupal (ein Frage-Modul-Formular) zu
senden
Ok, ich dachte, sonst schau dir Clives Antwort an.
GoodSp33d

Antworten:

6

Die Formular-API von Drupal verfügt über einen integrierten CSRF- Schutz, sodass das Senden eines Formulars von einer externen Domäne nicht funktioniert. Sie können entweder die CSRF deaktivieren (sehr schlechte Idee) oder, wie Sie vorschlagen, das Servicemodul verwenden.

Es gibt keine Eins-zu-Eins-Zuordnung zwischen dem Servicemodul und den Formularen auf der Site. Stattdessen implementieren Module Ressourcen für bestimmte Aufgaben, die von einem externen Client verwendet werden sollen. Sie erhalten standardmäßig Knoten, Benutzer, Taxonomiebegriff und wahrscheinlich andere. Sie können also (zum Beispiel) einen neuen Knoten / Benutzer / Begriff hinzufügen. Dazu senden Sie jedoch nach der Authentifizierung xml / json / etc-Anforderungen an den Server und nicht ein Formular als solches.

Das Abrufen von Daten funktioniert ähnlich. Sie können entweder Services verwenden, um dies zu tun, oder wenn Sie Ihre eigene Authentifizierung verwalten können / nicht benötigen, finden Sie in der Antwort von indrock eine gute Methode.

Services sind sehr erweiterbar. Selbst wenn das Antwortmodul keine Ressourcen implementiert, ist es ziemlich einfach, eigene hinzuzufügen, die API-Funktionen aus dem Antwortmodul (oder einem anderen Modul) umschließen.

Die Dokumentation für Dienstleistungen wäre wahrscheinlich ein guter Anfang.

Clive
quelle
6

Sie müssen zuerst eine Seite (URL) in Drupal erstellen, um diese Parameter abzurufen. Sie können dies tun, indem Sie hook_menu()in Ihrem benutzerdefinierten Modul implementieren . Lesen Sie dies, um Ihr benutzerdefiniertes Modul zu erstellen .

function MYMODULE_menu() {
  $items['get_details'] = array (
    'title' => '',
    'page callback' => 'MYMODULE_access_variables',
    'page arguments' => array(1),
    'access callback' => TRUE,  // this will be accessible to everyone
  );
  return $items;
}

function MYMODULE_access_variables() {
 // Here you get access to the POSTED variables using $_RESPONSE php superglobal
  echo "<pre>";
  print_r ($_RESPONSE['title']);  // will get you the value of the HTML input type having name='title'
  echo "</pre>"
}

Dadurch wird eine Seite auf Ihrer Website unter der URL http://mydrupalsite.com/get_details erstellt

Jetzt machen Sie aus Ihrem HTML den Aufruf wie

<form action="mydrupalcite.com/get_details" method="post">
    <input type="text" name="title" /> <!-- Note that the value of the attribute 'name' will be used the capture the value which is posted -->
</form>

HINWEIS: Gemäß der Antwort von @ clive würde ich vorschlagen, dass Sie es nur für Entwicklungs- / Bildungszwecke verwenden. Dies kann Auswirkungen auf die Sicherheit haben.

AjitS
quelle
1
print_r druckt die angegebenen Parameter auf Ihrer Site. Wenn Sie möchten , Drupal den Rest der Seite (Sidebars, CSS, etc.), verwenden , so etwas zu addieren: pastebin.com/TC1FfPY7
AyeshK
@ AyeshK Netter Vorschlag! Ich habe gerade den Wert gedruckt, um zu zeigen, dass auf die Werte innerhalb der Funktion zugegriffen werden kann :)
AjitS