ďťż
Podstrony
|
telcocafeStosuję strukturę kategorii nested sets. Przykładowe drzewo:Programy Freeware Pirackie Polskie Zagraniczne Shareware Filmy Akcji Historyczne Struktura tabeli cats w bazie danych: ID | name | parent_id | type | left | right Przy wyświetlaniu wszystkich kategorii wszystko jest dobrze. Kod: http://pastebin.com/d1cb5723 Gdy trzeba ukryć niektóre kategorie, cała struktura chwieje się - piekło. Przykłady w praktyce:
llUżytkownik ma uprawnienia tylko do wybranych kategoriil Zastanawiam się, czy nie przejść np. na materialized path lub inny schemat, bo chyba więcej problemów być nie może. W nested sets zmiana położenia kategorii w drzewie wiąże się ze skomplikowanymi zapytaniami lub przebudową całego drzewa (na szczęście ten problem już rozwiązałem). To chcesz coś zmieniać, czy nie? ;) Bo struktury tabeli nie chcesz zmieniać, ale zastosować inne podejście już tak :P Ja w swoich serwisach mam niejawne "kategorie" z relacją na siebie samą - tabela zawiera artykuły, które mogą mieć typ kategorii i mogą należeć do innego wpisu - stosowane do generowania "bread crubs" ( strona główna > gui > pyqt > tworzenie interfejsu ). Tworzysz ten cały CMS od niepamiętnych czasów i nadal nic nie opublikowałeś (release early, release often) i nawet nie wiesz czy kogoś będzie interesowała obsługa jakiś "wyszukanych" rozwiązań. Podejście "Dużo i od razu" nie jest zbyt dobrym rozwiązaniem, bo nie wiesz czy to rzeczywiście będzie dużo dobrych rozwiązań (a o tym nie decyduje autor kodu, a użytkownicy). Problemem jest jednak błędne obliczanie głębokości kategorii w drzewie, jeżeli trzeba ukryć niektóre z nich. Czy ktoś wie, jak sobie z tym poradzić? Opisałem problem szczegółowo tutaj wraz z kodem źródłowym: http://www.unit1.pl/pb-939 Aby zrozumieć problem: wyświetlamy tylko kategorie, do których użytkownik ma uprawnienia. Na przykład spośród: 1, 2, 3, 4, 5, 6, 7 może zarządzać tylko 2, 5 i 7. Nie wiadomo, jaki LEFT czy RIGHT ma 1, 3, 4 i 6, co utrudnia prawidłowe obliczenie głębokości. Może wystarczy tylko wnieść drobne poprawki do obecnego algorytmu? Czy nie obędzie się bez dodania pola `depth` lub pobierania wszystkich kategorii? PS. Wersja alfa CMS już jest, ale występuje w niej ww. błąd. Spoiler Zmian w strukturze dokonam, gdy będzie trzeba. Rozważam też przejście na materialized path. Nie wiem, co lepsze. Jeśli przejdę na materialized path (drzewka IP), pewnie wpakuję się w kolejne problemy, o których teraz nie wiem. Nic nie zastąpi hierarchicznej bazy danych, której brakuje w MySQL i SQLite. Pobierać dane o wszystkich kategoriach i finalnie wyświetlać tylko te, do których są uprawnienia (a reszta może być np. nieklikalna na szaro obrazując całość na liście)? Albo też napisać funkcję rekurencyjną pobierającą (domyślnie) główne kategorie i dla każdej z nich pobiera podkategorie wywołując samą siebie i generując wynik zagnieżdżonych list ul/li? |
|||
Sitedesign by AltusUmbrae. |