Przy zarzÄ?dzaniu listÄ? kategori lub stron/podstron przydaje siÄ? bardzo relacja zagnie??d??ona. Doctrine 1.2 pozwala na wykorzystanie zagnie??d??onego zbioru(NestedSet), dostÄ?pnego jako behaviour.
Umo??liwia nam wybranie dowolnego drzewa (wielo bÄ?d?? jedno korzeniowego), bÄ?d?? jego poddrzewa od konkretnego wierzcho??a.
Krok #1: Schemat Danych
schema.yml
Categories: actAs: NestedSet: hasManyRoots: true rootColumnName: root_id columns: cat_name: type: string(255) |
Krok #2:Pobieranie danych drzewa w komponencie:
components.class.php
$this->categories = Doctrine::getTable('Categories')->getTree(); $q = Doctrine_core::getTable('Categories')->createQuery('q'); $q->leftJoin('q.Translation qt')->addOrderBy('sort ASC')->addOrderBy('qt.cat_name ASC'); $this->categories->setBaseQuery($q); |
Krok #3: Wy??wietlanie Struktury drzewa:
<div>
<h3>Kategorie:</h3>
<ul>
<?php foreach ($categories->fetchRoots() as $root): ?>
<li>
<?php $options = array(
'root_id' => $root->getCategoryId()
); ?>
<?php echo link_to($root->getCatName(), '@category?slug='.$root->getSlug()) ?>
<?php if($categories->fetchTree($options)): ?>
<ul>
<?php foreach($categories->fetchTree($options) as $node): ?>
<li><?php echo link_to($node->getCatName(), '@category?slug='.$node->getSlug()) ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
</div>