Jak umieścić treść w odpowiedniej formie - rozterki przy wyborze CMSa.
Ostatnio poszukiwałem dobrego rozwiązania na pewien projekt.
Wytyczne:
- musi obsłużyć duży ruch (w szczytowych momentach nawet ogromny) z dość często zmieniającą się treścią
- prosty i elastyczny system rozszerzeń (pluginów)
- idealnie gdyby by NIE był stworzony w PHP (chciałbym by ten rozdział w moim życiu pozostał zamknięty:))
- musi zawierać rozsądnie rozwiązany system zarządzania użytkownikami i ich prawami
- najlepiej gdyby był oparty na gotowych i sprawdzonych frameworkach
- musi być wydany na otwartej licencji i napisany w otwartym języku
Ogólnie rzecz biorąc decyzja jeszcze nie zapadła ale chciałbym się podzielić pewnym odkryciem. W dziedzinie CMSów mam całkiem spore doświadczenie i przetestowałem ogromną ich ilość gdy wybieraliśmy system do obsługi większości naszych firmowych domen. Wtedy wybraliśmy eZ Publish i z perspektywy czasu okazało się, że był to strzał w dziesiątkę. System spełnił pokładane w nim oczekiwania (główną zaletą jest jego niezwykła wręcz elastyczność). Fakt jednak, że wytyczne jego wyboru były zdecydowanie inne od przedstawionych powyżej. Z drugiej strony największymi minusami eZ Publisha są jego wydajnośc, zasobożerność oraz dość skomplikowana budowa. Wydajność jest wręcz nieakceptowalna gdy system działa bez włączonego cache’owania treści i szablonów oraz bez jakiegokolwiek PHP acceleratora.
Idealnym rozwiązaniem do tego projektu wydaje się Drupal - jest szybki, ma dobrze rozwiązany system pluginów, jest przez lata testowany w przeróżnych zastosowaniach i ma ogromną społeczność użytkowników. Niestety stworzony został w PHP ale to jeden z projektów, które jak WordPress przełamują mą niechęć.
Rozważałem jeszcze kilka sprawdzonych CMSów - np znakomity Plone‘a, który jest niestety równie ciężki jak eZ Publish a pluginy w Zope to nic szybkiego ani, jak dla mnie, przesadnie przyjemnego.
Przez przypadek trafiłem na niezmiernie ciekawy projekt, który nosi nazwę Skeletonz.
Jest to lekki, elastyczny i bardzo szybki (jak wynika z pierwszych testów i informacji autora) CMS stworzony w Pythonie.
Początkowo projekt używał frameworków CherryPy, MochiKit, SQLObject, Textile i Cheetah. Według autorów (prawdę mówiąc autora) narzędzia te pokazały swe ograniczenia w różnych kwestiach i zostały na potrzeby Skeletonz ulepszone (tu szczegóły).
Głównym założeniem tego systemu jest elastycznośc i wydajność. Rozwiązanie umieszczania pluginów przypomina mi trochę RadiantCMSa. System ma bardzo przyjemny i przejrzysty interfejs i tam gdzie ma to sens używa AJAXa - wszystko jest proste i intuicyjne, działa szybko, sprawnie i bez większych problemów.
Wziąłem Skeletonz na warsztat i okazało się, że spełnia większość moich wymagań.
- jest naprawdę bardzo wydajny - nie podam póki co wyników wstępnych testów bo zrobiłem ich zbyt mało ale przy sporej ilości wrzuconej treści i włączonym cache’owaniu osiągał nawet ok 450req/s. Odbudowa cache’y jest błyskawiczna i update jest automatyczny np przy dodawaniu komentarzy do wpisów na blogu, lub kolejnego wpisu do newsów
- jest bardzo elastyczny, pozwala na praktycznie nieograniczone używanie w każdej wygenerowanej stronie wszystkich dostępnych treści (tu pluginów). Treści te można współdzielić na wielu niezależnych stronach (każdy blog, sekcja newsów itd ma swój unikalny identyfikator). Np tworzę stronę, która może mieć sporo czystego tekstu, poniżej newsy, bloga, linki do innych stron, kolejnego bloga, podmenu, formularz rejestracyjny, czytnik RSS itd (pomijam tu sensowność :))
- zarządzanie treścią jest bardzo intuicyjne a interfejs jest estetyczny
- system pluginów jest rozsądnie zrealizowany
Oczywiście jak wszystko Skeletonz też ma wady:
- projekt jest dość młody, ma małą społeczność użytkowników, rozwijany jest głównie przez jedną osobę (amix.dk Amix jest też twórcą bardzo ciekawie zrealizowanego Todoist),
- zapewne posiada kilka błędów (jeden udało mi się wykryć i poprawić, chyba byłem pierwszą osobą poza autorem, która robiła commit do SVNa) na szczęście kod jest przejrzysty i rozsądnie napisany
- ma tragicznie rozwiązany system uprawnień - możliwość edycji strony (całej, nie na poziomie pluginów na niej użytych) można dać jednemu użytkownikowi lub jednej grupie użytkowników, użytkownika można przypisać tylko do jednej grupy. Pojawia się oczywisty problem gdy chcemy by kilku użytkowników mogło edytować jedną stronę a tylko część z nich mogła edytować kolejną itd. Pracuję nad tym by ten problem rozwiązać poprzez możliwość przypisanie użytkownika do wielu grup. Ta zmiana będzie chyba najmniej bolesną z możliwych w tym zakresie. Zobaczę też czy można zintegrować sprawdzanie uprawnie na poziomie pluginu.
- nie wiem dlaczego ale hasła trzymane są w bazie czystym tekstem (zadałem pytanie do autora na grupie ale otrzymałem tylko wymijającą odpowiedź)
- dokumentacja projektu bardzo odbiega od ideału i większość trzeba “rozgryzać” czytając kod źródłowy (przy kolejnym tak poznawanym rozwiązaniu przestało mnie to już przerażać:))
Podsumowując chciałem wam przybliżyć projekt Skeletonz jako bardzo ciekawą alternatywę dla CMSów tworzonych w PHP, szczególnie jeżeli kluczami do wyboru rozwiązania będą wydajność, elastyczność, intuicyjny interfejs i brak PHP :)



19. September, 2007 at 16:01
“idealnie gdyby by NIE był stworzony w PHP (chciałbym by ten rozdział w moim życiu pozostał zamknięty:))” - widzę, że nie tylko ja miałem traumatyczne okresy w życiu :D
23. September, 2007 at 17:18
Chyba każdy z nas niestety miał takie okresy. Co najśmieszniejsze w trakcie trwania tych okresów nie wydawały się takie straszne ale patrząc w przeszłość… :)