Empfehlungen: Erweiterte Suche

Probleme mit verschachtelten Kategorien

Fragen und Diskussionen zur Installation und Konfiguration von Cake.

Probleme mit verschachtelten Kategorien

Beitragvon enigmartin » Do 25. Aug 2011, 04:38

Hallo Leute,

ich versuche seit einer Weile eine saubere Lösung zu finden um Kategorien verschachtelt abzuspeichern. Ich habe in meiner Datebank Tabelle "parent_id", "lft" und "rght" hinzugefügt. Das ganze habe ich dann per Cake Bake Konsole gebacken.

Leider funktioniert das ganze nun aber nicht. Kann es sein das CakePHP das ganze nicht per Konsole backen kann oder kann es sein das dies einfach noch nicht perfekt funktioniert? Aufjedenfall wird in den Views bei "parent_id" nicht die Liste der schon vorhandenen Kategorien angezeigt. Ich benenne also den Eintrag "parent_id" in den Views in "parentCategory" um und es wird angezeigt, nur wird es dann immernoch nicht dementsprechend gespeichert. Als parent_id sollte dann ja logischerweise die id gespeichert werden die ich in der ParentCategory-Liste ausgewählt habe.

Füge ich die entsprechende parent_id per Hand in die Datenbank ein, so wird im edit-View auch nicht die enstprechende Kategorie vorselektiert (selected="selected").

Ich kann im Netz und auch hier im Forum dazu leider keine Hilfe finden. Wäre echt toll wenn mir da jemand auf die Sprünge helfen könnte.

Danke
Benutzeravatar
enigmartin
 
Beiträge: 40
Registriert: So 27. Mär 2011, 10:42
CakePHP-Version: 1.3.8
OS: Windows 7

Re: Probleme mit verschachtelten Kategorien

Beitragvon mbrod » Do 25. Aug 2011, 07:07

Als ich begann mich mit CakePHP zu beschäftigen, habe ich mich mal ganz kurz mit diesem Problem auseinander gesetzt. Ich meine mich zu erinnern, dass das Tree Behavior gut funktioniert hat.
mbrod
 
Beiträge: 199
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: Probleme mit verschachtelten Kategorien

Beitragvon euromark » Do 25. Aug 2011, 11:00

wenn du meine bzw eigene angepasste backscripte verwendest, gehts. ansonsten musst du hinterher manuell das tree behavior attachen

http://cakephp.lighthouseapp.com/projects/42648/tickets/1781-plugin-information-gets-lost-during-baking#ticket-1781-2
sowie
http://cakephp.lighthouseapp.com/projects/42648-cakephp/tickets/1781-plugin-information-gets-lost-during-baking#ticket-1781-13
zeigt den code, den man verwenden kann, um automatisch das tree behavior zu attachen beim backen sowie die richtige dropdownbox für parent_id zu generieren.

leider ist das ticket noch nicht umgesetzt in cake - wenn dann wohl eh erst in 2.0

bis dahin muss man sich die scripte hacken, damit es out of the box funktioniert.


PS: und mit http://cakephp.lighthouseapp.com/projects/42648/tickets/1920-enhancements-for-bake-templates (skipFields patch) solltest du in der lage sein, dinge wie lft und rght aus den gebackenen views zu schmeißen (wird ja außerhalb vom behavior nicht gebraucht.
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: Probleme mit verschachtelten Kategorien

Beitragvon enigmartin » Do 25. Aug 2011, 19:09

mbrod hat geschrieben:Als ich begann mich mit CakePHP zu beschäftigen, habe ich mich mal ganz kurz mit diesem Problem auseinander gesetzt. Ich meine mich zu erinnern, dass das Tree Behavior gut funktioniert hat.

Da geht es um die strukturelle Darstellung von Verschachtelungen aber irgendwie nicht um die einfache Speicherung. In der Bakery ist scheinbar keine richtige Dokumentation was die Verschachtelung angeht.

Um den Tree Behavior nutzen zu können müssten meine Daten aber erstmal dementsprechend sauber unterkategoriesiert gespeichert werden. Dies ist durch das Backen via Konsole aber nicht gegeben. Ein Ansatz ist zu erkennen, so würde es mir fürs erste auch ausreichen, aber dazu müsste das von CakePHP Core erstmal funktionieren.

euromark hat geschrieben:wenn du meine bzw eigene angepasste backscripte verwendest, gehts. ansonsten musst du hinterher manuell das tree behavior attachen

http://cakephp.lighthouseapp.com/projects/42648/tickets/1781-plugin-information-gets-lost-during-baking#ticket-1781-2
sowie
http://cakephp.lighthouseapp.com/projects/42648-cakephp/tickets/1781-plugin-information-gets-lost-during-baking#ticket-1781-13
zeigt den code, den man verwenden kann, um automatisch das tree behavior zu attachen beim backen sowie die richtige dropdownbox für parent_id zu generieren.

leider ist das ticket noch nicht umgesetzt in cake - wenn dann wohl eh erst in 2.0

bis dahin muss man sich die scripte hacken, damit es out of the box funktioniert.


PS: und mit http://cakephp.lighthouseapp.com/projects/42648/tickets/1920-enhancements-for-bake-templates (skipFields patch) solltest du in der lage sein, dinge wie lft und rght aus den gebackenen views zu schmeißen (wird ja außerhalb vom behavior nicht gebraucht.


Das verwirrt mich jetzt gänzlich. Damit kann ich, ehrlich gesagt, nichts anfangen bzw. werd ich da nicht schlau draus. Es muss ja irgendwie gehen das ich das ganze von CakePHP Core her zum laufen bekomme. Die Option ist ja da, aber sie funktioniert so nicht wie sie via Konsole gebacken wird.

Zu Veranschaulichung hier mal meine categories-Tabelle:
Code: Alles auswählen
CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `slug` varchar(255) DEFAULT NULL,
  `desc` text,
  `status` int(1) DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  `parent_id` int(11) DEFAULT NULL,
  `lft` int(11) DEFAULT NULL,
  `rght` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;
 


Ich kann dazu komischerweise nichts finden. Es laufen so viele Seiten mit Unterkategorien aber nirgends was zu finden um das auch zum Laufen zu bekommen. Eigenartig. Auf das Problem muss doch schonmal jemand gestoßen sein. Oder bin ich einfach zu blöd dafür?
Benutzeravatar
enigmartin
 
Beiträge: 40
Registriert: So 27. Mär 2011, 10:42
CakePHP-Version: 1.3.8
OS: Windows 7

Re: Probleme mit verschachtelten Kategorien

Beitragvon enigmartin » Do 25. Aug 2011, 19:54

Ich hab jetzt mal das ganze nur mit Scaffolding gebacken/generiert, also mit der Konsole. Das funktioniert einwandfrei. Jetzt muss ich nur noch rausfinden wie das beim Scaffolding funktioniert.

EDIT: Problem vorerst gelöst.

Problem: im View steht
Code: Alles auswählen
$this->Form->input('parent_id');

Soweit eigentlich richtig. Nur werden darüber nicht die Kategorien ausgelesen, da sie unter dieser Variable nicht vorhanden sind.

1. Lösung:

Im View habe ich lediglich
Code: Alles auswählen
$this->Form->input('parent_id');
in
Code: Alles auswählen
$this->Form->input('parent_id', array('options' => $parentCategories));
geändert. Da die Liste der Kategorien in dieser Variable auch gespeichert ist.

2. Lösung:

Es gibt noch eine andere Lösung, nämich im Controller aus parentCategories => parent_id machen:
Code: Alles auswählen
$this->data['Category']['parent_id'] = $this->data['Category']['parentCategories']
und im View einfach aus
Code: Alles auswählen
$this->Form->input('parent_id');
folgendes
Code: Alles auswählen
$this->Form->input('parentCategories');
machen.


Ersteres finde ich sauberer. Eigentlich recht simpel zu lösen, bin nur einfach nicht drauf gekommen.

Bis auf weitere Probleme.

Danke trotzdem für eure Hilfeversuche. ;)
Benutzeravatar
enigmartin
 
Beiträge: 40
Registriert: So 27. Mär 2011, 10:42
CakePHP-Version: 1.3.8
OS: Windows 7


Zurück zu Installation und Konfiguration

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron