Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Symfony2-D2 Deep Category Listing

[es] :: PHP :: Symfony2-D2 Deep Category Listing

[ Pregleda: 1830 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

alfa-pro
Pancevo

Član broj: 241818
Poruke: 476
*.dynamic.sbb.rs.



+7 Profil

icon Symfony2-D2 Deep Category Listing05.04.2014. u 11:47 - pre 122 meseci
Drustvo, trenutno sam se nasao u corsokaku, nemogu napred mogu samo nazad :/

U pitanju je E-Commerce projekat, prikocilo je kod izlistavanja kategorija. Da pojasnim to malo bolje, prvo da vidite strukturu tabele pa ce vam biti jasnije

tbl_ecommerce_categories

+----+----------+------------------+--------+
| ID | Parent | Name | Status |
+----+----- ----+------------------+--------+
| 1 | | Clothing | 1 |
| 2 | 1 | Women | 1 |
| 3 | 1 | Man | 1 |
| 4 | 1 | Boys | 1 |
| 5 | 1 | Girls | 1 |
| 6 | 2 | Sub of Women | 1 |
| 7 | 2 | Wub of Women | 1 |
+----+----------+------------------+--------+


Kao sto vidite u tabeli glavna root kategorija je Clothing i sadrzi parent vrednost NULL.
Sve ostale podkategorije imaju Parent vrednost neke root kategorije u ovom slucaju:
Women, Man, Boys, Girls pripadaju kategoriji Clothing.

E sada moja zamisao da preskocim self join i da to izlistam u svojoj navigaciji jeste bila da prvo preuzmem sve root kategorije i pomocu Doctrine Array Colection preuzmem pod kategorije.

Evo Entity klase: http://ideone.com/EwOT4P
Evo repository metode:

Code:

    /**
     * Get all root categories
     *
     *
     */
    public function getAllRootCategories()
    {
        return $this->getEntityManager()
            ->createQuery(
                'SELECT c FROM ISLabECommerceBundle:Category c WHERE c.parent IS NULL ORDER BY c.name ASC'
            )
            ->getResult();
    }


Controller metoda:

Code:
   public function categoryListAction()
    {
        $em = $this->container->get('doctrine');
        $categories = $em->getRepository('ISLabECommerceBundle:Category')->getAllRootCategories();

        return $this->container->get('templating')->renderResponse(
          'ISLabECommerceBundle:Category:list.html.twig', array(
                'categories' => $categories
            )
        );
    }


I naravno view twig:

Code:

<ul id="cat_accordion">
     {% for category in categories %}
             <li> <a href="">{{ category.name }}</a>
                      <ul style="display: none;">
                            {% for sub_category in category.children %}
                                <li><a href="">{{ sub_category.name }}</a> </li>
                            {% endfor %}
                        </ul>
             </li>
      {% endfor %}
</ul>


Sa svim ovim ja sam postigao da izlistam sve glavne kategorije koje imaju vrednost NULL i sve kategorije koje njoj pripadaju.



Problem nastaje sta ako ocu da podkategorija Women ima svoje pod kategorije? Ona nema parent vrendost NULL vec id od njene glavne kategorije.
Moram nesto povodom toga uraditi u repository metodi, problem je sto sam ja zadao da on izlistava glavne sa NULL vrednost.

Realno gledano ja sa ovim mogu uzeti dva levela da preuzmem kategorije.

Clothing -- lvl 1
---- Women -- lvl 2
---- Man -- lvl 2
-------- test -- lvl 3
------------- sub test lvl 4


Iskreno nista mi nepada na pamet kako da odradim ovo a da mi izlistava sve glavne i pod kategorije i da te podkategorije imaju svoje pod kategorije.

Ima neko neki predlog?

NOTE: samo molim vas da mi nenudite nested data set (lft, rgt) itd...
Kada vidjamo uvek ista lica, na kraju ona postaju deo našeg života. A kada postanu
deo našeg života,
onda žele i da nam ga izmene. I ako ne bude po njihovom, nije im pravo. Jer, svaki
čovek ima tačnu predstavu kako bi trebalo da živimo svoj život. A nikad nemaju pojma
kako treba da prožive sopstveni život.
 
Odgovor na temu

alfa-pro
Pancevo

Član broj: 241818
Poruke: 476
*.dynamic.sbb.rs.



+7 Profil

icon Re: Symfony2-D2 Deep Category Listing06.04.2014. u 00:06 - pre 122 meseci
Nasao sam resenje:

https://gist.github.com/tentacode/3892186
Kada vidjamo uvek ista lica, na kraju ona postaju deo našeg života. A kada postanu
deo našeg života,
onda žele i da nam ga izmene. I ako ne bude po njihovom, nije im pravo. Jer, svaki
čovek ima tačnu predstavu kako bi trebalo da živimo svoj život. A nikad nemaju pojma
kako treba da prožive sopstveni život.
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-1.sezampro.rs.



+33 Profil

icon Re: Symfony2-D2 Deep Category Listing06.04.2014. u 10:17 - pre 122 meseci
Ja bih samo dam komentar za tu tvoju napomenu iz prvog post-a u vezi NestedSet modela. Postoji jako dobra Doctrine 2 ekstenzija za te svrhe: https://github.com/Atlantic18/...nsions/blob/master/doc/tree.md. Takođe, pored te, taj isti DoctrineExtensions projekat nudi i mnoge druge korisne ekstenzije: https://github.com/Atlantic18/DoctrineExtensions.
 
Odgovor na temu

alfa-pro
Pancevo

Član broj: 241818
Poruke: 476
*.dynamic.sbb.rs.



+7 Profil

icon Re: Symfony2-D2 Deep Category Listing08.04.2014. u 13:45 - pre 122 meseci
Da znam to sam koristio pre jedno par meseci, malo je komplikovanije jer moras da instaliras doctrine extension + stfo budnle .... Dok D1 je imao svoj nested set. Mislim da mi ovo brze i jednostavnije bez dodatnih extenzija.
Ok je mada ja sam se odlucio za sonata admin bundle! Prakticnije
Kada vidjamo uvek ista lica, na kraju ona postaju deo našeg života. A kada postanu
deo našeg života,
onda žele i da nam ga izmene. I ako ne bude po njihovom, nije im pravo. Jer, svaki
čovek ima tačnu predstavu kako bi trebalo da živimo svoj život. A nikad nemaju pojma
kako treba da prožive sopstveni život.
 
Odgovor na temu

[es] :: PHP :: Symfony2-D2 Deep Category Listing

[ Pregleda: 1830 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.