• Kontakt
  • O systemie
  • Strona główna
Pomoc
  • Założenia systemu
  • Praca z systemem
  • Opcje
  • Szablony
  • Moduły
  • Edytor HTML
  • E-commerce - sprzedaż online
  • Inne zagadnienia
    • Generowanie sitemap.xml
    • Autogenerowanie słów kluczowych
    • Mechanizm przypisywania do wielu kategorii
    • Wirtualne katalogi - przekazywanie zmiennych
    • Zewnętrzne biblioteki
    • Tagi
    • Konwersja video
    • Plik konfiguracyjny
    • Skrypty użytkownika w systemie
    • System uzytkowników - frontend
  • Przykłady rozwiązań

Mechanizm przypisywania do wielu kategorii

Standardowo w systemie poszczególne elementy treści można przypisywać do jednej wybranej kategorii, przez zdefiniowanie pola menu_id, jako numeru id wybranej kategorii. Ponad to istnieje mechanizm, który pozwala przypisywać element treści do kolejnych kategorii. Kategoria do której zostanie przypisany rekord jako do kategorii dodatkowej zostaje automatycznie oznaczona w bazie dodatkowym identyfikatorem zdefiniowanym w polu multicat w tabeli kategorii (act_menu), domyślnie wartość tego pola jest równa -1, oznacza to, że dana kategoria nie została nigdzie przypisana jako kategoria dodatkowa.
Identyfikator o wartości >= 0 określa numer bitu, którego włączenie będzie oznaczało przypisanie rekordu do tej kategorii.

Kolejne bity włączane są w 32 bitowych polach mcat0, mcat1, mcat2 .. itd

Przykład:

W strukturze menu istnieją kategorie:

 id nazwa kategorii  multicat 
 1 owoce
 -1
 2 warzywa  -1
 3 cytrusy
 40
 4 rośliny
 -1

Jeśli rekord ma zostać przypisany do kategorii "owoce" i do kategorii dodatkowej "cytrusy" wówczas w polu menu_id będzie znajdować się wartość 1 a w polu mcat1 256  (bit o numerze 8 ustawiony na 1 = 2^8 = 256):

 menu_id mcat2mcat1mcat0

 1000000000000000000000000000000000000000100000000000000000000000000000000


wynika to z tego, w polu mcat0 jest miejsce na kategorie o polu multicat o wartościach od 0 do 31 , natomiast kategorie o polu multicat równym od 32 do 63 są przydzielone do kolejnego pola - mcat1, itd.

Projektując własny moduł, który ma odczytać zawartość z bieżącej kategorii, z uwzględnieniem kategorii dodatkowych wystarczy skorzystać z funkcji genCatWhere($kategoria,$prefix)  gdzie parametrem może być numer pojedynczej kategorii lub tablica wielu ID kategorii. Funkcja zwraca warunek SQL, przykład:

dla powyższego przykładu

$warunek = genCatWhere(3); // "(menu_id = 3 OR mcat1 & 256)"
$warunek = genCatWhere(3, 'A.'); // "(A.menu_id = 3 OR A.mcat1 & 256)"






Powered by Actualizer CMS