Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [CakePHP] Zliczanie podkategorii
kicaj
post
Post #1





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


Category hasMany Products
Products belongsTo Category

Robie count($categories['Product']) zlicza mi ilosc produktow w danej kategorii...

Problem polega na tym ze jesli dana kategoria ma podkategorie wraz z produktami to chcialbym zliczyc zawsze ilosc produktow oraz "podproduktow", jak to wykonac?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
woj_tas
post
Post #2





Grupa: Zarejestrowani
Postów: 230
Pomógł: 36
Dołączył: 31.03.2006
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


Jeżeli do kategorii używasz behaviora Tree to zrób tak:
1. W kategoriach zapisuj ilość dodanych produktów (dodaj kolumnę do tabeli kategorie)
2. Zsumuj ilość produktów z tabeli kategorie (mając do dyspozycji kolumny lft oraz rght, jest to dość proste)

Cytat(kicaj @ 25.05.2009, 17:19:19 ) *
Robie count($categories['Product']) zlicza mi ilosc produktow w danej kategorii...


Ten sposób jest strasznie mało optymalny.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Nie znam Cake'a ale przedstaw sposob implementacji kategorii.
Moze trzeba zrobic to jednym wiekszym selectem, albo zmienic implementacje kategorii/drzewek.
Go to the top of the page
+Quote Post
kicaj
post
Post #4





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


Kod
Categor (5)
   Category (3)
      Category (2)
         Product
         Product
      Product
   Category (1)
      Product
   Product


Mniej wiecej to tak wyglada. W nawiasach podano liczbe produktow i podproduktow tajk jakbym chcial wyswietlac
Najwyzsza kategoria ma wszystkie produkty, czyli 5, itd.
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Ja robię to w ten sposób, że dopisuję produkty do całej ścieżki kategorii. Przykładowo mając drzewko:
Kod
Erotyka
-- Gadżety
---- Lale i inne

i dodając produkt do "Lale i inne" równocześnie dodaję go do "Gadżety" oraz "Erotyka". Co dzięki temu mam? Mogę bez problemu obliczać ilość produktów na dowolnym poziomie, a także wyświetlać produkty z dowolnego poziomu. Działa wyśmienicie (IMG:http://forum.php.pl/style_emoticons/default/guitar.gif)
Go to the top of the page
+Quote Post
Rafal Filipek
post
Post #6





Grupa: Zarejestrowani
Postów: 274
Pomógł: 54
Dołączył: 2.05.2006
Skąd: Nadarzyn

Ostrzeżenie: (0%)
-----


W momencie gdy masz nieokreśloną ilość kategorii jest to ciężkie do zrobienia. Można tutaj wykorzystać faktycznie TreeBehavior żeby kontrolować drzewo kategorii. Dodatkowo dzięki niemu masz możliwość łażenia sobie po tym drzewie więc ja bym chyba napisał dla modelu produktu w metodzie afterSave przejscie przez wszystkie jego kategorie i zaktualizowanie ilości produktów. To samo dla kasowania.
Go to the top of the page
+Quote Post
kicaj
post
Post #7





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


Nieciekawe.
Znalazlem rozwiazanie jak zliczac ilosc produktow w kategori i jej podaktegoriach, ale nie wiem jak to zastosowac do petli, poniezej podaje link:
http://mrphp.com.au/code/code-category/cak...haviour-cakephp (jesli dobrze pamietam ostatni tips)
Go to the top of the page
+Quote Post
woj_tas
post
Post #8





Grupa: Zarejestrowani
Postów: 230
Pomógł: 36
Dołączył: 31.03.2006
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


Cytat(kicaj @ 18.06.2009, 00:20:20 ) *
Nieciekawe.


Fajna argumentacja

Podam przykład dla postów i katalogów. W drzewie katalogów tworzysz kolumnę np.: "post_count"

Ilość postów w kategorii zliczasz po zapisie:

  1. <?php
  2. function afterSave() {
  3.        if (isset($this->data['Post']['adding'])) {
  4.        $data = $this->find();
  5.        $this->query('UPDATE catalogs SET post_count=post_count+1 WHERE lft <= '. $data['Catalog']['lft'] .' AND rght >= '.$data['Catalog']['rght']);
  6.        }
  7.    }
  8. ?>


Oraz przed usunięciem:
  1. <?php
  2. function beforeDelete() {
  3.        $data = $this->find();
  4.        $this->query('UPDATE catalogs SET post_count=post_count-1 WHERE lft <= '. $data['Catalog']['lft'] .' AND rght >= '.$data['Catalog']['rght']);
  5.    }
  6. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.09.2025 - 03:13