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 (2188)
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 (2188)
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

  • 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 2 Wochen 3 Stunden
  • Hey danke
    vor 2 Wochen 22 Stunden
  • Update: jetzt gibt's ein
    vor 2 Wochen 1 Tag
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 6 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 6 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 3 Tagen
  • In der entsprechenden View
    vor 3 Wochen 3 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 3 Tagen
  • gelöst
    vor 6 Wochen 45 Minuten
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 22 Stunden

Statistik

Beiträge im Forum: 250233
Registrierte User: 20453

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

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