Cytat(Sajrox @ 18.08.2009, 16:32:15 )

Mam tylko pytanie co do Cachowania drzewa.
Kod który stosuję nie działa:
sprawdz to
$q = Doctrine_Query::create();
->select('c.name, p.name, m.name')
->from('Category c')
->leftJoin('c.HottestProduct p')
->leftJoin('p.Manufacturer m')
->setHydrationMode(Doctrine::HYDRATE_ARRAY);
->useResultCache(true);
$treeObject = Doctrine::getTable('Category')->getTree();
$treeObject->setBaseQuery($q);
$tree = $treeObject->fetchTree();
$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 ?

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

tak jak juz pisalem keszuje cale drzewo i ew w szablonie daje if ($level == 1) {}.
potestuj uzycie czegos takiego:
$q = Doctrine_Query::create();
->select('c.name, p.name, m.name')
->from('Category c')
->where('c.level<?', 2)
->setHydrationMode(Doctrine::HYDRATE_ARRAY)
->useResultCache(true);
$treeObject = Doctrine::getTable('Category')->getTree();
$treeObject->setBaseQuery($q);
$tree = $treeObject->fetchTree();
$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_1Cytat(Sajrox @ 18.08.2009, 16:32:15 )

I jeszcze chciałbym zaproponować pewien sposób na sortowanie pozycji kategorii.
public function move($idFor=0, $idTo=0)
{
$recordFor = Doctrine::getTable($this->tblKategorie)->find($idFor);
$recordTo = Doctrine::getTable($this->tblKategorie)->find($idTo);
if ($recordFor['lft'] < $recordTo['lft'])
$recordFor->getNode()->moveAsNextSiblingOf($recordTo);
if ($recordFor['lft'] > $recordTo['lft'])
$recordFor->getNode()->moveAsPrevSiblingOf($recordTo);
}
metoda move() przesuwa nam kategorie na dowolne miejsce na liście. Możemy tutaj przesunąć kategorie z 2 na 20 miejsce na liście

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