Dziś jest sobota, 31 lipca 2010 roku (z kalendarza...)

Joomla, czyli jak nie pisać CMS-ów

Icon

27.10.2009, 12:07

PHP

Komentarze (14)

Powrót

Od otwartych CMS-ów w PHP trzymam się zazwyczaj z daleka, gdyż nie mam zbyt dobrego zdania o jakości ich kodu. Tak się jednak złożyło, że ostatni projekt musiałem realizować w oparciu o popularny system Joomla! w związku z czym miałem okazję poznać go bliżej i dokładnie zweryfikować jego budowę. Niestety, moje obawy okazały się uzasadnione. Gotowy CMS nie tylko specjalnie nie pomógł, ale w wielu miejscach wręcz utrudnił zadanie jego dostosowania. Przy okazji nie obyło się bez kilku hacków.

Główny cel istnienia CMS-ów to przyspieszenie prac nad aplikacjami internetowymi. Większość stron zawiera zestaw typowych elementów, przeważnie opakowanych jedynie w nieco inną szatę graficzną, dlatego możemy zaprogramować szkielet, każdy taki element osobno, a później składać stronę z gotowych cegiełek, skupiając się na tym, gdzie co ma się pokazywać i jakie interakcje mają zachodzić między nimi. Oszczędzamy przez to czas pracy programistów oraz zwiększamy niezawodność - wystarczy raz napisać i dokładnie przetestować jeden komponent, a może on nam służyć w wielu projektach. Ścieżką tą próbują też podążać popularne CMS-y PHP, których istnieje cała masa. Patrząc na ich oficjalne strony, znajdziemy pokaźne katalogi dodatków, które wystarczy ściągnąć i zastosować u siebie, aby w kilka dni zbudować dużą witrynę. W tym miejscu zatrzymujemy się nad pierwszą wadą...

Mnóstwo komponentów... i co dalej?

Jedną z podstawowych wad CMS-ów jest brak jakiejś przewodniej myśli czy idei, która byłaby widoczna w całym projekcie. Projektanci takiego systemu przeważnie zatrzymują się na pomyśle, że musi być możliwość użycia wielu cegiełek - komponentów. Super, możemy pościągać 100 MB dodatków, zainstalować je, ale co dalej? Milczeniem pomijany jest fakt, że na większości stron różne elementy potrafią ze sobą współpracować. Taka funkcjonalność jest zapewniana jedynie, gdy pomyśli o niej autor komponentu, ze strony CMS-a najprawdopodobniej nie doczeka się żadnego wsparcia. Współpraca może i nie jest potrzebna przy budowie stron typu mydło i powidło, ale bardziej poważne rzeczy już jej wymagają. Tutaj obecność dużej liczby komponentów niewiele daje, gdyż i tak będziemy musieli je przerabiać, a to już wymaga umiejętności programistycznych.

Odbiorca docelowy

Oprogramowanie pisane jest z myślą o pewnej grupie docelowej użytkowników. Korporacyjne CMS-y powstają zgodnie z wytycznymi firmy i są dostosowane do potrzeb, procedur lub profilu działalności, dzięki czemu praca z nimi faktycznie jest wydajna. Projektanci otwartych systemów popełniają jeden, zasadniczy błąd, mianowicie kierują swe produkty do użytkowników niemających pojęcia o tworzeniu stron internetowych. Nie mówię tu oczywiście o samym zadaniu wypełniania strony treścią, gdyż tym zadaniem zazwyczaj zajmują się właśnie tacy ludzie, ale o samym stawianiu i konfigurowaniu systemu do pracy. Efekt to ogromna liczba kreatorów, konfiguratorów i paneli, które muszą uwzględniać tak dużą liczbę opcji by być wystarczająco ogólne, że ich używanie na dłuższą metę wcale nie jest takie proste. W dodatku sama ogólność też jest iluzoryczna, o czym się boleśnie przekonałem.

Największą ogólność układu strony zawsze da możliwość edycji kodu źródłowego. Da się tak zaprojektować API, by było to zadanie proste, ale trzeba o tym zawczasu pomyśleć i je zrobić. Spełnianie marzeń zwykłych ludzi o tworzeniu stron okrężną drogą i zapominanie, że jednak mnóstwo witryn tworzą normalni programiści to kolejna wada przynosząca efekt odwrotny od zamierzonego. Zamiast czytelnego i elastycznego systemu jest skomplikowany i ograniczony.

Jakość kodu

Orientacja CMS-ów na zwykłych, prostych ludzi to miecz obosieczny również z innego powodu. Wiele CMS-ów ma dość stary rodowód, a ich twórcy wtedy również sami nie mieli zbyt dużych umiejętności programistycznych. Efekt to ogromna ilość archaicznego, źle napisanego kodu, który nie bardzo da się tak łatwo wymienić, by nie stracić ogromnej popularności wśród ludzi, którzy średnio się znają na aktualizowaniu oprogramowania i PHP. Kod Joomli nawet w wersji 1.5 to gigantyczny śmietnik bez większego ładu, który nawet nie bardzo jest jak poprawiać, gdyż autorzy kurczowo trzymają się muzealnego PHP4, a który przez to niebawem przestanie całkowicie działać na nowych wersjach. Już teraz przy próbie uruchamiania Joomli na PHP 5.3 jesteśmy atakowani mnóstwem komunikatów o nieprawidłowym użyciu jakiegoś elementu, które nie bardzo da się wyłączyć. A co będzie, gdy wejdzie PHP 6?

Druga problematyczna rzecz to API takich frameworków, które jest strasznie nieuporządkowane. Jeśli używane jest programowanie obiektowe, wiele elementów zaprojektowanych jest niezgodnie z jego regułami, a normą jest istnienie "klas do wszystkiego i do niczego". Mam wrażenie, że wiele rzeczy w Joomli powstawało na zasadzie "kurna, potrzebuję tutaj XXX... (klep klep klep) OK, jest! Zaraz to zcommituję i będzie to częścią nowej wersji". Weźmy dla przykładu klasę JPagination do generowania stronicowania. Aby dodać stronicowanie do jakiejś listy trzeba wykonać tyle rzeczy (na dodatek część z nich zaszyta jest w zupełnie innych klasach, które ze stronicowaniem nie powinny mieć nic wspólnego), że przy większej ilości kodu bardziej się opłaca siąść i napisać własną bibliotekę.W sumie jedyny plus, jaki dostrzegłem to poprawna implementacja wzorca MVC, czego nie można powiedzieć o większości świetnie napisanych frameworków... :)

Bezpieczeństwo

Dziury w zabezpieczeniach są bezpośrednim następstwem źle napisanego, nieprzemyślanego kodu, a próba ich łatania to syzyfowa praca. Załatamy sto dziur, dodamy nowy kod według tych samych śmietnikowych standardów, robi nam się 50 kolejnych. Wiele z zabezpieczeń powstało na zasadzie, że ktoś tam coś usłyszał o tym, po czym znalazło się to w kodzie bez specjalnego zrozumienia, czemu to w ogóle ma służyć. W efekcie kod korzysta z mnóstwa rzeczy niezgodne z ich przeznaczeniem, a to prowadzi do luk, które można wykorzystać do ataku.

Problemy rodzi również sama konfigurowalność i założenia projektowe. W Joomli mechanizm wybierania, jakie moduły w bocznych panelach mają towarzyszyć głównej treści opiera się na argumencie Itemid przekazywanym razem z adresem URL, który identyfikuje pozycję menu. Wpiszemy inny ID, mogą nam się wyświetlić zupełnie inne moduły. Co gorsza, powiązany z nim jest też system bezpieczeństwa. Jeśli coś przeoczymy, wejście do "niedostępnej dla gości" strony będzie sprowadzało się jedynie do usunięcia Itemid z adresu... moim zdaniem dobrze zaprojektowany system powinien uniemożliwiać takie zagrywki.

Niebezpieczne dodatki

Gwoździem do trumny są ostatecznie same dodatki. Wiele z nich zostało napisanych przez osoby, które po prostu nie potrafią jeszcze na tyle dobrze tworzyć oprogramowanie, by zapewnić mu odpowiednią jakość. Tragiczny kod to jedna z wielu konsekwencji. Przykładem takiego zupełnie nietrafionego rozwiązania jest popularny Community Builder, którego kod to jedna wielka rzeźnia reimplementująca połowę funkcjonalności Joomli, w tym m.in. rezygnująca z szablonów na rzecz zaszytego w kodzie HTML-a. Co z tego, że można sobie wyklikać pola społecznościowe, kiedy na dłuższą metę dodatek jest praktycznie nie do użycia i spersonalizowania? Ponadto uniemożliwia to współpracę dodatków, o której pisałem na początku.

Skoro już jesteśmy przy temacie dodatków, ze smutkiem należy przyznać, że w przypadku Joomli ich twórcy w wielu przypadkach łamią licencję GPL. O ile sprzedaż dodatków za pieniądze jest w porządku, o tyle dostarczanie zakodowanych źródeł czy blokowanie prób udostępniania tychże w innych miejscach już jest jak najbardziej karalne. Przypomnę, że Joomla rozprowadzana jest na licencji GNU General Public License, co oznacza, że oprogramowanie łączące się z nią i wymagające jej do współpracy w przypadku próby rozpowszechniania musi samo być udostępnione także na takiej licencji. Jeśli nawet kupię płatne rozszerzenie, mam prawo je udostępnić na swojej stronie za darmo innym bez względu na to, co w "licencji" napisał jego autor, ponieważ jego licencja jest w tym wypadku naruszeniem prawa.

Jak sobie poradziłem?

W przypadku mojego zadania poradziłem sobie w najbrutalniejszy sposób: napisałem coś w rodzaju mini-frameworka, który zintegrowałem z OPT (a co, jak już się bawić, to czemu mam sobie utrudniać życie pisaniem szablonów w PHP?) i wyposażyłem w podstawowe biblioteki do obsługi formularzy, których w Joomli brakuje, stronicowania oraz własną implementację MVC. To ostatnie było konieczne, gdyż Joomlowa bazowała na PHP4 i po prostu przy bardziej zaawansowanych operacjach zachowywała się niedeterministycznie, co czyniło korzystanie z niej wysoce ryzykownym. W efekcie powstał gigantyczny komponent, do którego trzeba było na dodatek dodać kilka modyfikacji właściwego kodu źródłowego CMS-a, aby załatać braki i idiotyzmy domyślnych mechanizmów.

Dobry CMS?

Stworzenie elastycznego i skalowalnego CMS-a to zadanie moim zdaniem trudniejsze od napisania frameworka. To nie jest jedynie napisanie kilkunastu bibliotek i ew. dodanie jakiegoś kreatora, a napisanie kilkudziesięciu bibliotek, paneli i jeszcze zbudowanie na tym odpowiednio zaprojektowanego systemu. Za zadanie to biorą się jednak przeważnie ludzie, którzy albo nie do końca wiedzą, co właściwie chcą stworzyć (czyt: posługują się wyłącznie stereotypami), albo nie mają wystarczających umiejętności, by na chwilę obecną coś takiego nie tylko napisać, ale i zaprojektować. Wystarczy spojrzeć na proporcje. Ile potrafisz wymienić porządnych frameworków? Prawdopodobnie co najmniej kilka. Ile potrafisz wymienić porządnych CMS-ów? Mi żaden nie przychodzi do głowy. Słyszałem jedynie o planach stworzenia nowego Extreme Fusion, którego twórcy chcą właśnie skierować się bardziej na programistę, a nie na zielonych użytkowników i porządnie go zaprojektować (według autorów, w projekcie ma być wykorzystany framework Kohana oraz Open Power Template 2). Niestety, na efekty przyjdzie nam prawdopodobnie jeszcze długo poczekać, gdyż dotąd całość nie wyszła jeszcze poza etap planów. Perspektywy są marne. Jeśli ktoś ma pomysł, jak stworzyć taki elastyczny CMS, będzie raczej wolał zachować go dla siebie i wykorzystywać do celów komercyjnych, niż ot tak go wypuścić.

Podsumowanie

Werdykt jest dość jednoznaczny. CMS-y takie, jak Joomla i Mambo nie nadają się do poważniejszych zastosowań z uwagi na ogromną liczbę niewłaściwych założeń, niską jakość kodu oraz błędy projektowe będące tam na porządku dziennym. Jeśli nie zamierzamy tworzyć strony z gatunku mydło i powidło, lepszym wyborem będzie napisanie jej z użyciem porządnego frameworka. Wprawdzie będziemy musieli napisać takie rzeczy, jak zarządzanie artykułami czy użytkownikami, ale na pewno zajmie to mniej czasu, niż naprawianie tego, co jest skopane w CMS-ie i reimplementowanie połowy jego funkcjonalności, by w ogóle móc dotrzeć do celu.

Powrót

Komentarze

Napisał karol w wtorek, 27 października 2009 o 18:13

a co byś powiedział na komercyjnego cms'a z odpowiednią licencją dla programistów, dobrym api, pełną dokumentacją, bezpłatnymi automatycznymi aktualizacjami i wsparciem technicznym z tym wyjątkiem że ścisły kod cms'a byłby zamknięty (co nie wykluczałoby jednak pisania doń własnych modułów, czy też rozszerzeń do już istniejących modułów)? I co jeśli mógłbyś to dostać za jakąś rozsądną cenę? Myślisz że taki model miałby szanse zaistnieć i się przyjąć na szerszą skalę?

Napisał Mike w środę, 28 października 2009 o 07:47

Tak sobie poradziłeś, że pewnie update do kolejnej wersji Joomli będzie trudniejszy niż powinienen (tak wnioskuje po tym jak opisałeś, że modyfikowałeś kod źródłowy).

Generalnie zgadzam się. Nigdy jednak nie miałem złudzeń, że takie skrypty pisane są dla odpowiedniej grupy użytkowników. Masz minimalną wiedzę techniczną, czas i chęci, potrzebujesz "jakąś" stronkę/portal/forum/blog... to sięgasz po tego typu skrypty.

Pozdr
M

Napisał Vokiel w środę, 28 października 2009 o 08:14

Ciekawy wpis, w pełni popieram.

CMS jest rozwiązaniem dla firm na utworzenie strony-wizytówki, gdzie przygotowanie sprowadza się do zainstalowania, podpięcia szablonu i uzupełnienia treści. Taki target wymaga niskiego zaawansowania systemu, co za tym idzie można go napisać relatywnie łatwo i poprawnie. CMS dający możliwość rozszerzania go w nieskończoność o nowe moduły, dodatki etc jest właściwie bardziej frameworkiem.

BTW masz jakieś doświadczenie z TYPO3 lub Drupalem? Jak oceniasz te systemy?

Napisał bigZbig w środę, 28 października 2009 o 15:42

Nie wiem kto na Tobie wymógł konieczność użycia joomli, ale jeśli to zrobił to zapewne po to aby móc w miarę prost sposób wzbogacać o gotowe już dodatki. Ciekaw jestem na ile wprowadzone przez Ciebie udoskonalenia ograniczyły stosowanie gotowych rozszerzeń?

Ja już jestem zbyt leniwy by przerabiać wszelkie joomle, oscommerce itp. potworki. Klienci zwykle chcą tylko drobnych zmian, które jak się później okazuje wymagają wielu godzin ślęczenia nad kodem i rozgryzania, zakręconej logiki autorów.

Napisał takieGadanie w piątek, 30 października 2009 o 09:22

Mam podobne doświadczenia. Zaczęło się od prostej stronki intranetowej dla firmy (głównie jakieś forum, regulaminy, ogłosszenia), więc najszybciej było skorzystać z CMSa (wybór padł na Xoops).
Z czasem szefom za bardzo się spodobało i zaczęły się zlecenia na bardziej biznesowe zastosowania. A tu już taki CMS czasem bardziej przeszkadza niż pomaga - za dużo uproszczeń. Aż prosiłoby się o skorzystanie z frameworka, ale już trochę za późno na budowanie wszystkiego od nowa.

PS. Nie śledzę forum Joomli, natomiast na forum Xoops były propozycje zastąpienia Smarty czymś innym i OPT wzbudziło niemałe zainteresowanie. Jednak zbyt wielkie jest przywiązanie do Smarty. Ale sam fakt, że ludzie coraz częściej zwracają uwagę na OPT nie tylko jako na ciekawostkę powinien być dla Autora pocieszający :)

Napisał cojack w niedzielę, 1 listopada 2009 o 21:57

A ja się nie zgodzę z tym że nie ma cms'a który jest na prawde godzien polecenia. Owszem jest, nazywa się drupal. A co do samego EF 5 które ma być na kohanie to jeszcze sobie Zyx poczekasz.

Napisał NIXin w środę, 4 listopada 2009 o 04:04

Co do CMSów to się zgadzam.
A jaka jest Twoja opinia na temat systemów blogowych, typu Wordpress?

Napisał Zyx w środę, 4 listopada 2009 o 07:02

Wordpress też jest średnio napisany, ale o dziwo od strony wykonania trzyma poziom. Zresztą widać, że właśnie jego tymczasowo zaadaptowałem do potrzeb angielskiej wersji Zyxist.com :). Dość poważna wada to jego powolność. Różnicę widać gołym okiem, jak się porówna wersję polską, gdzie podstrony pojawiają się błyskawicznie, i angielską, gdzie czekam zawsze 1-2 sekundy, zanim serwer zareaguje - nawet mimo cache'u.

Napisał ArekW w środę, 4 listopada 2009 o 19:09

Osobiście wykluczyłem korzystanie z gotowych CMSów i napisałem swój własny. Kod może nie w najlepszej jakości. Przypuszczam, że w gorszej niż Joomla, ale za to ma bardzo dużą zaletę: mianowicie jest go bardzo mało bo cały CMS to jakieś tysiąc linijek kodu PHP i dwieście linijek kodu JS:) I uwaga teraz gwóźdź programu: MÓJ SYSTEM NAWET DZIAŁA:D Jest chętniej wybierany niż Joomla mimo, że każdy musi sobie do niego samodzielnie tworzyć szablony, ale nikomu to nie sprawia większej trudności. Jak na razie jest to wersja zamknięta dla elitarnej grupy. Strony z niego generują się poniżej 1 sekundy,a panel admina jest intuicyjny i prosty. A jeżeli chodzi o główny temat - cóż jestem młodym programistą więc dla mnie na pierwszym miejscu jest to, żeby system w ogóle działał, a dopiero potem, żeby kod był super w kosmos estetyczny i pozbawiony wszelakich sierotek.

Napisał GDR! w piątek, 6 listopada 2009 o 16:49

Popieram w większości - chociaż po jakimś czasie da się jednak wpasować w ich styl i nie hackować rdzenia.

Jeśli chodzi o bezpieczeństwo - w zabawny sposób do niego podchodzą: http://gdr.geekhood.net/gdrwpl/09-06-03_bezpieczenstwo.html

Napisał cichy w niedzielę, 27 grudnia 2009 o 22:34

No cóż z większością wpisu nie sposób się nie zgodzić ale:
1. To ty jesteś programistą i jeżeli szef chce joomle i rozbudowany system np. profili i ogólnie ACL (co w joomli jak na razie leży) to powinieneś powiedzieć, że tego nie da się/ty nie zrobisz na joomli i zaporoponować wydajne rozwiązanie
2. Joomla nie taka straszna, w sumie ma przemyślaną logikę, w ogóle nie łapie o co Ci chodziło z JPagination
3. Jak już wspomniano, zrobiłeś z joomli jeszcze gorszy twór, bo pewnie ani to zaktualizować, ani to wydajne ani nic :)
4. Co do Itemid to bardzo prosty mechanizm, a poziom dostępu możesz zawsze przypisać w konkretnym artykule.
5. if we własnym komponencie to nie taki problem, zwłaszcza jak się wie co się pisze.
6. Poczekajmy na J1.6 może będzie lepiej :)
pozdrawiam

Napisał Zyx w niedzielę, 27 grudnia 2009 o 23:21

Nie wiesz, co jest źle z JPagination? A używałeś kiedyś jakiegokolwiek frameworka lub przyzwoitej obiektowej biblioteki stronicującej? W OPC sprawa jest bardzo prosta i przejrzysta. Wpisujesz trzy rzeczy: ilość elementów, ilość elementów na stronę, dekorator. Wyciągasz fragment zapytania SQL/obliczone zakresy oraz tablicę pozycji do wyrenderowania w OPT. Reszta to automat, a co więcej część z tego także może być skonfigurowana automatycznie. A w Joomli musimy na nowo klepać kupę kodu do pobierania tego z żądania, ręcznie przeprowadzać niektóre wyliczenia dotyczące limitu (sic! - czemu JPagination się tym nie może zająć?!) i aplikować tak pogmatwany przepływ sterowania, że szok (popatrz sobie, ile kroków jest w poradniku w dokumentacji), a szczytem wszystkiego jest strasznie syfny i praktycznie niekonfigurowalny generowany kod HTML.

Zgadzam się, że rezygnacja z dużej części joomlowych mechanizmów to brutalne i niezbyt eleganckie zagranie, ale co do wniosków praktycznych to mam odmienne zdanie:

1. Aktualizacja jest tak samo trudna, jak każda inna, nie licząc pamiętania o kilku łatkach.
2. Joomla + PHP5 + niekompetentni programiści = jeden wielki niedeterminizm i rosyjska ruletka. W moim kodzie przynajmniej nie występują takie kwiatki, że usuwam & z jednego miejsca, a tu nagle sypie się od tego zupełnie inna funkcja w zupełnie innym pliku. Te kawałki kodu Joomli, które operują na obiektach, nadają się w całości na śmietnik.
3. Mój kod ma doprezycowane działanie wielu mechanizmów, które w Joomli zbyto milczeniem i pozostawiono domysłom programistów lub na pastwę niedeterminizmu. M.in. w takich miejscach widać, że w Joomli logiki nie ma. Przemyślana logika to jest w takich frameworkach, jak ZF czy Symfony, a nie tu. Joomla jest lata świetlne za nimi.

Dlatego twierdzę, że mój kod działa lepiej i bardziej niezawodnie, niż joomlowy, a na pewno sprawia dużo mniej problemów i zachowuje się dużo bardziej racjonalnie. Czy wydajniejszy? Prawdę mówiąc nie testowałem tego, bo wtedy to było moje najmniejsze zmartwienie, ale też nie spodziewałbym się tragedii, ponieważ nie ma tam ani rozbudowanych procedur, ani skomplikowanych algorytmów. W dodatku napisany jest on zgodnie z obecnymi kanonami programowania w PHP5 i tak niezależy od Joomli, jak to tylko możliwe, więc akurat o przyszłe działanie tego kodu po aktualizacjach boję się najmniej.

Wiem, że Itemid jest bardzo prostym mechanizmem i właśnie w tym leży problem, bo jest prosty i wyjątkowo nieprzemyślany. Nie zawsze masz artykuł, nie zawsze masz konkretną pozycję menu, przepisywanie Itemid to czarna magia, której dokumentacja nie wyjaśnia (pewnie, po co?) i jesteś w kropce. A powiązanie z tym mechanizmu bezpieczeństwa to jakaś kpina.

Napisał cichy w niedzielę, 27 grudnia 2009 o 23:54

żeby stworzyć obiekt JPagination wystarczą 3 rzeczy:
1. liczba wszystkich rekordów
2. limit (czyli ile rekordów na stronę)
3. limitstart (czyli de facto pierwszy argument LIMIT w zapytaniu SQL)
później wystarczy wywołać metodę getListFooter() obiektu JPagination i to wszystko. Co do konfiguracji to też nie widzę problemu, możesz całkowicie zmienić sposób wyświetlania linków tworząc plik pagination.php w katalogu templatki.
Wydaje mi się że joomla może pretendować do dobrego systemu CMS dla prostych serwisów, jeżeli jednak chcesz zrobić coś średnio dużego to tutaj już trzeba się postarać i najlepiej wszystko pisać samemu, nie lubię takich serwisów gdzie jest zlepek bóg jeden raczy wiedzieć jakich dodatków, a później są bluzgi na sam CMS :) oczywiście nic nigdy nie zastąpi skrojonego na miarę kodu który samemu się napisze.
Pozdrawiam

Napisał elektrrrus w niedzielę, 11 kwietnia 2010 o 14:14

Ja się nie zgodzę z tym, że nie ma żadnego porządnego cms-a. Jest, nazywa się Drupal. Nie jest napisany obiektowo, i nie ma pięknej implementacji różnych z tym związanych rzeczy. Ale to o czym piszesz - integracja pomiędzy komponentami jest rozwiązana wręcz idealnie dzięki tzw. hook-om. Tak samo bezpieczeństwo - stoi na bardzo wysokim poziomie dzięki skutecznemu wymuszaniu stosowania form api. W miare ok działa szablonowanie - nie jest to osobny system, tylko kila pomysłów autorów i ładne opakowanie. Problemów jednak z tym nie ma, przynajmniej ja się nie spotkałem jeszcze, a budowałem już kilka mocno rozbudowanych rzeczy. Najlepsze jest to, że jeśli coś co jest w bazie cms-a nam nie pasuje, można to legalnie zmienić, nie robiąc jednocześnie śmietnika z całości. Na joomli sam wieszam psy - miałem do niej 2 podejścia i za każdym razem skończyły sie stosem niecuzudrowalnych wyrazów.

Pamiętaj, dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Skomentuj

NickInformacja
E-mailNa wypadek potrzeby kontaktu z autorem (niepublikowany)
BlogNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wikiKomentarze są moderowane - przeczytaj zasady!

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2010 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia