Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CakePHP] Tree behavior i optgroup
Forum PHP.pl > Forum > PHP > Frameworki
kicaj
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?
woj_tas
  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. ?>

?
jarrod
Udało ci się to opanować?
Stoję dokładnie nad tym samym problemem.
kicaj
Niestety, nie obsluguje tego, pytalem juz wszedzie:)
jarrod
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.