Kilka dni temu pojawiła się nowa, bo według numeracji oznaczona już jako 7.01 a nie 7.00.x wersja PHP-Fusiona. Wbrew temu, co ta numeracja może sugerować, zmiany są dosyć spore i niejako otwierają nową gałąź tego silnika. Uznałem więc, że przyjrzeć się nieco dokładniej wprowadzonej funkcjonalności i poczynionym zmianom, tym bardziej, że sam zaczynałem właśnie od "fusiona", a z racji prostej obsługi, wielu darmowych styli i dodatków, robi to również wiele innych osób.
Pisząc ten wpis uświadomiłem sobie, że nie każdy musi przecież znać i wiedzieć, czym tak naprawdę jest ten cały PHP-Fusion, śpieszę więc z wyjaśnieniami. Jest to najprościej rzecz ujmując CMS - Content Management System, po po polsku system zarządania treścią. W założeniach takie coś ma użytkownikowi umożliwiać proste tworzenie, publikowanie i edycję w internecie... treści różnego typu, czyli np. aktualności, czy też zdjęć. W praktyce jednak możliwości silnika jakim jest PHP-Fusion są znacznie większe i obecnie obejmują one:
* newsy (treść podstawowa + rozwinięcie) wraz z jednopoziomowymi kategoriami
* artykuły (treść podstawowa + pełna z możliwością podziału na podstrony) wraz z jednopoziomowymi kategoriami
* cały dział download, a więc kategorie, pliki, informacje o nich
* galerię, w której znajdują się albumy, a w nich dodane przez nas zdjęcia
* możliwość komentowania wybranych materiałów
* rejestrację, profile użytkowników i ich ustawienia, do tego wysyłanie prywatnych wiadomości
* grupy użytkowników - domyślne oraz możliwe do utworzenia przez administratora
* podstawowe forum dyskusyjne z możliwością tworzenia zagnieżdżonych kategorii i działów
* możliwość dodawania własnych pól w profilach użytkowników (choć nie jest to zrealizowane w zbyt wygodny sposób)
* możliwość definiowania własnych kodów bbcode stosowanych w komentarzach oraz na forum
* zabezpieczenie antyspamowe w postaci wymaganego kodu captcha podczas rejestracji i komentowania
* ograniczenia dostępu do określonych materiałów - dostęp tylko dla określonej grupy
* dział pozwalający na dodawanie linków do zewnętrznych serwisów
* ankiety dla użytkowników serwisu wraz z ich archiwum
* sekcja umożliwiająca proste tworzenie wielu artykułów typu FAQ
* dodatkowe podstrony mogące zawierać kod PHP
* system nadawania użytkownikom ostrzeżeń, oraz blokowania ich po pewnych kryteriach
Możliwości stworzenia portalu z wieloma atrakcjami dla użytkowników jest więc naprawdę sporo. Trzeba do tego jeszcze dodać, że istnieje bardzo dużo wtyczek (zwanych po prostu infusionami), oraz kompozycji wizualnych udostępnianych zupełnie za darmo. Dzięki temu możemy w łatwy sposób wzbogacić serwis o dodatkowe opcje, takie jak np. kalendarz, czy też efektowne otwieranie zdjęć z galerii (kilka efektów do wyboru, w tym najpopularniejszy chyba Lightbox). Dla zainteresowanych znajdą się również dodatki pozwalające na budowę serwisu społecznościowego: mikroblogi, własne galerie użytkowników, czt też wysyłanie sobie prezentów, oraz podgląd osób, które odwiedziły nasz profil w ostatnim czasie. Od strony technicznej nie jest aż tak ciekawie, bo chociaż da się stworzyć naprawdę ładną skórkę, to jednak brak jakiegokolwiek systemu szablonów mocno razi po oczach - kod HTML leci w pełnej przeplatance z PHP, a właściwie to znajduje się wewnątrz kodu PHP, co czyni go jeszcze bardziej nieczytelnym.
Oczywiście PHP-Fusion nie sposób porównywać możliwościami do Joomli czy Drupala, ale biorąc pod uwagę bardzo łatą obsługę, oraz fakt, że generowane obciążenie w porównaniu do wymienionych silników jest naprawdę minimalne, CMS ten staje sie często naprawdę niezłym wyborem. Nie jest to jednak skrypt idealny, bowiem w wielu wypadkach developerzy mają naprawdę utrudnione zadanie. Sam mogę podać przykład, nad którym pracowałem, a mianowicie funkcję przyjaznych linków ze słowami kluczowymi dla fusiona. Bez sporej modyfikacji wielu plików silnika, po prostu nie da się tego zrobić tak, aby działało szybko i zapewniało odpowiednią funkcjonalność tj. np. chroniło nas przed duplikami linków, czy też wykonywało automatyczne przekierowywanie na odpowiednie adresy. Istniejące już rozwiązania bazują na wdrożonym w fusiona mechanizmie output handling - cała strona jest generowana w buforze, który przed wysłaniem do klienta może zostać poddany praktycznie dowolnym modyfikacjom. W efekcie do stworzenia przyjaznych linków wykorzystuje się na szeroką skalę wyrażenia regularne, które parsują cały kod wynikowy witryny. Nie tylko nie pozwala to na uniknięcie duplikatów, ale i jest bardzo nieefektywne. Co prawda można rozwiązanie to śmiało stosować na niewielkich witrynach, ale na większych, staje się niemożliwe. Problem rozwiązywałaby implementacja jakiegokolwiek mechanizmu cache, ale twórcy fusiona niestety o tym nie pomyśleli.
Uczepić można się również licencji AGPL3 na której jest rozpowszechniany PHP-Fusion, oraz dodanej do niej klauzuli. Nakłada ona na administratora witryny obowiązek dodania długiej i często szpecącej wygląd witryny stopki informującej o silniku i jego autorze. Ja w pełni rozumiem takie stopki, ale czy naprawdę musi ona być tak wielka? Poza tym, wszystkie dodatki modyfikujące pliki silnika również powinny być objęte tą licencją, co wyraźnie uderza w osoby wykonujące je odpłatnie, o ile oczywiście chcą działać zgodnie z obowiązującym prawem. W wypadku usunięcia stopki póki co po prostu możemy zapomnieć o supporcie, zarówno zagranicznym jak i zlokalizowanym w Polsce. Dodatkowo polska ekipa zajmująca się tworzeniem spolszczenia i wsparciem oznacza takich użytkowników poprzez dopisek "Złamana licencja", oraz "szuka na nich haka" - piszę szczerze, bo sam ze swojego serwisu usunąłem stopkę po konsultacji z autorem skryptu i wyjaśnieniem, że został on całkowicie przebudowany, ale jak widać inni wiedzą lepiej, bo cała sprawa zakończyła się zbanowaniem mojego konta. Tak, zachowanie polskiego supportu również uznam tu jako wadę silnika, bo przecież nie każdy będzie w stanie zapytać o pomoc na forum międzynarodowym po angielsku, a takie zachowanie jak dla mnie jest zniechęcające.
No dobra, miałem pisać o wprowadzonych zmianach, a wyszło na to, że opisałem nieco całego CMSa. Skupmy się więc teraz na tym, co autorzy zaserwowali nam w najnowszej jego odsłonie. Przede wszystkim, najważniejsza nowość to możliwość wyboru sposoby działania sesji - zawsze były one oparte na ciasteczkach, teraz doszedł również mechanizm sesji działający z poziomu bazy danych. W pewien sposób "przebudowano" panel administratora, poprzez oddzielenie od siebie sekcji kluczowych dla bezpieczeństwa oraz ustawień serwisu, oczywiście nadal występuje konieczność wpisywania hasła administratora gdy wprowadzamy jakieś większe zmiany (hasło to jest inne niż hasło konta użytkownika). Dla poprawy bezpieczeństwa zdecydowano się również na losowy prefix podczas instalacji CMSa, jak i sprawdzanie, czy czasem nie nadpisujemy już istniejącego systemu, co było dosyć częstym zjawiskiem w poprzednich wydaniach. W końcu również autorzy poszli po rozum do głowy i ustawienia w bazie danych są zapisywane w sposób wertykalny zamiast horyzontalnego tj. każde ustawienie ma swój rekord, więc dodatki nie muszą już tworzyć własnych tabel, czy też modyfikować tej zawierającej konfigurację portalu.
Czy silnik ten idzie w dobrym kierunku? Ciężko powiedzieć. Ze względu na sposób budowy na pewno nie doczekamy się jakichś większych rewolucji, ponieważ autorzy ciągle dbają o chociażby przyzwoitą kompatybilność wsteczną. Z jednej strony to dobrze, bo osoby które dawno temu założyły serwis na PHP-Fusion 6 czy nawet 5, mogą migrować do najnowszych wersji prawie bezboleśnie - największe zmiany dotyczą skórek. Gdy popatrzymy się jednak na możliwości innych silników, trudno zaprzeczyć tezie która mówi, że fusion niespecjalnie nadaje się na większe serwisy, w których możemy w skrajnie łatwy sposób dodawać treść oraz nowe możliwość - nawet w porównaniu do Wordpressa jest słabo, bo tu wtyczki instaluje się nawet z poziomu panelu administracyjnego. Oczywiście nie da się również zaprzeczyć temu, że wydajność fusiona jest naprawdę niezła, oczywiście o ile administrator również zna pewne granice.