Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Doctrine] Po aktualizacji do wer. 1.1.3 nie działa createRoot() itp.., Po prostu nie można nic zrobić przy pomocy Nested Set
Sajrox
post
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

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


Witam,

Czy ktoś także zauwazył problemy z Nested Set a mianowicie z funkcją  createRoot() itp ?

Po aktualizacji z wersji 1.1.2 do 1.1.3 są problemy z tą klasą. Kod który działał już nie działa.

  1.  
  2. $category = new Kategorie();
  3. $category->name = 'Root Category 1';
  4. $category->save();
  5.  
  6. $categoryTable = Doctrine::getTable('Kategorie');
  7.  
  8. $treeObject = $categoryTable->getTree();
  9. $treeObject->createRoot($category);
  10.  
  11.  





Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sajrox
post
Post #2





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

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


Ciekawe (IMG:style_emoticons/default/smile.gif) Co do wersji językowych to z tym nie miałem do czynienia jeszcze w Dictrine ale na pewno się z tym zapoznam.

Mam tylko pytanie co do Cachowania drzewa.

Kod który stosuję nie działa:
  1. $treeObject = Doctrine::getTable('Kategorie')
  2. ->useResultCache(true)
  3. ->getTree();



A co do komentowania to aż tak tragicznie ? (IMG:style_emoticons/default/winksmiley.jpg) Hehe.

Jeszcze gdyby to nie był problem to napisz proszę jak np. wyciagasz dzieci kategorii na levelu 1. Chciałbm pobrać tylko dzieci danej kategorii (root) o levelu np. 1
W dokumentacji jest tylko wyciąganie całego drzewa bez mozliwości pobrania kategorii na danym poziomie (IMG:style_emoticons/default/sad.gif)


Edit:
I jeszcze chciałbym zaproponować pewien sposób na sortowanie pozycji kategorii.

  1. public function move($idFor=0, $idTo=0)
  2. {
  3. $recordFor = Doctrine::getTable($this->tblKategorie)->find($idFor);
  4. $recordTo = Doctrine::getTable($this->tblKategorie)->find($idTo);
  5.  
  6. if ($recordFor['lft'] < $recordTo['lft'])
  7. $recordFor->getNode()->moveAsNextSiblingOf($recordTo);
  8. if ($recordFor['lft'] > $recordTo['lft'])
  9. $recordFor->getNode()->moveAsPrevSiblingOf($recordTo);
  10. }


metoda move() przesuwa nam kategorie na dowolne miejsce na liście. Możemy tutaj przesunąć kategorie z 2 na 20 miejsce na liście (IMG:style_emoticons/default/smile.gif)



Ten post edytował Sajrox 18.08.2009, 16:55:57
Go to the top of the page
+Quote Post
murwazy
post
Post #3





Grupa: Zarejestrowani
Postów: 53
Pomógł: 5
Dołączył: 13.04.2007
Skąd: Szczecin

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


Cytat(Sajrox @ 18.08.2009, 16:32:15 ) *
Mam tylko pytanie co do Cachowania drzewa.

Kod który stosuję nie działa:

sprawdz to
  1. $q = Doctrine_Query::create();
  2. ->select('c.name, p.name, m.name')
  3. ->from('Category c')
  4. ->leftJoin('c.HottestProduct p')
  5. ->leftJoin('p.Manufacturer m')
  6. ->setHydrationMode(Doctrine::HYDRATE_ARRAY);
  7. ->useResultCache(true);
  8.  
  9. $treeObject = Doctrine::getTable('Category')->getTree();
  10. $treeObject->setBaseQuery($q);
  11. $tree = $treeObject->fetchTree();
  12. $treeObject->resetBaseQuery();
mozesz rownie dobrze "opakowac" ten kawalek kodu w zend_cache - wtedy wywalasz ->useResultCache(true);

Cytat(Sajrox @ 18.08.2009, 16:32:15 ) *
A co do komentowania to aż tak tragicznie ? (IMG:style_emoticons/default/winksmiley.jpg) Hehe.

obawiam sie ze nie rozumiem:)

----- kurcze nie da sie opublikowac 2 postow po sobie? wystepuje jakis blad ale tresci nie ma...

Cytat(Sajrox @ 18.08.2009, 16:32:15 ) *
Jeszcze gdyby to nie był problem to napisz proszę jak np. wyciagasz dzieci kategorii na levelu 1. Chciałbm pobrać tylko dzieci danej kategorii (root) o levelu np. 1
W dokumentacji jest tylko wyciąganie całego drzewa bez mozliwości pobrania kategorii na danym poziomie (IMG:style_emoticons/default/sad.gif)
tak jak juz pisalem keszuje cale drzewo i ew w szablonie daje if ($level == 1) {}.
potestuj uzycie czegos takiego:
  1. $q = Doctrine_Query::create();
  2. ->select('c.name, p.name, m.name')
  3. ->from('Category c')
  4. ->where('c.level<?', 2)
  5. ->setHydrationMode(Doctrine::HYDRATE_ARRAY)
  6. ->useResultCache(true);
  7.  
  8. $treeObject = Doctrine::getTable('Category')->getTree();
  9. $treeObject->setBaseQuery($q);
  10. $tree = $treeObject->fetchTree();
  11. $treeObject->resetBaseQuery();
ale zauwazylem ze czasem wychodza cuda jak sie zamiesza z zapytaniem.
inna sprawa ze masz metody getAncestors(), getDescendants(), getChildren().

no i obok fetchTree() masz do dyspozycji fetchBranch() - nie ma jej w manualu - polecam zerkac do api
http://www.doctrine-project.org/Doctrine_Tree_NestedSet/1_1

Cytat(Sajrox @ 18.08.2009, 16:32:15 ) *
I jeszcze chciałbym zaproponować pewien sposób na sortowanie pozycji kategorii.

  1. public function move($idFor=0, $idTo=0)
  2. {
  3. $recordFor = Doctrine::getTable($this->tblKategorie)->find($idFor);
  4. $recordTo = Doctrine::getTable($this->tblKategorie)->find($idTo);
  5. if ($recordFor['lft'] < $recordTo['lft'])
  6. $recordFor->getNode()->moveAsNextSiblingOf($recordTo);
  7. if ($recordFor['lft'] > $recordTo['lft'])
  8. $recordFor->getNode()->moveAsPrevSiblingOf($recordTo);
  9. }


metoda move() przesuwa nam kategorie na dowolne miejsce na liście. Możemy tutaj przesunąć kategorie z 2 na 20 miejsce na liście (IMG:style_emoticons/default/smile.gif)

nie analizowalem tego algorytmu ale skoro mowisz ze dziala to pewnie dziala:)
uzywam wyzej/nizej/pierwszy/ostatni i dodatkowo mam przenoszenie lisci/galezi za pomoca ajaxa - drag&drop, nie mialem potrzeby takiego przesuniecia jak opisales.

pozdrawiam


Ten post edytował murwazy 18.08.2009, 20:34:13
Go to the top of the page
+Quote Post

Posty w temacie


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 Aktualny czas: 12.10.2025 - 12:43