Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

Variablenübergabe JS -> PHP

Eingetragen von CKIDOW (67)
am 25.02.2009 - 17:59 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

Hallo an alle!

Ich habe so ein Programm, mit dem kann man Kreuzworträtsel, Lückentexte etc. generieren und auch als html ausgeben. Die Überprüfung der Richtigkeit passiert dann per JS was als script-Teil dort in die html Datei mit eingebunden wird.

Ich würde das gerne so realisieren, dass mir von der Kontrolle irgendwie die Variable (60% Beispielsweise) für php übergeben wird, um das z.B. dann mit "Userpoints" Modul weiter zu nutzen.

Gibt es da irgendeine Möglichkeit zur Realisierung? Jemand aus dem IRC Chat sagte mit bereits, dass es auf Grund der JS Geschichte einfach zu knacken sei um beispielweise zu betrügen.

Habt ihr da irgendeine Meinung zu?

So sieht z.B. die html dann aus:

AnhangGröße
drag_drop.html32.82 KB
crossword.html55.69 KB
‹ Registration Language Contentausgabe ohne Site-Layout ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Variablenübergabe JS -> PHP

Eingetragen von saila (59)
am 26.02.2009 - 00:59 Uhr

Hi,

was genau du nun möchtest, habe ich noch nicht vollends verstanden. Allerdings findest du unter:
http://api.drupal.org/api/function/drupal_add_js/6 einige Infos zur Einbindung von JavaScript. Darüber hinaus findest du auf der gleichen Seite unter "> 26 functions call drupal_add_js()" weitere Beispiele für den Einsatz. Wenn du in der Eingabe oben links (Search) _js eingibst, werden einige Funktionen angeboten. Musst du dir ansehen.

Ansonsten bring noch mehr Infos wo und was genau du machen möchtest.

Leider erfahre ich in diesem Forum immer eine gähnende Leere bei Fragen zur Modulentwicklung. Insbesondere dann, wenn es in die Tiefen von Drupal geht.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Also: Ich habe einen content

Eingetragen von CKIDOW (67)
am 26.02.2009 - 10:42 Uhr

Also:

Ich habe einen content typen erstellt "exercise"... da drin habe ich 2 Textfields. Das erste: "field_javascript" und das zweite: "field_html"
Jetzt erstelle ich eine dieser Übungen mit dem (Ich nenne ihn mal "Generator") Generator, exportiere das ganze als html. Jetzt erstelle ich in Drupal ein "Exercise" und kopiere den "SCRIPT" - Teil der Datei in das "field_javascript" und all das was im "BODY" - Teil steckt in das "field_html".

Dann habe ich eine page-exercise.tpl.php wo ich einfach aus gewohntem Vorgehen das field_javascript im HEAD Teil ausgebe (und den BODY mit der entsprechenden id und diesem "onload..." versehe). Dann habe ich eine node-exercise.tpl.php in der ich einfach das field_html ausgebe in Rohform, also den $node->field_html[0]['value']; quasi.

Wenn ich mir dann in Drupal einen exercise node anschaue, funktioniert alles soweit.

Jetzt kommen wir zum eigentlichem Punkt: Einfach nur so eine Übung machen, ist zwar toll, bringt aber nicht viel, wenn man die Auswertung nicht weiterverarbeitet. Insofern würde ich gerne das ganze beispielsweise mit dem Modul "Userpoints" verbinden.

D.h. userpoints_userpointsapi(array('uid' => $user->uid, 'points' => $die_punkte_aus_der_auswertung_der_exercise, 'tid' => 'entsprechende_tid'));

Ich muss also diese Javascript-Auswertung an PHP als eine variable liefern, die ich mit der userpoints_api verbinden kann. Das ist erstmal der Grundgedanke.

(Wahrscheinlich wird es sinnvoller sein, pro user die auswertung der einzelnen exercises zu speichern in der DB und entsprechend dann einen durchschnitt zu errechnen. Falls der User die Übung mehrmals macht, dass quasi immer der Durschnitt dem user als Punkte gewährt wird und auch nicht jedesmal dazu addiert wird.)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Die JS-Variable kannst du

Eingetragen von saila (59)
am 26.02.2009 - 20:37 Uhr

Die JS-Variable kannst du lediglich an einen input type="text" oder type="hidden" übergeben welcher das element readonly beinhaltet. Danach per senden also POST in der DB speichern.

Die wohl bessere Lösung ist ohnehin (sofern ich deinen Ansatz verstanden habe), die Punkte jeweils in der DB zu speichern. Damit kannst du auch im späteren wesentlich mehr anfangen. Zudem kannst du Start und Endzeiten mitliefern, wie lange ein User eine Übung vollzogen hat usw.. Sprich du kannst das ganze statistisch besser auswerten.

  • Anmelden oder Registrieren um Kommentare zu schreiben

D.h. ich müsste einen HTML

Eingetragen von CKIDOW (67)
am 27.02.2009 - 10:41 Uhr

D.h. ich müsste einen HTML Input Form Element erzeugen, welches die variable in die Datenbank schreibt oder wie? Aber wie bekomme ich denn diese Variable von der Auswertung in das HTML Form Element? Ich bin nicht so der Coder und bräuchte da mal irgendwie einen Ansatz zum Lesen oder ein Beispielsyntax oder snippet. Ich hab ja auch schon gegoogelt etc. aber wenn ich nicht, weis wonach ich expliziet suchen muss, ist das Finden nicht so erfolgreich.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hast du jquery.js in deinem

Eingetragen von saila (59)
am 27.02.2009 - 12:24 Uhr

Hast du jquery.js in deinem Drupal oder ein anderes Framework? Die von Drupal mitgelieferten *.js-Dateien habe ich mir hierzu noch nicht angesehen.

Du musst dich auf jeden Fall mit dem ersten Link schon mal auseinander setzen, welchen ich mitgeteilt habe. Dann ist die Frage, wie du den Content aufbauen willst bzw. wie er aufgebaut wird und wie du Ergebnisse speichern willst oder auch nicht. Ein input-tag ist nur erforderlich, wenn du ergebnisse speichern willst. Ansonsten kannst du das Ergebnis auch auf andere Weise darstellen per JavaScript.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Also wie ich mit

Eingetragen von CKIDOW (67)
am 03.03.2009 - 11:43 Uhr

Also wie ich mit drupal_add_js über "setting" quasi ein js_variable aufbau verstehe ich ja bereits... allerdings verstehe ich nich wie ich mit drupal_add_js eine js_variable an php übergebe. Oder stecke ich grad im völlig falschen Film?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Naja, es ist immer noch die

Eingetragen von saila (59)
am 03.03.2009 - 12:04 Uhr

Naja, es ist immer noch die Frage offen, willst du die Variable aus JS in der DB speichern oder lediglich ausgeben?
Oder willst du ein Link-Parameter an einen href-linnk anhängen? Es bleiben dir für die Variablenübergabe die drei möglichkeiten:
- input-tag (readonly) zur Datenspeicherung oder per POST zumindest übermitteln
- URL-Parameter anhängen. Einen vorhandenen Link im Document anpassen/verändern/erweitern
- direkte Ausgabe. Innerhalb des Dom eine Datenausgabe anstoßen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nein ich will sie nicht

Eingetragen von CKIDOW (67)
am 03.03.2009 - 13:25 Uhr

Nein ich will sie nicht direkt in die DB schreiben... ich will einfach dass die variable aus JS am besten per POST an eine andere URL übergeben wird, bei der ich dann sagen kann $data = $_POST['data'}; oder sowas. Also Jquery ist ja bei D6 mit dabei... insofern kann ich das mit nem jquery ajax request auslösen?

Ich habe quasi ein Panel angelegt für meinen nodetypen in denen man diese JS-Übungen machen kann ablaufen. Das panel sieht man erst wenn man "node/%/evaluation" eingibt. Da habe ich dann einen benutzerdefinierten PHP Inhalt in der ich dieses $data = $_POST['data'}; schreiben würde. Ich dachte ich übergebe dann per jquery.post diese JS Variable an die url "evaluation". Würde das theoretisch so funktionieren?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ok, jetzt kenne ich nicht

Eingetragen von saila (59)
am 03.03.2009 - 13:48 Uhr

Ok, jetzt kenne ich nicht den direkten Aufbau deiner JS-Funktionen. Aber wenn du einen Post auslösen willst/kannst, kannst du entweder die Variable aus JS direkt in ein hidden oder input-tag setzen. Per Post kannst du dann prüfen ob das Feld hidden / oder input-tag:name entsprechend gefüllt oder vorhanden ist.

Das kannst du auch per Ajax laufen lassen. Wichtig ist eben das der zu übergende Wert irgendwo in einem input-type text(readonly) oder hidden von JS übergeben wird.

(Hoffe ich habe dich jetzt auch richtig verstanden) ;)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Na den direkten aufbau der

Eingetragen von CKIDOW (67)
am 03.03.2009 - 17:24 Uhr

Na den direkten aufbau der JS funktionen siehst Du in den html Datein die ich mit gepostet habe... die stecken da direkt drin

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn du auf prüfen klickst,

Eingetragen von saila (59)
am 03.03.2009 - 17:54 Uhr

Wenn du auf prüfen klickst, wird ja der %-Wert per JS ausgegeben. Du musst praktisch nur noch statt der %-Wert-Ausgabe in HTML dies ändern für form, damit du den Wert dann auch per POSt übermitteln kannst. Oder du setzt ein zusätzliches

<input type="hidden" name="ergebnis" id="ergebnis" value="" />

in den HTML-Quelltext.

Bei letzterer Variante musst du lediglich das Script anpassen, dass der %-Wert auch als Value für ergebnis gesetzt wird.

Wenn du einen form-tag um die %-Wert-Ausgabe setzt, kannst du dir einen Schritt sparen. Du gibst dem
<input type="text" id="ergebnis" name="ergebnis" value="" readonly="readonly" /> das readonly dazu. Somit kann darin keiner eine Veränderung vornehmen.

Egal wie - ist nun noch ein Subit-Button da, kannst du das Ergebnis auf der Folgeseite oder in einem Zwischenschritt verarbeiten.

Natürlich muss du die Zeile entsprechend erweitern, damit der input-tag (hidden oder text) korrekt angesprochen wird.

document.form.element["ergebnis"].value = hier_der_%-Wert;

  • Anmelden oder Registrieren um Kommentare zu schreiben

Also hier meine Lösung:

Eingetragen von CKIDOW (67)
am 04.03.2009 - 14:43 Uhr

Also hier meine Lösung:

a) Panel angelegt mit benutzerdefinierten php Inhalt und das ganze steckt in "/node/%/evaluation" ...

b) ich hab dann einen jQuery Ajax Post ausgelöst, der zu "evaluation" geschickt wird... dort im php inhalt wird per $_POST['usw'] das ganze an php übergeben der das weiter über die userpoints_api in die Datenbank schreibt.

c) Watchdog Einträge habe ich dann mit produziert zum nachvollziehen...

d) ich bin noch am basteln, aber ich will da irgendwie noch n feedback mit einbauen... das ganze geht dann mit diesem Callback denke ich...

Hab gestern bissel was gelernt und hoffe ich werd noch viel besser :D ...

Danke an dieser Stelle nochmal an Dich salla, an stBorchert und Phil_Ewert und alle Supporter im IRC!!!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 1 Woche 3 Tagen
  • Hey danke
    vor 1 Woche 4 Tagen
  • Update: jetzt gibt's ein
    vor 1 Woche 5 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 2 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 2 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 1 Stunde
  • In der entsprechenden View
    vor 3 Wochen 1 Stunde
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 1 Stunde
  • gelöst
    vor 5 Wochen 3 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 5 Wochen 4 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20450

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 22 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association