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();
}
/**
* 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
)
);
}
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>
<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.
![](http://i.stack.imgur.com/KUcrb.png)
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.
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.