Doctrine: behaviour NestedSet – jak to si─? je krok po kroku

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>

Dalsza lektura

Dodaj komentarz

Tw├│j adres e-mail nie zostanie opublikowany. Pola, kt├│rych wype┼énienie jest wymagane, s─ů oznaczone symbolem *

Mo┼╝esz u┼╝y─ç nast─Öpuj─ůcych tag├│w oraz atrybut├│w HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>