Sklepy internetowe vs. programista - OsCommerce
Sklepy internetowe towarzyszą naszej pracy na co dzień. W sieci znajdziemy mnóstwo rankingów wyłaniających narzędzie najwygodniejsze w zarządzaniu. Dziś chcę poruszyć kwestię sklepów internetowych od tej drugiej strony - która nas interesuje najbardziej. Na pierwszy ogień - OsCommerce.
Słowem wstępu
W serii artykułów postaram się przybliżyć jakość pracy podczas wdrożeń projektów sklepów internetowych w oparciu o popularne silniki sklepowe. W opisach posłużę się własnymi przeżyciami oraz wiedzą firmy. Porównam sklepy w kontekście dla programisty najważniejszym - modyfikacja wyglądu oraz modyfikacja funkcjonalności.
Kandydat z brodą, czyli OsCommerce...
Rozpoczniemy od OsCommerce, najstarszego silnika z którym miałem do czynienia. Oprogramowanie ma już 11 lat, dotychczas powstało mnóstwo jego darmowych oraz płatnych klonów, zazwyczaj niewiele różniących się od siebie. Sprawdzimy wersję 2.3, najnowszą z gałęzi 2.x i obecnie najpopularniejszą. Warto dodać, że powstaje wersja 3.x, która nie może się doczekać premiery. Co prawda wyszła już jakos stable release, niemniej brakuje jej podstawowych funkcjonalności sklepu (!), więc ciągle czekamy.
Rysunek1. Strona główna OsCommerce
Piekło z przeszłości
Trudno inaczej nazwać stukturę tego oprogramowania. Rodem z czasów PHP4, OsCommerce wydaje się nie słyszeć o wzorcach projektowych, modularnej budowie i innych nowoczesnych i modnych określeń towarzyszących programowaniu. Co prawda część elementów ma charakter modułowy (np. płatnośći) ale tam gdzie potrzebujemy tego najbardziej - po prostu odczuwamy braki. Posłużę się fragmentem kodu:
if (tep_db_num_rows($filterlist_query) > 1) {
echo ' <td align="right" class="main">' . tep_draw_form('filter', FILENAME_DEFAULT, 'get') . TEXT_SHOW . ' ';
if (isset($HTTP_GET_VARS['manufacturers_id'])) {
echo tep_draw_hidden_field('manufacturers_id', $HTTP_GET_VARS['manufacturers_id']);
$options = array(array('id' => '', 'text' => TEXT_ALL_CATEGORIES));
} else {
echo tep_draw_hidden_field('cPath', $cPath);
$options = array(array('id' => '', 'text' => TEXT_ALL_MANUFACTURERS));
}
echo tep_draw_hidden_field('sort', $HTTP_GET_VARS['sort']);
while ($filterlist = tep_db_fetch_array($filterlist_query)) {
$options[] = array('id' => $filterlist['id'], 'text' => $filterlist['name']);
}
echo tep_draw_pull_down_menu('filter_id', $options, (isset($HTTP_GET_VARS['filter_id']) ? $HTTP_GET_VARS['filter_id'] : ''), 'onchange="this.form.submit()"');
echo tep_hide_session_id() . '</form></td>' . "\n";
}
Fragment świetnie oddaje to, co mam na myśli. Nie trzeba zbyt dużo opowiadać, żeby zobaczyć brak jakiejkolwiek logiki pisania kodu. W żaden sposób nie winię za to samej aplikacji, raczej zrzucam odpowiedzialność na tamte czasy. Niemniej przekłada się to na problemy w rozczytaniu aplikacji, o którym za chwilę.
To co widzę, czyli szablony
Layouty - marnie, marnie i jeszcze raz marnie. Jeśli ktoś zdążył już zapomnieć o popularnym 10 lat temu layoucie na tabelkach i nie chce więcej do tego wracać - nie polecam dotykać. Czysty silnik nie waliduje się pod WC3, jakiekolwiek zmiany wprowadzają tylko chaos. Pod tym względem jest naprawdę bardzo niedobrze. Próba naprawienia tego stanu rzeczy raczej skazana jest na porażkę. Przyczyny są dwie - archaiczny sposób prezentowania treści i brak separacji szablonu. Początkującym polecam modyfikację jakiegokolwiek istniejącego szablonu (a jest ich sporo) zamiast bawić się od nowa.
STS ratunkiem na całe (?) zło
Z pomocą we wdrażaniu grafiki przychodzi STS (ang. Simple Template System) - popularny wśród społeczności dodatek pozwalający na prostszą zmianę szablonów pracując w głównej mierze na plikach HTML. Jest to dość porządnie przemyślane rozwiązanie (jeśli mam robić coś pod OsC to STS jest pierwszą rzeczą którą dodaję) ale z małym haczykiem. STS jest tylko dodatkiem, więc nakładką na sklep a nie zmianą w jądrze. Strukturalnie system szablonów nadpisuje wyjście aplikacji swoim, w odpowiednim miejscu umieszczając predefiniowane komponenty. Część rzeczy da się więc zmodyfikować, ale nie wszystko. Niemniej do podstawowych potrzeb wystarczy, przy trudniejszych rozwiązaniach dalej pozostaje gimnastyka z kodem sklepu. Zainteresowanych wtyczką odsyłam do oficjalnej strony dodatku pod adres http://www.oscommerce.com/community/contributions,1524
Rozbudowa sklepu
Po skończeniu wdrażania szaty graficznej powinno nam jeszcze starczyć nerwów na zmiany funkcjonalności. Tutaj jest już troszkę lepiej. Okazuje się, że wada sklepu, jaką jest brak przejrzystości kodu, może się przydać. Skoro nie ma zbyt sztywnych zasad pisania kodu, możemy wklejać cokolwiek gdziekolwiek nam się podoba. Nawet wygląda, jakby pasowało. Oczywiście nie ma to nic wspólnego z sztuką ładnego programowania, niemniej umożliwia szybką reakcję i wdrożenie czegoś nowego. Niestety w praktyce taki kawałek kodu jest trudny do utrzymania i rozwoju. Warto mieć wtedy repozytorium z logami zmian, żeby się nie pogubić.
Wymyślanie koła od nowa
Jako najstarszy na liście, OsCommerce ma mnóstwo dodatków oferowanych przez dość sporą społeczność. Dzięki temu wiele rozwiązań, które przyjdzie nam wdrożyć - prawdopodobnie ktoś już napisał i nawet chętnie się podzieli. Tutaj widzę zdecydowaną przewagę nad innymi sklepami (dlaczego? trochę później) - jesteśmy częściowo odciążeni od programowania. Jest tego druga strona - fakt istnienia wielu dodatków, niektórych instalowanych jeszcze przed rozpoczęciem pracy świadczy tylko o ułomności sklepu i jego podstawowych brakach.
Żeby nie było za mało krytycznie, jeszcze słowo o "instalowaniu" dodatków. Kto widział, ten szeroko się uśmiechnie, kto nie widział - niech się naprawdę cieszy. Każdy pobrany dodatek ma instrukcję instalacji, która z grubsza polega na modyfikacji kilku - kilkunastu plików, każdy na zasadzie "znajdź linijkę x, ponad fragmentem y wklej kod z". Poniżej stosowny przykład (pobrany z STS):
2.5.1 catalog/admin/modules.php Find: switch ($set) { Add after // START STS 4.1 case 'sts': $module_type = 'sts'; $module_directory = DIR_FS_CATALOG_MODULES . 'sts/'; $module_key = 'MODULE_STS_INSTALLED'; define('HEADING_TITLE', HEADING_TITLE_MODULES_STS); break; // END STS 4.1
Nie brzmi to jeszcze aż tak strasznie, do momentu kiedy instalujemy 4 wtyczkę z rzędu i linijka 612 pliku to już nie jest ta linijka, o której mowa. Wtedy trzeba szukać. Jeszcze gorzej - okazuje się, że nie możemy usunąć danego fragmentu kodu, bo zastąpił go już inny moduł, który instalowaliśmy. Powstają konflikty - dużo konfliktów. Oczywiście instalacja nie jest niemożliwa. Wszystko da się zrobić, trochę trudniej ze wspomnianymi rezerwami świętego spokoju. Po pełną listę dodatków odsyłam do http://addons.oscommerce.com/
Czy taki diabeł straszny...
OsCommerce to świetne narzędzie jak na czasy jego świetności. Silnik był jednym z pierwszych oferujących tak dużo prosto z pudełka. Pamiętajmy, że e-handel dopiero się rozwijał i tak naprawdę liczyło się "mieć sklep w Internecie" a nie "mieć nowoczesny, ekskluzywny sklep w Internecie". Mało kto myślał wtedy o wysublimowanej szacie graficznej, masie dodatków i rozszerzeń. Dlatego też jeśli ktoś projektował wtedy, to zgodzi się ze mną, że było to narzędzie wystarczające i całkiem przyjemne.
Słowem-kluczem jest tutaj "wtedy". OsCommerce przeżywał okres swojej świetności lata temu i w moim przekonaniu próby czasu nie zdał. Wydaje się to potwierdzać również w trendach popularności. Faktem jest, że sklepy migrują na nowsze narzędzia, a nowe biznesy powstają już na czymś innym. Jakość oprogramowania została zdefiniowana na nowo, a OsCommerce został równocześnie w tyle za nowymi rozwiązaniami.
Podsumowanie
OsCommerce polecam użyć w następujących przypadkach:
- sklep nie wymaga wielu atrakcyjnych funkcjonalności
- szata graficzna nie jest zbyt skomplikowana
- mamy dużo cierpliwości i nie jesteśmy wrażliwi na piękno kodu
W każdym innym wypadku zdecydowanie nie polecam. Z doświadczenia wiem, że kilka rozszerzeń do sklepu już generuje problemy. Podobnie z layoutem - jeśli jest zbyt skomplikowany, nawet STS potrafi być upierdliwy.
Na koniec - oczywistą sprawą jest, że w rękach profesjonalistów nawet OsCommerce jest do okiełznania, w myśl zasady, że wszystko jest do zrobienia, a kwestią jest tylko czas. Żeby nie być posądzonym o kryptoreklamę powiem tylko, że faktycznie da się na tym silniku robić naprawdę kawał dobrego projektu. Na pytanie "czy jest sens?" po przeczytaniu tego artykułu każdy z Was powinien odpowiedzieć sobie sam.
... i na rozluźnienie
Artykuł chciałbym zakończyć pozytywnym akcentem z poprzedniej epoki technologii internetowych. Kto przeżył, pamięta lata świetności clipartów, graficznych nagłówków pakietu Office i tym podobnych. OsCommerce też wtedy błyszczał nowoczesnością, na co mam dowód:

Cliparty są wszechobecne w OsCommerce, ale kreatywność osoby, która dodała człowieka na desce surfingowej jest godna podziwu :)

Bobs (http://www.yahoo.com/)
Bobs (http://www.yahoo.com/)
Bobs (http://www.yahoo.com/)
Człowiek Mucha