Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [CakePHP] Tree behavior i optgroup
kicaj
post 17.02.2009, 22:28:24
Post #1





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


Utworzylem cos takiego:
  1. <?php
  2. $categories = $this->Category->find('list', array(
  3.            'conditions' => array(
  4.                'Category.id <>' => 1),            
  5.            'fields' => array(
  6.                'Category.id',
  7.                'Category.name',
  8.                'Category.parent_id'),
  9.            'recursive' => 1));
  10.        $this->set('categories', $categories);
  11. ?>

Tworzy mi liste w stylu:
Kod
1 // parent_id=1
Cat1 // id=1
Cat2 // id=2
Cat3 // id=3
2 // parent_id=2
SubCat11 // id=4
SubCat12 // id=5
SubCat21 // id=6


A chcialbym uzyskac:
Kod
Cat1
SubCat11
SubCat12
Cat2
SubCat21
Cat3
...


Calosc umieszczona do $form->input() jako pole typu select, gdzie Cat1, Cat2, Cat3 to optgroup, a SubCat11, SubCat12, SubCat21 to option, czyli cos w rodzaju:
  1. <option>SubCat11</option>
  2. <option>SubCat12</option>
  3. <option>SubCat21</option>
  4. <!- ... -->


Mowa oczywiscie o CakePHP i Tree Behavior:)

Ktos wie?


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
woj_tas
post 18.02.2009, 08:16:37
Post #2





Grupa: Zarejestrowani
Postów: 230
Pomógł: 36
Dołączył: 31.03.2006
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $categories = $this->Category->find('list', array(
  3.           'conditions' => array(
  4.               'Category.id <>' => 1),            
  5.           'fields' => array(
  6.               'Category.id',
  7.               'Category.name',
  8.               'Category.parent_id'),
  9.           'recursive' => 1,
  10.           'order' => 'lft asc'
  11.      ));
  12. ?>

?


--------------------
Go to the top of the page
+Quote Post
jarrod
post 29.07.2009, 19:13:25
Post #3





Grupa: Zarejestrowani
Postów: 312
Pomógł: 9
Dołączył: 14.10.2006
Skąd: warszawa

Ostrzeżenie: (0%)
-----


Udało ci się to opanować?
Stoję dokładnie nad tym samym problemem.
Go to the top of the page
+Quote Post
kicaj
post 30.07.2009, 23:04:16
Post #4





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


Niestety, nie obsluguje tego, pytalem juz wszedzie:)


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
jarrod
post 1.08.2009, 19:31:43
Post #5





Grupa: Zarejestrowani
Postów: 312
Pomógł: 9
Dołączył: 14.10.2006
Skąd: warszawa

Ostrzeżenie: (0%)
-----


Załóżmy, że chcesz pobrać kategorie w kontrolerze people mając model Person i wyświetlić w liście (PortalCategory -> Tree).
Z pomocą przychodzi metoda bindModel

  1. <?php
  2. $this->Person->PortalCategory->bindModel(
  3.    array('belongsTo' => array(
  4.            'Parent' => array ('className' => 'PortalCategory','foreignKey' => 'parent_id','conditions' => '','fields' => '','order' => '')
  5.        ))
  6.    );
  7. ?>


następnie pobierasz dane:
  1. <?php
  2. $portalCategories = $this->Person->PortalCategory->find('list', array(
  3.    'fields' => array('PortalCategory.id','PortalCategory.name','Parent.name'),
  4.    'recursive' => 1,
  5.    'order' => 'PortalCategory.lft asc'  
  6.     ));
  7. ?>


w widoku:
  1. <?php
  2. echo $form->input('portal_category_id',array());
  3. ?>


i już :-)
ja chyba zapytałem wszędziej winksmiley.jpg

oczywiście możesz zamiast bindModel ustawić odpowiednią relację w modelu ale jeśli jest to używane w niewielu miejscach to lepiej to zrobić dynamicznie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:20