Blockadressierung
Eingetragen von ronald (3854)
am 30.06.2014 - 10:25 Uhr in
am 30.06.2014 - 10:25 Uhr in
Ich bin geard an einem Modul, das ich so konfigurierbar machen möchte, dass die Eingabe und die Ausgabe in verschiedenen Blöcken erfolgen kann.
Das Modul selbst bezieht seinen content von einem externen service.
Die Abfrageparameter sollen in einem kleinen Block eingebbar sein.
Beispiel zur Verdeutlichung: in der Sidebar ganz oben sei ein Textfeld und ein Abfragebutton - wird der Abfragebutton gedrückt, wird der Text aus dem Textfeld an den Service gesendet, und die Antwort landet im Footer (oder im contentbereich, oder ...).
Hierfür suche ich noch den richtigen Ansatz.
- Anmelden oder Registrieren um Kommentare zu schreiben
wir gerade für einen Kunden
am 30.06.2014 - 15:50 Uhr
Wir haben gerade für einen Kunden http:/www.mietwagen-preisvergleich.de online gebracht.
Da ist auf der Startseite und auch auf den Unterseiten ein Formular- Block, der den Ort und die gewünschte Zeit entgegen nimmt und via JSON an eine Schnittstelle sendet.
Diese sammelt die Daten von den einzelnen Autovermietern und liefert die zurück an ein Drupal-Modul, wo wir sie gelistet bzw. im Detail ausgeben.
Meinst Du sowas in der Art?
Puh, das ist ganz schön komplex.
Da spielen einige Module zusammen, die mit der externen Schnittstelle (Service) kommunizieren.
Oder verstehe ich Dich falsch und Du meinst eine viel kleinere Aufgabe?
so ähnlich, aber nicht so komplex
am 30.06.2014 - 16:33 Uhr
Den Service habe ich im Griff, so dass er mir einen HTML-Text liefert.
Ich muss nur definieren, wohin der Text soll.
Und ich will den Aufruf mit ein paar Parametern - es sind nur 3 - aus einem Formular holen, das in einem anderen Block fix steht.
Ich brauche ggf. ein Feld aus dem Userprofil, das im Formular als hidden field mitgesendet werden soll.
Das ist aber dann schon die advanced version ;-).
Aaaahhhh...das ist doch etwas
am 30.06.2014 - 18:48 Uhr
Aaaahhhh...das ist doch etwas einfacher. ;-)
Da gibt es verschiedene Ansätze.
Du holst ja vermutlich die drei Parameter und übergibst sie via GET-Methode an die Action des Formulars.
Mit der Action wird eine Seite aufgerufen, in der Du dann den HTML Code der fremden Seite ausgibst.
Methoden, mit denen Du solch fremden Code ausgeben kannst, sind hier gesammelt:
http://www.drupalcenter.de/node/39639
Es gibt noch das Webclient Modul (kenne ich nicht näher)
https://www.drupal.org/project/webclient
Die Funktion drupal_http_request macht genaus sowas.
Wir haben in o.g. Projekt indirekt mit der Funktion gearbeitet, da sie auch im JSON Client Modul verwendet wird.
Du kannst sie natürlich auch direkt verwenden:
https://api.drupal.org/api/drupal/includes!common.inc/function/drupal_http_request/7
Die gibt ein Objekt zurück u.a. mit den gewünschten Daten, die Du dann auf dieser Seite ausgeben kannst.
Sauber wäre die Verarbeitung einer der o.g. Methoden als Modul.
Quick+Dirty wäre die Verwendung von PHP-Code in der Seite oder dem Block, wo der Code eingebunden werden soll.
das soll schon ein eigenes Modul werden
am 30.06.2014 - 20:39 Uhr
Auf Klimmzüge habe ich keine Lust.
Quick ist zwar gut, es muss nicht auch noch dirty sein ;-)
Mir geht es um die Konfigurierbarkeit des Kontrollfensters und des Ausgabefensters.
Also vergiß den externen Service - die eigentliche Frage lautet:
Wie bringe ich ein Formular in einen Block, und dessen Ergebnis in einen anderen?
Wie mache ich das konfigurierbar?
Kurze Frage dazu: sind um $user alle Felder (auch hinzugefügte) immer verfügbar? Ich könnts ja ausprobieren, aber so gehts schneller ;-).
Von wegen Formular in
am 30.06.2014 - 21:04 Uhr
Von wegen Formular in Block.
Da habe ich mich bei obigem Projekt auch lange verkopft.
Du kannst ja Webforms auch als Block einrichten, statt als Node.
Aber da hast Du immer das Problem, daß die Anfragen auch in der Datenbank gespeichert werden.
Wir haben dann eben eigene Module geschrieben, wo man auch noch via Callback-Funktionen Validierungen einfügen kann oder irgendwelchen Zauber rund um den Submit anstellen kann.
Da du das nicht brauchst, kannst Du ja den Aufbau des Formulars einfach als HTML in den Block schreiben.
$user ist verfügbar im Block:
Du brauchst eine Zeile
<?php
global $user;
?>
Danach stehen Dir alle Werte aus dem objekt zur Verfügung.
Was genau soll konfigurierbar sein?
Das Formular oder die Ausgabe des HTML?
meine Vorstellung
am 30.06.2014 - 21:56 Uhr
Ich erstelle ein Modul, das ein Abfrageformular erzeugt.
Das ist nicht so schwierig.
Forms API, nicht Webforms.
Wenn dort der Sendebutton gedrückt wird, soll ein Service aufgerufen werden, also eine Webseite, die die Parameter aus dem Formular (per POST) erhält, und daraus ein HTML-Dokument liefert.
Dieses soll aber nun nicht dort erscheinen, wo das Formular steht, sondern in einem anderen Block.
Das Modul hat also zwei Blöcke, den Formularblock und den Ausgabeblock. Diese sollen frei konfigurierbar sein.
Einen Parameter möchte ich aus dem User-Registration-Form ziehen, die anderen beiden Parameter sind Datumsangaben relativ zum Aufrufdatum, bzw von Hand einzugeben.
"Das ist nicht so
am 01.07.2014 - 05:43 Uhr
"Das ist nicht so schwierig."
Nicht so schwierig, wie Dir die Infos aus der Nase zu ziehen. ;-)
Fehlt Dir evt. noch der Teil, der ein Template für die Ausgabe erzeugt?
Oder wo genau hängt's jetzt noch?
Was verstehst Du unter frei konfigurierbar?
Daß Du den Block in eine beliebige Region schieben kannst?
ich bin in der Lösungsfindungsphase
am 01.07.2014 - 08:37 Uhr
Da ist es manchmal gut und wichtig, mit jemandem zu "reden", um Designfehler zu vermeiden.
Da dies nicht mein Hauptprojekt ist, kann ich nur wenig Zeit darauf verwenden.
Deshalb versuche ich nebenher theoretisch so viel zu klären wie möglich.
Der nächste Schritt, wahrscheinlich erst am Wochenende, wird der erste Codeentwurf sein.
Aber vielen Dank für die Hilfe bei der Vorklärung.
Bin einen Schritt weiter -
hook_block_info und hook_block_configure bringen mich weiter.
Jetzt will ICH aber mehr wissen, bitte schön!
am 01.07.2014 - 09:01 Uhr
Das interessiert mich aus einem anderen Blickwinkel.
Du nimmst einen externen Webservice, also REST oder SOAP???
Du baust eine form mit der Form api. Darin gibst Du den Endpoint an mit der extern definierten Syntax.
Dann machst Du einen Block mit einem Callback, der die Ergbnisse abfängt.
Habe ich das jetzt richtig verstanden?
Danke vorab,
Marc
wie gesagt
am 01.07.2014 - 09:37 Uhr
ich bin noch in der Findungsphase, aber ja, so soll das ablaufen.
Wenn Interesse besteht, veröffentliche ich das Ergebnis hier oder an anderer Stelle.
Kann aber etwas dauern, da ich dieses Projekt privat und nebenher betreibe.
Klar besteht da Interesse!
am 01.07.2014 - 09:42 Uhr
Klar besteht da Interesse!
Zitat: Klar besteht da
am 01.07.2014 - 10:10 Uhr
Klar besteht da Interesse!
Dem schließe ich mich an.