Dzisiaj jest środa, 28 czerwca 2017
Więcej szczęścia niż rozumuSklep z koszulkamiAdobe Stock
CMS na jednej tablicy?

CMS na jednej tablicy?

czwartek, 2015-08-060

Grafika pochodzi z banku zdjęć Fotolia

Jestem skończonym zwolennikiem minimalizmu. Jeśli coś da się zrobić w prostszy i mniejszy sposób, to stracę masę czasu, żeby to zrobić. Na krótką metę może mało ekonomiczne, ale na dłuższą mam z tego wiele korzyści.

Mój Alib CyMeS składa się tylko z 7 tablic. Przy czym na bieżąco używam czterech, pozostałe przydają się w specyficznych przypadkach. Opcjonalnie dodaję też kilka dla sklepów, ale tak naprawdę liczy się tylko jedna, zawierająca wszystkie dane serwisu - strony, newsy, menu, linki, galerie itp. Pozwoliło mi to ładnie zoptymalizować główną klasę obsługi systemu, bo wszystkie metody odnoszą się do tej tablicy a różnią się głównie dalszą obróbką odczytanych danych.

Jeśli myślisz o zrobieniu własnego CMS-a lub Frameworka a nie bardzo wiesz, jak się za to zabrać, poniższy opis może Ci pomóc w zaprojektowaniu systemu. Możliwe, że opracujesz jeszcze lepsze rozwiązanie. Chętnie bym się z nim zapoznał.

  • ID - unikalny identyfikator (indeks) rekordu. Wszystkie tablice w moim CMS-ie go mają. Bardzo przyspiesza pracę przy tworzeniu zależności.
  • IDPARENT - ID rekordu nadrzędnego. W większości przypadków zachodzi bardzo proste powiązanie rodzic-dzieci. Buduję w ten sposób drzewiastą strukturę np. pozycji menu. W przypadku powiązań wielokrotnych (np. tagi do wpisów) używam dodatkowej tablicy wiążącej indeksy rekordów różnych typów.
  • TYP - typ rekordu. Bardzo ważna zmienna, bo od niej zależy czy dany rekord jest to newsem, linkiem czy pozycją menu. Można dodawać własne typy i rozbudowywać system wciąż korzystając z jednej tablicy danych.
  • STATUS - status rekordu. Standardowo mam 3: roboczy (ukryty), opublikowany (widoczny), oczekujący na akceptację. W przypadku newsów dodałem zaplanowany a publikacją zajmuje się CRON.
  • IDUSER - ID użytkownika tworzącego dany rekord.
  • DATE - data i czas utworzenia (edycji) rekordu.
  • TEMP - początkowo miała to być tylko nazwa szablonu dla stron (jak w WordPressie). Ale dla pozostałych typów była niewykorzystana, więc wrzucam tutaj nazwy plików np. dla managera plików, galerii czy linkowni.
  • NAME - nazwa rekordu, może to być tytuł podstrony, newsa, pliku w galerii itp.
  • URL - przyjazny adres strony albo docelowy adres w linkowni.
  • VALUE, EXTRA, CONTENT - zwykłe zmienne tekstowe, które zawierają różne treści i dodatkowe dane w zależności od typu danych. Pojawiały się w systemie sukcesywnie i mały różne przeznaczenia, stąd różne nazwy. Teraz pewnie nazwałbym je VALUE1, VALUE2 i VALUE3.

Ta jedna tablica wystarczy, żeby utworzyć większość typów danych: menu, strony, newsy, kategorie newsów, linki, pliki, galeria, tagi, komentarze, newsletter. Wystarczy nawet do obsługi prostego sklepu: kategorie, asortyment, zdjęcia, klienci, zamówienia. A wszystko to mogę obsłużyć nieznacznie tylko rozbudowując główną klasę. Czasami nawet nie fatyguję się w pisanie nowej klasy, tylko odpowiednio preparuję zapytania.

Spodobał Ci się wpis? Udostępnij go w Social Media:
Jeśli podoba Ci się wpis,
koniecznie zalajkuj,
skomentuj i zapisz się na