Empfehlungen: Erweiterte Suche

Passing data view > controller > view

Daten auslesen, verarbeiten und den Views übergeben

Passing data view > controller > view

Beitragvon havanna » So 12. Apr 2009, 10:16

Hallo zusammen,
auf deutsch könnte man den Betreff vielleicht als "Durchreichen $data vom view zum controller und zum view" bezeichnen...

Aber vielleicht denke ich auch verquer. Mein Problem: Ich habe ein Formular das im wesentlichen eine Tabelle umfasst. Weil es so viele Tabellenfelder sind und ich dem Anwender das Scrollen nicht zumuten möchte, möchte ich die Felder auf verschiedene Register verteilen.
Das sieht dann so aus:
Bild
Das ein- und ausblenden eines Blocks erreiche ich mit div style="display:none" bzw. inline.
Die einzelnen Register habe ich im Moment ganz normal mit meinen Controller verlinkt (get):
Code: Alles auswählen
<a id="" href="/admin/immobilien/edit/{25D8C677-CB1F-45E7-80C7-E087B3D1CD72}/cond" title="Objekt Konditionen">

Dadurch, dass ich im Controller nun den dritten Parameter abfrage, weiß ich welches das aktive Register ist. Also welcher Block eingeblendet und welcher ausgeblendet werden muss.

Wenn nun aber der Anwender z.B. im ersten Register Daten ändert und in das zweite Register wechselt, sind die eingegebenen Informationen logischerweise verloren - ist ja praktisch ein neuer Aufruf nur mit einem geänderten Parameter.

Hier setzt meine Frage an: Wie könnte ich die eingegebenen Daten "durchreichen" so dass sie wieder im View vorhanden sind ohne das ich zwischendurch sicher ( save($this->data) ).
Früher (vor 10 Jahren oder so) habe ich die Daten in einem Array gehalten und mit echo als value im Input Feld ausgegeben. Alle Felder hatte ich als Array zusammengefasst. Nur wenn der "Sichern" Button gedrückt wurde, wurde gesichert. Ansonsten habe ich das Array dem View wieder zur Verfügung gestellt.

Falls mein Ansatz falsch sein sollte, bitte korrigieren.

Ciao Thomas
Benutzeravatar
havanna
 
Beiträge: 191
Registriert: Mi 15. Okt 2008, 23:12
Wohnort: Bodman-Ludwigshafen
CakePHP-Version: 1.2.x
OS: WIN

Re: Passing data view > controller > view

Beitragvon euromark » So 12. Apr 2009, 13:24

vermutlich die differenz (geänderten felder) mittels ajax in die session zu speichern könnte funktionieren
oder ein POST bei klick auf einen der navi-links, der dann in die session speichert?
euromark
 
Beiträge: 617
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Passing data view > controller > view

Beitragvon havanna » So 12. Apr 2009, 15:55

Hallo Mark,
vielen Dank für die Antwort. In Richtung Ajax hatte ich auch schon gedacht - allerdings habe ich da noch gar keine Aktien.

- Post: Da müsste ich aus den Registern ein Input-type machen. Oder per javascript das Formular senden. Im Prinzip kann ich dann immer gleich speichern, wenn das Register gewechselt wird.

Falls noch jemand andere Ideen hat: nur her damit. Oder andere Frage - ich bin ja nicht der erste der das macht. Wie macht ihr das in euren Anwendungen?

Ciao Thomas
Benutzeravatar
havanna
 
Beiträge: 191
Registriert: Mi 15. Okt 2008, 23:12
Wohnort: Bodman-Ludwigshafen
CakePHP-Version: 1.2.x
OS: WIN

Re: Passing data view > controller > view

Beitragvon Mathias » So 12. Apr 2009, 19:05

Ich würde auch mit Ajax arbeiten. Das einzige Problem an der Sache ist, dass dazu JavaScript aktiviert sein muss. Ist es das nicht, wird auch nix gespeichert.
Die Input-Methode ist die sichere Variante.

Mir wurde mal beigebracht, dass die Anwendung erstmal ohne JavaScript laufen sollte, was heißen soll, dass du alle Funktionen deiner Anwendung auch so benutzen kannst. Wie gesagt, es kann sein, das JS deaktiviert wurde oder aber, dass jemand versucht mit dem mobilen Internet Explorer oder einer anderen Handy-Software auf deine Seite zuzugreifen.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Passing data view > controller > view

Beitragvon havanna » So 12. Apr 2009, 20:49

Hallo Mathias,
auch dir erst einmal vielen Dank für deine Antwort.
Das mit der Einschränkung stimmt schon. Allerdings handelt es sich hier um den Admin-Bereich. Und da kann ich es schon als Auflage definieren, dass JavaScript für eine korrekte Funktion aktiviert sein muss. Mobile Endgeräte kommen dafür auch eher nicht in Frage.

Zu Ajax: Wie gesagt, ich habe bis heute damit gar keine Aktien. Allerdings kann ich es auch nicht ewig vor mir her schieben, mich damit zu beschäftigen.
Wenn man hier Ajax verwenden würde, in welcher Form würdest du das empfehlen? So wie Mark meint, mit speichern der Inhalte? Wie würde man herausfinden, welche Felder geändert wurden? Geht das nur mit Vergleich oder gibt es da eine Funktion?

Ciao Thomas
Benutzeravatar
havanna
 
Beiträge: 191
Registriert: Mi 15. Okt 2008, 23:12
Wohnort: Bodman-Ludwigshafen
CakePHP-Version: 1.2.x
OS: WIN

Re: Passing data view > controller > view

Beitragvon euromark » Mo 13. Apr 2009, 12:06

ich würds an deiner stelle echt bleiben lassen an der stelle, wenn du noch gar kein ajax ausprobiert hast
und wenn - dann an anderer Stelle mit einfachem ajax anfangen (aktiv-toggling JA/NEIN) oder sowas

hier kannst du doch bestimt genausogut einfach verschiedene einzelne seiten machen - und jeweils direkt speichern
oder ist es notwendig dass sie gemeinsam gespeichert werden?
dann einfach eine große seite mit JS-Tabbing (wo wie die großen cms auch)

dabei wird die seite durch absenden dann komplett gespeichert (alle einzelnen Tabs)
dazu muss im controller dann für diese action die logik zusammengefasst werden

und später, wenn sie seite ma steht, kann man immernoch ajax nachrüsten
euromark
 
Beiträge: 617
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Passing data view > controller > view

Beitragvon havanna » Mo 13. Apr 2009, 22:05

Hallo Mark,
da hast du wahrscheinlich Recht. Ich habe es jetzt erst einmal so gelassen, dass der Anwender eben bei jedem Register speichern muss. Über redirect hat er ja gleich wieder den Datensatz geöffnet, den er eben bearbeitet hat.

Ciao Thomas
Benutzeravatar
havanna
 
Beiträge: 191
Registriert: Mi 15. Okt 2008, 23:12
Wohnort: Bodman-Ludwigshafen
CakePHP-Version: 1.2.x
OS: WIN

Re: Passing data view > controller > view

Beitragvon Mathias » Fr 17. Apr 2009, 12:23

Hi Thomas,

vielleicht hilft dir dieser Ansatz weiter: Du schreibst dein komplettes Formular ganz normal, so dass alles untereinander steht. Deine jeweiligen Bereiche wie Konditionen, Details etc. packst du in verschiedene Divs. über jQuery kannst du dann mit Tabs rumspielen.
http://jqueryfordesigners.com/jquery-tabs/
http://docs.jquery.com/UI/Tabs

Das Formular ist immer das gleiche. Beim Durchschalten durch die Tabs bleiben die Daten im Formular.
Den Speichern Knopf kannst du ja irgendwo hinpacken, so dass man speichern kann, egal in welchem Tab man sich befindet.

Sollte JavaScript ausgeschaltet sein, wird einfach das normale Formular (untereinander) dargestellt.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Passing data view > controller > view

Beitragvon havanna » Sa 18. Apr 2009, 07:42

Hallo Mathias,
das mit den divs hatte ich schon so gelöst. So kann ich einfach über CSS steuern, welcher Absatz gerade eingeblendet wird. Für den User sieht es so aus, als würde er durch Register wandern.
Den anderen Teil mit JavaScript schaue ich mir mal an. Vielen Dank für den Tipp.

Ciao Thomas
Benutzeravatar
havanna
 
Beiträge: 191
Registriert: Mi 15. Okt 2008, 23:12
Wohnort: Bodman-Ludwigshafen
CakePHP-Version: 1.2.x
OS: WIN


Zurück zu Controller

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron