4 edycja
warsztatów zakończona

PHP - Rozbudowa aplikacji o nowe funkcjonalności

Published: Fri 18 July 2014
tags: python php

Jak powszechnie wiadomo, najczęściej wykorzystywanymi narzędziami do szybkiego postawienia strony lub bloga są Wordpress, bądź Joomla. Jedno od drugiego zdecydowanie się różni, nie tylko filozofią pisania pluginów, ale też podejściem w implementacji, czy architekturze. Problem powstaje w momencie, gdy dostępne pluginy, czy moduły nie są wystarczające w stosunku do naszych potrzeb. Istnieją frameworki, które mają podobne funkcjonalności, co gotowe systemy blogowe lub CMSy, natomiast czas poświęcony na napisanie w nich wszystkiego praktycznie od zera, nie jest adekwatny do tego, co otrzymamy. Dostajemy możliwość rozbudowy aplikacji o dużo większą funkcjonalność, oraz przede wszystkim wiemy, co mamy napisane i jak ten kod wygląda. Wracając do najpopularniejszych i wydaje mi się najbardziej rozwijanych, z gotowych rozwiązań mamy Wordpressa i Joomlę.

Wordpress

Wordpress charakteryzuje się przede wszystkim ilością dostępnych pluginów, a także dużą ilością gotowych szablonów (ang. template). Jeśli chodzi o pisanie własnego plugina do Wordpressa, niestety sprawa staje się trochę trudniejsza. Zwłaszcza w przypadku, gdy chcemy pisać według kodeksu, który został zamieszczony na stronie Wordpressa (http://codex.wordpress.org/). Zapoznanie się z całą dokumentacją i możliwościami zajmie początkującej osobie kilkanaście godzin, dodatkowo spotka się ona z pewnymi ograniczeniami lub brakiem opisu różnych funkcji. Mimo dużej dostępności pluginów, zdarza się, że ze sobą nie współpracują lub nie są przetestowane z najnowszą wersją Wordpressa. Jeżeli robimy stronę na własne potrzeby, tj. prowadzenie bloga, czy napisanie prostej aplikacji, to sami kontrolujemy update i wykonujemy go dopiero, gdy jesteśmy pewni, że wszystkie wersje są ze sobą zgodne. Bardzo często zdarza się sytuacja, gdy przygotowujemy aplikację, czy bloga dla innych osób lub firm, a osoby, które następnie się zajmują pracą w panelu administratora, wykonają aktualizację. Może się wtedy zdarzyć, że plugin, który stworzyliśmy nagle przestaje działać. Oczywiście pretensje i uwagi, będą kierowane do nas, ponieważ to my go stworzyliśmy. Trudność utrzymania własnych pluginów z aktualnie dostępnym Wordpressem polega na ciągłym obserwowaniu zmian w Wordpressie oraz update’owaniu swojego plugina.

Joomla

W tym przypadku sprawa wygląda znacznie inaczej - sam CMS można wykorzystać w dużo większym zakresie. Aplikacja utworzona na bazie Joomli potrafi wytrzymać znacznie większe obciążenie, a wbudowane opcje cache’owania są wystarczające w stosunku do początkowych potrzeb. Ilość przybywających aktualizacji nie jest dużym problemem, ponieważ zmiana z jednej wersji do drugiej prowadzi najczęściej do dużej zmiany w strukturze i istnieje bardzo duże prawdopodobieństwo, że trzeba będzie kilka rzeczy poprawić. Dostosowanie aplikacji do naszych potrzeb również nie jest wielkim problem, gdyż mamy bardzo dużo serwisów, gdzie znajdują się dodatkowe moduły czy komponenty, a także mamy do dyspozycji zasoby z gotowymi szablonami. Natomiast problemem, jaki możemy napotkać jest sytuacja, gdy moduł lub komponent, który jest daje nam odpowiednią funkcjonalność jest płatny. Duża ilość dodatkowych modułów, czy komponentów jest tworzona przez firmy w celu sprzedaży. Stworzenie własnego modułu lub komponentu nie jest stosunkowo trudnym zadaniem, jest nim natomiast architektura, która występuje w modułach i komponentach w Joomli. Poprawne stworzenie modułu lub komponentu wiąże się z poznaniem architektury Joomli, poprawnym utworzeniem configa oraz struktury. Niestety nie da się jednocześnie tak napisać modułu czy komponentu, który byłby dobry dla starszej i nowszej wersji, ponieważ wersje pomiędzy sobą (Joomla 2. a 3.) są bardzo różne.

Frameworki

Oczywiście jest możliwość, aby to samo zadanie wykonać we frameworkach, których na rynku jest dość sporo. Od prostszych, wykonujących sporą część za nas, po te, w których musimy pisać wszystko od zera. Prostsze, to frameworki, które mogą utworzyć szkielet aplikacji, widoki listy, dodawania, usuwania, czy też potrafią stworzyć pewną strukturę aplikacji do późniejszego uzupełnienia. Dopisanie funkcjonalności w tym przypadku jest dużo prostsze, bardziej elastyczne, ale przede wszystkim wiemy co mamy w aplikacji i dużo łatwiej jest taki kod zoptymalizować, czy zrozumieć - co jest niewątpliwie dużą zaletą. Często większość metod czy funkcji, mamy już do dyspozycji i można je ze spokojem wykorzystać. Oczywiście istnieją też gotowe moduły do wykorzystania, napisane przez innych programistów, ale niestety często kod jest kiepsko zoptymalizowany, a rozwiązań na dany problem jest w internecie sporo. Same frameworki są narzędziem, dzięki któremu możemy zbudować o wiele większy serwis niż potrzebujemy, dlatego też rozbudowa przy tak zastosowanej technologii daje znacznie większą elastyczność. W jednym z kolejnych artykułów opiszemy krótko porównanie funkcjonalności frameworków PHPowych oraz Pythonowych.

A co z Pythonem?

Tutaj sprawa jest zdecydowanie inna niż w przypadku PHP. Nie ma gotowych rozwiązań, aby w ciągu 15 minut postawić blog, jak to ma miejsce w przypadku Wordpressa, gdzie wystarczy kilka kliknięć w panel administracyjny hostingu i mamy praktycznie gotową stronę. W Pythonie wymagane jest posiadanie większej wiedzy na temat budowy aplikacji. Zdecydowanie należy poświęcić więcej czasu na przygotowanie, jednak w taki sposób przygotowana aplikacja daje bardzo duże pole do popisu. Dzięki takim rozwiązaniom jak Django CMS czy Mezzazine (Djangowe moduły), można równie szybko postawić stronę oraz zyskać bardzo dużą elastyczność w przypadku, gdy potrzebujemy rozbudować aplikację o kolejne rzeczy. Bardzo dużą ilość CMSów można znaleźć na wiki Pythona (https://wiki.python.org/moin/ContentManagementSystems), które są gotowe do wykorzystania. Niestety w przypadku Pythona, wymagane są specjalne konfiguracje hostingów czy nawet zakupienie własnego VPSa (Virtual Private Server). Koszty mogą być czasem dość duże, ale przez to zyskujemy specjalnie przygotowany serwer pod aplikację, który w większości przypadków jest bardziej wydajny. Dodatkową rzeczą, która wspomaga rozszerzanie aplikacji o nowe funkcje jest zbiór pakietów trzymany w jednym miejscu - mowa tu o PyPI (https://pypi.python.org/pypi). Możemy tam znaleźć bardzo dużo gotowych rozwiązań, dokumentację oraz historię rozwoju danego pakietu. Istnieją także inne strony, na których mamy spis oraz informację gdzie można znaleźć dodatkowe rzeczy gotowe do wykorzystania, np. dla frameworka Django - https://www.djangopackages.com/, dla Django CMS - https://www.django-cms.org/en/add-ons/, czy bardzo prosty CMS o nazwie Urubu - http://urubu.jandecaluwe.com/. Pomoc zapewnia bardzo duża społeczność, rozwiązania znajdujące się w Internecie, ale też sposób ich pisania, układ kodu (jest na tyle czytelny, że bardzo szybko można zrozumieć przedstawiony kod, co znacznie ułatwia jego wprowadzenie do aplikacji czy modyfikacji). Jeżeli nie jesteśmy pewni danego fragmentu kodu, mamy do dyspozycji bardzo dobrą dokumentację, natomiast jeśli chodzi o zmiany następujące we frameworku czy w samym Pythonie, istnieje bardzo duże prawdopodobieństwo, że nasz moduł czy funkcjonalność zadziała od razu. W przypadku, gdy wystąpi problem z działaniem, wystarczą drobne modyfikacje i mamy gotowy kod, który możemy użyć w nowszej wersji.

Wymienione tutaj możliwości to nie jest oczywiście pełen wachlarz dostępnej funkcjonalności. Znacznie więcej można stworzyć, czy zyskać, pisząc własne rozwiązania. Możemy na własnej skórze przekonać się w pełni o funkcjonalności, dostępnej dokumentacji czy możliwościach i ograniczeniach dostępnych narzędzi.

Łukasz Jagodziński Łukasz Jagodziński

Na co dzień zajmuje się tworzeniem aplikacji webowych w Pythonie. Od kilku lat współpracuje z STX Next w Poznaniu. Po godzinach interesuję się tworzeniem gier od A do Z czyli od etapu projektowania, poprzez kodowanie, aż do gotowego produktu na sprzedaż.

comments powered by Disqus
Współpraca: programista