Empfehlungen: Erweiterte Suche

Frage zum Input Form Helper

Unterstützung der Daten-Formatierung in den Views (DRY)

Frage zum Input Form Helper

Beitragvon Luka » Fr 23. Jan 2009, 17:34

Hi,

ich bin immer noch mit meiner Rezeptseite beschaeftigt und stosse nun auf das naechste groessere Problem. Ich moechte gerne Checkboxen haben fuer mein Maincategories. Ich muss dafuer also aus der Datenbanktabelle maincategories die Namen und die ID als Value auslesen.

Dafuer verwende ich nun in meinem Controller Recipes:

Code: Alles auswählen
$this->set('options', $this->Maincategory->find('list',array('fields'=>array('ID','Maincategory'))));


In meinem View sollen nun die checkboxes ausgegeben werden, dafuer habe ich dieses zusammengebaut:

Code: Alles auswählen
 foreach($options as $option)
    {
        echo $form->input('Recipe.MaincategoryID', array('label'=>array('text'=>$option),'type' => 'checkbox'));
    }


Ich bekomme die Maincategories alle angezeigt mit richtigem Namen, das passt also schonmal, nur leider ist der value inkorrekt. Dort steht nur 0 oder 1. Ich brauche aber die ID der maincategory als value. Wo liegt in meinem Code der Fehler? Ich kann es einfach nicht erkennen. Hat jemand eine Idee?
Luka
 
Beiträge: 24
Registriert: Sa 2. Aug 2008, 13:56
CakePHP-Version: 1.2
OS: XP

Re: Frage zum Input Form Helper

Beitragvon Mathias » Sa 24. Jan 2009, 23:27

0 oder 1 sind nun mal nur die Werte, die du von einer Checkbox bekommst. Entweder Häckchen gesetzt oder nicht. 0 oder 1.

Was versuchst du denn zu realisieren? Willst du ein Rezept mehreren Kategorien zuordnen?
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: Frage zum Input Form Helper

Beitragvon Luka » So 25. Jan 2009, 12:26

Hi,

Ich brauche als Value die MaincategoryID, da ich dieses in die DB eintragen möchte. Es soll auch möglich sein mehrere Kategorien auszuwählen. Ein Value von 0 bzw 1 gibt mir ja nicht die ID der Kategorie. Irgendwie verstehe ich das nicht.

Gruss Luka
Luka
 
Beiträge: 24
Registriert: Sa 2. Aug 2008, 13:56
CakePHP-Version: 1.2
OS: XP

Re: Frage zum Input Form Helper

Beitragvon Mathias » So 25. Jan 2009, 15:47

Die checkbox könntest du zum Beispiel dafür verwenden, ob ein Rezept veröffentlicht werden soll oder nicht. Quasi als eine Eigenschaft eines Rezept. Somit würdest das Pärchen (Eigenschaft - 0 oder 1) haben.

Wenn du ein Rezept mehreren Kategorien zuordnen möchtest, bedeutet das gleichzeitig, dass eine Kategorie mehrere Rezepte haben kann.
Damit hast du eine m:n-Beziehung. Das wird auch HABTM genannt. Hier im Forum wurde das schon mal angeschnitten, aber auch das Internet bietet dir genug Ressourcen um dich da mal schlau zu lesen.

Grob umrissen heißt das, dass du 3 Tabellen brauchst. Eine Rezept-Tabelle, eine Kategorie-Tabelle und eine Tabelle, die die beiden ersten Tabellen miteinander verknüpft. In der dritten Tabellen stehen die jeweiligen Verbindungen, also die IDs der Rezepte und der Kategorien.
Rezept(1) ist in Kategorie(1) und Kategorie(3). Rezept(2) in Kategorie(1) und Kategorie(2).
In der Tabelle steht nun folgendes:
recipe_id | maincategory_id
1 | 1
1 | 3
2 | 1
2 | 2

Anhand dieser Tabelle findet cake automatisch die Verknüpfungen. Lässt du dir also Kategorie(1) ausgeben, wird über die Rekursion die Verbindungstabelle abgefragt, aus der hervor geht, dass Rezept(1) und Rezept(2) in dieser Kategorie sind.

Darstellen und bearbeiten lässt sich das mit einer multiple list in der view.

Solltest du die cake console verwenden, brauchst du einfach nur deine 3 Tabellen erstellen und cake die models, controllers und views baken lassen. Da hast du dann alles drin.
Aber Vorsicht: Bügelst du das über dein aktuelles Projekt, sind all deine alten Dateien überschrieben. Am besten die alten Dateien sichern oder ein neues Projekt anfangen. Du kannst ja dann immer noch alles nötige rüberkopieren.
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: Frage zum Input Form Helper

Beitragvon Luka » So 25. Jan 2009, 18:31

Hi,

natürlich hast Du Recht, wenn ich tatsächlich mehrere Kategorien erlaube, brauche ich eine weitere Tabelle. Muss ehrlich gestehen da jetzt nicht sofort dran gedacht zu haben, da mein ursprünglicher Plan nur 1 Kategorie pro Rezept war und ich einfach nur mit meinen Checkboxes hänge und nicht weiterkomme.

Ich hänge ja beim "Add" Formular fest. Es werden zwar alle Maincategories ausgelesen und angezeigt nur brauche ich als Value der Checkbox die MaincategoryID. Dort steht aber nur 0.
Wie bekomme ich es also hin, den value zu ändern? Nehmen wir jetzt einfach mal an es kann nur 1 Kategorie ausgewählt werden, weil die 2 Tabelle kann ich ja dann noch erstellen, sobald ich mal das erste Problem, Checkbox Value, gelöst habe.
Luka
 
Beiträge: 24
Registriert: Sa 2. Aug 2008, 13:56
CakePHP-Version: 1.2
OS: XP

Re: Frage zum Input Form Helper

Beitragvon Mathias » So 25. Jan 2009, 20:10

Wenn du das Rezept nur einer Kategorie zuordnen willst, dann realisiere das einfach über ein DropDown-Feld. So schlägt es auch cake nach dem baken.
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: Frage zum Input Form Helper

Beitragvon Luka » So 25. Jan 2009, 20:18

Hi,

Ok, wenn ich aber mehrere erlaube und es definitv mit der checkbox machen will, wie bekomme ich dann das value verändert?
Luka
 
Beiträge: 24
Registriert: Sa 2. Aug 2008, 13:56
CakePHP-Version: 1.2
OS: XP

Re: Frage zum Input Form Helper

Beitragvon Mathias » Do 29. Jan 2009, 17:33

Das value wird immer 0 oder 1 sein. Dafür sind doch checkboxen gemacht.
Du kannst natürlich versuchen, die abgesendeten Daten zu verarbeiten. Du könntest checken, ob zu maincategory_id eine 0 oder eine 1 übergeben und dann irgendwie über den Controller einen Eintrag in der Verbindungstabelle machen.
Ich finde es aber dennoch relativ sinnfrei. Was spricht denn gegen die Verwendung einer multiple choice list? Einfach alle Kategorien auswählen, in der das Rezept erscheinen soll. Cake übernimmt den Rest.
Das Auswählen funktioniert denn wie z.B. bei Windows: Strg-Taste + Klick auf die Kategorie. Du hast natürlich auch die Möglichkeit über JavaScript so genannte Selectable zu erstellen. Da genügt dann nur noch ein Klick auf das Element. Ein weiterer deselektiert es.
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


Zurück zu Helper

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron