Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CakePHP] Zliczanie podkategorii
Forum PHP.pl > Forum > PHP > Frameworki
kicaj
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?
woj_tas
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.
dr_bonzo
Nie znam Cake'a ale przedstaw sposob implementacji kategorii.
Moze trzeba zrobic to jednym wiekszym selectem, albo zmienic implementacje kategorii/drzewek.
kicaj
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.
phpion
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 guitar.gif
Rafal Filipek
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.
kicaj
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)
woj_tas
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. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.