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

Form erstellt -> Daten sollten nun in Tabelle angezeigt werden

Eingetragen von SetaLoro (5)
am 14.07.2014 - 15:57 Uhr in
  • Modul-Entwicklung
  • Drupal 7.x

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

‹ AJAX-Frage vom Anfänger Form erstellt -> Daten sollten nun in Tabelle angezeigt werden ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Die eingegeben Daten müssen

Eingetragen von montviso (2189)
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.)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich würde ein inhaltstyp

Eingetragen von th3o2211 (87)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nun, es werden Daten

Eingetragen von SetaLoro (5)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Gut dann mach wie du schon

Eingetragen von th3o2211 (87)
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!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe mal mit Hilfe von

Eingetragen von SetaLoro (5)
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);
?>
geht etwas schief bzw. es werden keine Informationen an
<?php
function VALID_form($form, &$form_state)
?>
zurück geliefert. Komischerweise ist das bei
<?php

  $form
['value_table'] = array(
  );
?>
der Fall, da er die Werte bekommt und somit die Tabelle erzeugt mit den aktuellen Daten

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"

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe nur kurz Zeit.Mir

Eingetragen von montviso (2189)
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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe es eigentlich soweit

Eingetragen von SetaLoro (5)
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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Was soll den der Button

Eingetragen von th3o2211 (87)
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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich wüßte keinen anderen

Eingetragen von sabahat (1)
am 10.11.2014 - 11:23 Uhr

Ich wüßte keinen anderen Ansatz, außer du willst ein eigenes Modul schreiben.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • lstin tombent homophonic wikke
  • Rolle erstellen nicht zu finden
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • 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
Weiter

Neue Kommentare

  • Rollen
    vor 1 Tag 23 Stunden
  • Inzwischen sind wir bei
    vor 1 Woche 5 Tagen
  • Migrieren von D7 auf D8/ D10/ D11
    vor 1 Woche 6 Tagen
  • melde mich mal wieder, da ich
    vor 9 Wochen 3 Tagen
  • Hey danke
    vor 9 Wochen 4 Tagen
  • Update: jetzt gibt's ein
    vor 9 Wochen 5 Tagen
  • Hallo, im Prinzip habe ich
    vor 10 Wochen 2 Tagen
  • Da scheint die Terminologie
    vor 10 Wochen 2 Tagen
  • Kannst doch auch alles direkt
    vor 10 Wochen 6 Tagen
  • In der entsprechenden View
    vor 10 Wochen 6 Tagen

Statistik

Beiträge im Forum: 250238
Registrierte User: 20465

Neue User:

  • FoxPiola
  • ocvk2810
  • marouane.blel

» 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 21 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