Form erstellt -> Daten sollten nun in Tabelle angezeigt werden
am 14.07.2014 - 15:57 Uhr in
Guten Tag zusammen
Ich habe eine Form-API die 2-3 Textfield und 2 DatePickers beinhalten.
Nachdem ein Zeitraum eingetragen wird, klickt man auf speichern und oben sollte eine Liste erscheinen mit den eingegeben Daten
Die Form-API sollte immer noch sichtbar sein um einen anderen Zeitraum einzugeben.
Vom Prinzip ähnlich wie eine Zeiterfassung. Man gibt die Zeit ein, klickt auf "Hinzufügen" und man kann eine weitere Zeiterfassung erstellen.
Die eingegeben Daten müssen eigentlich nicht gespeichert werden.
Die Frage:
Wie soll ich das bewerkstelligen? Die Erklärung zu table_theme() ist für mich ein wenig unverständlich. Ich hapere eher daran das ich nicht weiss wie ich die Tabelle "ausprogrammieren" soll
Oder wäre es sinnvoller mittels .js die Tabelle zu erzeugen?
mit freundlichen Grüssen
- Anmelden oder Registrieren um Kommentare zu schreiben
Die eingegeben Daten müssen
am 14.07.2014 - 17:14 Uhr
Die eingegeben Daten müssen eigentlich nicht gespeichert werden.
Das ist vermutlich die erste Frage, die sich stellt.
Was soll genau mit den Daten passieren?
Wie lange müssen sie verfügbar sein?
Wenn die Daten nicht gespeichert werden sollen, dann könnte man das in der Tat mit jQuery / JS On-The-Fly bewerkstelligen.
Allerdings sind ja dann alle Daten weg, sobald der User die Seite verläßt.
Gibt es einen bestimmten Grund, warum die FORM-API verwendest - außer z.B. für Speicherung in einem Node?
(Was natürlich auch durch Hinzufügen eines Inhalts eines entsprechenden Inhaltstyps ginge, der die nötigen Felder mit Date-Picker hat.)
LG Regina Oswald
-------------------------
Montviso - Internetdienstleistungen
http://www.montviso.de
Ich würde ein inhaltstyp
am 14.07.2014 - 17:53 Uhr
Ich würde ein inhaltstyp erstellen mit 2 date field. Dort kann man Start und Enddatum angeben. Dann erstelle ich eine Page die auf node/%/edit lauscht dort kann ich dann das Formular zusammenstellen. Dann baue ich eine view die die Zeiträume in einer Tabelle aus Feldern ausgibt. Diese werden als Block nur bei Inhalten vom Typ deines Inhalttypes angezeigt. Und fertig. Da muss nix programmiert werden
Nun, es werden Daten
am 14.07.2014 - 18:46 Uhr
Nun, es werden Daten gespeichert die noch die Resttage anzeigen soll.
Das wird für Seitenbesucher sein die sich nicht registrieren. Das beim Refresh der Seite die Daten futsch sind, ist nicht tragisch.
Danke für die Antwort
Gut dann mach wie du schon
am 14.07.2014 - 19:40 Uhr
Gut dann mach wie du schon gesagt hast eine Form und manipulieren diese mit jQuery! Bau ne normale html Tabelle! Der Rest css!
Ich habe mal mit Hilfe von
am 17.07.2014 - 20:53 Uhr
Habe mal was gepostet. Irgendwie ist es mir suspekt wie es weiter geht. Allgemein
<?php
function VALID_menu() {
$items['valid/valider'] = array(
'type' => MENU_CALLBACK,
'access arguments' => array('access content'),
'page callback' => 'drupal_get_form',
'page arguments' => array('VALID_form'),
);
function VALID_form($form, &$form_state) {
$form = array();
$form['value_table'] = array(
);
$form['dauer'] = array(
'#type' => 'textfield',
'#size' => 5,
'#title' => t('Dauer'),
);
//Beginn
$format = 'd-m-y';
$form['begin'] = array(
'#type' => 'date_select',
'#title' => t('Beginn'),
'#date_year_range' => '-20:+20',
'#date_format' => $format,
);
//Ende
$form['end'] = array(
'#type' => 'date_select',
'#title' => t('Ende'),
'#date_year_range' => '-20:+20',
'#date_format' => $format,
);
$form['saved'] = array(
'#value' => !empty($form_state['values']['saved_values']) ? $form_state['values']['saved_values'] : 'ddd',
'#type' => 'hidden',
);
$form['speichern'] = array(
'#value' => 'Speichern',
'#type' => 'submit',
'#name' => 'speichern',
'#ajax' => array(
'callback' => 'VAL_form_submit_add',
'wrapper' => 'bildungsrechner-form',
'method' => 'replace',
'effect' => 'fade',
),
);
function VALID_form_submit_add(&$form, &$form_state) {
// values remains in fields
$form_state['rebuild'] = TRUE;
// Check from input name the value
// if pressed
if (isset($form_state['values']['speichern'])) {
// Save value to hidden field
$saved_values = array();
if (!empty($form_state['values']["saved"])) {
$saved_values = unserialize($form_state['values']["saved"]);
}
$saved_values[] = array(
'dauer' => $form_state['values']['dauer'],
'start' => $form_state['values']['begin'],
'end' => $form_state['values']['end'],
);
$form_state['values']["saved"] = serialize($saved);
// TODO: Render Ta
// TODO: Loop over the value array
$rows = $saved;
$form['value_table'] = array(
//'#markup' => theme('table', $header, $rows),
'#markup' => theme('table', array(
'header' => $header,
'rows' => $rows,
)),
);
dpm($form_state);
return $form;
}
}
?>
Nach dem Submit wird ein AJAX-Callback aufgerufen. Der soll am Ende im schon vorhandenen
<?php
$form['saved'] = array(
'#value' => !empty($form_state['values']['saved_values']) ? $form_state['values']['saved_values'] : 'ddd',
'#type' => 'hidden',
);
?>
die Daten speichern.
1. Nach dem Callback sind die Daten nicht vorhanden. D.h. irgendwo beim zuweisen von
<?php
$form_state['values']["saved"] = serialize($saved);
?>
<?php
function VALID_form($form, &$form_state)
?>
<?php
$form['value_table'] = array(
);
?>
2. Mir ist gerade suspekt wie die Daten nach erneutem "hinzufügen" nicht die alten überschreibt. Wenn ich 5x auf "hinzufügen" klicke, dann habe ich ja schlussendlich ja nur die Werte vom letzten "hinzufügen"
Ich habe nur kurz Zeit.Mir
am 18.07.2014 - 06:12 Uhr
Ich habe nur kurz Zeit.
Mir fällt aber auf, daß bei der Funktion unten keine Rückgabe erfolgt:
<?php
return
$form;
?>
Zu Deinem Punkt 2: Eigentlich darf das Formular gar nicht abgeschickt werden, sondern oben muß eine leere Tabelle stehen (oder DIV-Container).
Und beim "Absenden" des Formulars werden oben die Daten mit jQuery eingetragen bzw. angehängt.
Wenn es mit PHP und echtem Absenden gehen soll, müßtest Du die Daten für obige Tabelle in einer Session zwischenspeichern und bei jedem HInzufügen die Session ergänzen, damit eben nicht nur die letzten Werte gezeigt werden.
LG Regina Oswald
-------------------------
Montviso - Internetdienstleistungen
http://www.montviso.de
Ich habe es eigentlich soweit
am 22.07.2014 - 14:15 Uhr
Ich habe es eigentlich soweit geschafft. Ich hatte ein durcheinander mit Submit Callbacks und AJAX Callbacks.
Jetzt habe ich eine anderes Problem. :D
Ich füge bei jedem Row ein Button ein mit: "drupal_render[$form['mein_button']"
Wenn ich auf den Button klicke, ladet es mir die komplette Seite neu und es ist alles verloren.
Nach 4h verzweiflung habe ich gelesen dass "drupal_render()" AJAX-Callback nicht mit nimmt.
Hat jemand eine Idee wie man "drupal_render()" umgehen kann.
Was soll den der Button
am 22.07.2014 - 14:42 Uhr
Was soll den der Button machen?
Ja klar der Button schick immer das Komplette formular ab. type=submit und type=button sind was die Funktionalität angeht gleich! Jedoch kannst du das submit event per javascript abbrechen.
Dazu kannste dir das mal anschauen:
Drupal behaviors
Oder du schreibst wieder ein ajax callback.
Ich wüßte keinen anderen
am 10.11.2014 - 11:23 Uhr
Ich wüßte keinen anderen Ansatz, außer du willst ein eigenes Modul schreiben.
sabahat