Dzisiaj jest piątek, 23 czerwca 2017
15 rzeczy, które pomogą Ci stać się bogatym25 cech ludzi silnych psychicznieDLACZEGO tak szybko oceniamy?
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