Kompleksowe tworzenie stron internetowych, webdesign, aplikacje CMS

PostNuke, system zarządzania treścią. Część 2

Artykuł został umieszczony w PHP Solutions, numer 04/2007.
Artykuł archiwalny - od 2008 roku projekt PostNuke został zakończony. Na jego bazie tworzona jest Zikula CMS.

Autor: Michał Gacki
Zobacz też: Część 1

Jak widać nasz PostNuke nieco się zmienił.

Następną sprawą jest rejestracja użytkowników – trzeba ją skonfigurować, by była dobra wg nas i przyjazna użytkownikom (Rysunek 8.). Od razu w oczy rzuca się ograniczenie wiekowe – czy przyda nam się to np. na stronę hobbystyczną? Raczej nie, chyba że tworzymy jakąś stronę, na którą legalny dostęp powinni mieć tylko pełnoletni. Druga sprawa – przy podawaniu danych wybieramy tylko login i podajemy adres e–mail – na ten adres zostaje wysłane wygenerowane hasło, które po zalogowaniu możemy zmienić. Nic nie stoi na przeszkodzie, by umożliwić od razu ustawianie hasła oraz dodanie dodatkowych pól, takich jak imię, nazwisko, czy też identyfikatory komunikatorów. W tym celu wchodzimy w panelu administracyjnym w moduł Użytkownicy, wybieramy “konfiguracja rejestracji użytkowników”. Widoczne opcje:


• Każdy e–mail może zostać użyty tylko raz – jeśli ustawimy opcję na tak, nie będzie możliwości ponownego zarejestrowania się z tym samym adresem e–mail
• Pokazuj opcjonalne pola – pokazuje pola z dodatkowymi informacjami, które możemy dowolnie sobie zdefiniować pod linkiem “Dynamiczne dane użytkownika” – jest to bardzo duża zaleta tego systemu
• Zezwól na rejestrację nowych użytkowników – możemy wyłączyć tutaj rejestrację, jeśli np. do serwisu ma mieć dostęp tylko administrator i rezygnujemy z logowania użytkowników, gdyż jest ono nam niepotrzebne
• Weryfikuj adres e–mail podczas rejestracji – jeśli ustawimy tę opcję na nie, będzie można podać od razu swoje hasło przy rejestracji
• Powiadomienie o nowych użytkownikach – można podać tam adres e–mail, na który będą przychodzić maila powiadamiające nas o nowych rejestracjach
• Zarezerwowane nazwy użytkowników – oddzielamy tam przecinkiem nicki użytkowników, których nie będzie można użyć podczas rejestracji
• Pytanie i odpowiedź antyspamowa – wpisujemy pytanie, na które trzeba poprawnie odpowiedzieć, by się zarejestrować. Ma to na celu uniemożliwienie rejestracji botom spamujących np. komentarze. Przykładowo: pytanie – jak ma na nazwisko prezydent Polski, odpowiedź – Kaczyński. Jeśli użytkownik wpisze coś innego (czyli zazwyczaj bot będzie próbował podać jakieś dane), system odmówi mu rejestracji
• Zakazane adresy e–mail i klienci HTTP – w tych polach można wypisać po przecinku dane domeny e–mail oraz adresy klientów HTTP, którzy nie będą mogli się zarejestrować
• Minimalny wiek – wiek, który będzie pojawiał się w informacji o ograniczeniu wiekowym przy rejestracji. Jeśli ustawimy go na 0, informacja ta nie będzie się już pojawiać
• Minimalna długość hasła użytkownika
• Domeny IDN – zezwala na podanie adresów domen ze znakami narodowymi
• Logowanie/wylogowywanie zgodne z WCAG – aktywacja tej opcji spowoduje, że przekierowania po zalogowaniu nie będą odbywać się na stronie niezgodnej ze standardami WCAG. Jest to opcja zbędna, gdyż nikt nie sprawdza poprawności stron podczas przekierowań.

Standardowe moduły nie koniecznie muszą służyć w naszym serwisie – nie zawsze nas zadowolą, a może i nawet będą miały dla naszego serwisu zbyt dużo funkcji. Krótka charakterystyka powinna dać nam podstawowe rozeznanie w tych modułach. Do panelu zarządzania modułami wchodzimy klikając na ikonkę Moduły. Aby dodać nowy moduł wgrywamy jego katalog do katalogu modules (zawsze tak, aby w modules znajdowała się nazwa modułu, np. TagIt, a w tym folderze pliki modułu), klikamy w administracji modułami Regeneruj, po czym odszukujemy danego modułu (bardzo łatwo wybierając pokazywanie modułów niezainicjowanych lub pod daną literką). Aby moduł działał należy kliknąć inicjalizuj– w tym momencie dodawane są nowe tabele do bazy danych. Na koniec należy kliknąć już tylko na link aktywuj i moduł jest gotowy do użytku. Do każdego modułu możemy dodawać wtyczki (link Wtyczki). Możemy także nazywać moduły jak chcemy – np. Downloads wcale nie musi się tak nazwywać, po kliknięciu na Edytuj możemy ustawić nową nazwę na np. Pobieralnia, wtedy adres modułu będzie wyglądał tak: index. php?name=Pobieralnia. Jeśli nie lubimy przechodzić przez strony modułów, możemy ustawić liczbę wyświetlanych modułów na liście np. na 100 pod linkiem modyfikuj konfigurację. Lista i krótki opis standardowych modułów pełnej paczki PostNuke 0.764 PL:

• AddStory – odpowiada za dodawanie artykułów/newsów i ich kategorii
• Admin – moduł panelu administracyjnego
• Admin_Messages – moduł komunikatów, które mogą być widoczne dla wszystkich, tylko dla gości lub tylko dla adminów. Komunikaty można wstawić do bloku menu
• Autolinks – ciekawy moduł umożliwiający podlinkowanie danych słów kluczowych, np. chcemy skierować wszystkie słowa jajko występujące na stronie do danej podstrony
• AvantGo – moduł dla wersji mobilnej strony, praktycznie bez grafiki i zbędnych obiektów, bardzo rzadko używany
• Banners – moduł służący do wyświetlania bannerów na stronie, posiada funkcje dodawania klientów, zliczania kliknięć bannerów danego klienta, ustawiania limitu odsłon. Ponad to można osobne typy bannerów wyświetlać w osobnych blokach statycznie lub na zasadzie rotatora
• Blocks – odpowiada za zarządzanie blokami, pozwala przenosić bloki menu, tworzyć nowe, edytować je i usuwać
• Censor – odpowiada za filtrację niecenzuralnych słów, które możemy sami dodawać
• Comments – wtyczka umożliwiająca komentowanie newsów i ankiet. Standardowo jej układ jest bardzo nieprzejrzysty, dlatego warto zmienić tę wtyczkę na CommentsEx (ulepszona wersja tego samego modułu) lub Ez- Comments (całkowicie inny moduł, posiada możliwość importu starych komentarzy)
• Credits – wyświetla informacje o licencji PostNuke oraz zainstalowanych modułów
• Downloads – odpowiada za pliki do pobrania, ma możliwość grupowania plików w kategorie, zlicza kliknięcia, pozwala na ocenianie plików itp.
• Ephemerids – prosty moduł kalendarza
• Example – testowy moduł stworzony tylko po to, by programiści mogli się na nim wzorować tworząc swoje moduły
• FAQ – odpowiada za rozbudowany skrypt FAQ – najczęściej zadawanych pytań
• Groups – odpowiada za grupy użytkowników (administratorzy, moderatorzy, użytkownicy, zbanowani itp.), pozwala dodawać swoje grupy, a także usuwać istniejące
• Header_Footer – moduł generujący header strony oraz jej stopkę w podstawowym systemie szablonów, inne systemy, takie jak np. AutoTheme, już z niego nie korzystają
• legal – zawiera informacje o polityce prywatności, warunkach korzystania z serwisu itp., które można edytować
• LostPassword – odpowiada za przypomnienie hasła
• Mailer – moduł obsługuje całą pocztę, wszystkie maile wysyłane przez stronę. Po jego zdeaktywowaniu nie przychodzą np. maile z hasłem do logowania
• MailUsers – bardzo prosty moduł subskrypcji (bez możliwości wyboru czy użytkownik chce dostawać maile, czy nie)
• Members_List – podstawowa lista zarejestrowanych użytkowników, zawiera też rozbudowaną listę użytkowników online
• Messages – moduł prywatnych wiadomości (używany także w dodatkowych modułach forum)
• Modules – odpowiada za zarządzanie wszystkimi modułami
• Multisites – pozwala na łączenie kilku stron w jedną, tj. różnych stron korzystających z tego samego skryptu i bazy danych, nawet na różnych domenach
• News – moduł odpowiadający za newsy i artykuły
• NewUser – odpowiada za rejestrację użytkowników
• Permissions – rozbudowany i z początku trudny w obsłudze moduł uprawnień (czyli zezwoleń co może użytkownik, co gość itp.)
• pnRender – wsparcie Smarty dla PostNuke, korzysta z niego także Xanthia (można rzec, że Xanthia i pnRender tworzą podstawowy system szablonów PN, dlatego te moduły powinny być razem aktywne)
• pn_bbcode – wtyczka umożliwiająca używanie BBCode
• pn_bbsmile – wtyczka umożliwiająca używanie emotoikon
• Polls – moduł ankiet
• Quotes – wyświetla cytaty
• Ratings – wtyczka do oceniania, np. newsów, recenzji
• Recommend_Us – moduł na zasadzie “poleć nas”
• Referers – moduł pełniący rolę statystyki polecających stronę adresów
• Reviews – odpowiada za recenzje, jest domyślnie zintegrowany z wtyczką Ratings
• RSS – kanał RSS
• Search – wyszukiwarka, ma możliwość prostego podpięcia wtyczek z nowo zainstalowanych modułów
• Sections – sekcje, rozbudowany i prosty moduł artykułów z większym poziomem zagnieżdżenia
• Settings – ustawienia strony
• Sniffer – moduł sprawdzający identyfikator przeglądarki oraz inne dane o użytkowniku
• Stats – prosty moduł zapisujące statystyki odsłon strony, niestety często błędnie
• Submit_News – przydatny moduł umożliwiający pisanie newsów/artykułów przez użytkowników, które później muszą być zaakceptowane przez administratora
• Topics – moduł pełni rolę kategorii dla większości modułów, innymi słowy pozwala na grupowanie publikacji z różnych modułów w jeden temat, któremu można przypisać zdjęcie
• Top_List – pokazuje listę najczęściej czytanych tekstów, komentowanych artykułów, pobieranych plików itp.
• typetool – standardowy edytor WYSIWYG
• User – zawiera funkcje użytkownika (wylogowywanie itp.)
Webdesign – moduł służący do edycji szablonów
• Web_Links – prosty katalog stron z podziałem na kategorie
• Wiki – wtyczka umożliwiająca formatowanie tekstu na takiej zasadzie jak w Wikipedii
• Xanthia – podstawowy system szablonów
• Your_Account – moduł twoje konto

Wersja PostNuke Lite 0.764 ma tylko 22 podstawowe moduły, co przekłada się na optymalność skryptu. Dodatkowo uciecha dla “grzebaczy” – instalujemy po kolei wszystkie moduły niezwiązane z jądrem, które nam pasują. Jak widać każda część systemu jest także osobnym modułem, dlatego moduły często są porównywane do klocków, z których składamy stronę na planszy, czyli na silniku CMSa. Co jeszcze warto wiedzieć ogółem o PostNuke? Jego system wielojęzykowości pozwala na dodawanie osobnych newsów, podstron, bloków itp. dla każdego z języków, dlatego też przy zmianie języka automatycznie może zmienić się nam menu oraz wyświetlić się może całkiem inna lista newsów. PostNuke ma także zaawansowany, aczkolwiek nieintuicyjny, system uprawnień. To, czego nie ma większość darmowych CMSów, tutaj jest i sprawuje się bardzo dobrze. Możemy praktycznie określić dowolną regułę uprawnień dla osobnego użytkownika lub dla całej grupy (to jest bardziej zalecane, mniej obciąża serwer), dzięki czemu Alfred będzie mógł dodawać pliki do downloadu, a Henio nawet nie będzie mógł tam wejść, za to grupa Koledzy Henia będzie administrować downloadem. Należy tu pamiętać o hierarchii uprawnień – na początku dodajemy zezwolenia, później zakazy, na początku grupy o większych uprawnieniach (tak jak np. admini), później dopiero użytkownicy i goście (niezalogowani). Reguły można przesuwać w górę i w dół, w zależności od ich ważności. Pole komponent oznacza część serwisu, której dotyczy uprawnienie, .* – zastępuje wszystko (czyli w tym przypadku tyczy się całego serwisu), ale gdy wpiszemy nazwę modułu z podwójnym dwukropkiem na końcu, np. News::, reguła będzie się tyczyła tylko modułu News. Instancja jest zależna od danego modułu – schemat uprawnień każdego modułu powinien być dostępny do sprawdzenia w pliku version.php lub pnversion.php (zależy czy to moduł starej, czy nowej generacji) znajdującego się w katalogu modułu. W przypadku bloków instancja wygląda tak: Nazwa bloku:Dana pozycja: . W instancji można grupować kilka pozycji w tablice używając nawiasu i znaku |, który rozdziela poszczególne pozycje. Zatem uprawnienie Menu główne:(Moje konto|Wyloguj|Prześlij nowiny): dotyczy tylko linków Moje konto, Wyloguj i Prześlij nowiny w bloku menu o nazwie Menu główne. Reguła ta jest ustawiona dla niezalogowanych, a poziom uprawnień to “żaden”, więc niezalogowani nie będą widzieć tych linków. Ciąg .* zastępuje wszystkie instancje. Sytuacja z uprawnieniami użytkowników wygląda identycznie, z tym wyjątkiem, że zamiast grupy wybieramy użytkownika. Skuteczność poziomu uprawnień także zależy od modułu, jednakże poziom Administracja zawsze daje “pełną władzę”.

Uprawnienia to bardzo duży plus tego systemu CMS, dzięki nim jak widać można uzależnić wyświetlanie nawet prostych linków w menu! Tak samo jedno uprawnienie może działać na konkretny plik w pobieralni, lub na wszystkie. Aby uniemożliwić pobieranie jednego pliku Antkowi, wstawiamy uprawnienie:

Antek | Downloads:: | ::27 | Żaden

gdzie 27 to ID pliku. Zamiast ID można przed podwójnym dwukropkiem wstawić nazwę danego pliku – efekt będzie taki sam. Ważną rzeczą są także bloki – odpowiadają one za generowanie całego menu strony. Domyślne pozycje bloków to lewo, prawo i środek – każdy blok można wstawić do odpowiedniej pozycji, a każdą pozycję wstawić w odpowiednie miejsce w szablonie skórki. Jeśli te 3 pozycje to dla nas za mało, zawsze możemy się ratować dodając sobie tzn. bloki area, których mogą być nawet setki. Ciekawą opcją jest to, że bloków nie trzeba usuwać – można je zdeaktywować i w dowolnym czasie ponownie zaktywować. Pod linkiem zmień konfigurację możemy wyłączyć standardową możliwość zwijania bloków – tj. obrazek minusa obok nazwy bloku, który pozwala go ukryć pozostawiając sam tytuł. Strzałki w kolumnie “porządek” pozwalają na prostą zmianę kolejności wyświetlania bloków. Bloki nie są jednego typu, standardowo mamy do wyboru różne rodzaje bloków, takie jak np. blok menu, blok HTML, blok PHP, blok ankiety, blok wyświetlający ostatnio dodane newsy, ale możemy także doinstalować bloki (np. pokazujące użytkowników online). Jeśli doinstalowany moduł ma podkatalog pnblocks, możemy być pewni, że na liście wyboru bloków ukażą się nowe pozycje tego modułu. Dodajmy zatem testowy blok. Klikamy na Nowy blok. Jeśli pokaże się pusta strona będzie to oznaczać, że jeden lub więcej modułów ma niepoprawną składnię kodu bloków, dlatego metodą prób i błędów trzeba będzie ten moduł odnaleźć (najlepiej usuwając podkatalogi pnblocks z nowo zainstalowanych modułów). Niech nasz blok będzie typu HTML, abyśmy mogli wstawić dowolny kod HTML. Przy dodawaniu bloku możemy ustawić, czy ma być on zwinięty i w jakiej postaci ma się domyślnie pokazywać. Możemy także dodać różne bloki dla różnych języków. Z listy rozwijalnej Blok wybieramy interesujący nas blok. Wszystkie pozycje poprzedzone tekstem Core należą do jądra CMSa. Standardowo pozycje na liście wyglądają tak:

• Core/Pokazywanie banerów – pozwala na wyświetlenie jednego banneru lub wszystkich bannerów w rotatorze z modułu Banners
• Core/Dzisiejszy najważniejszy artykuł – pokazuje link do artykułu, który w dniu dzisiejszym był czytany największą ilość razy
• Core/Blok linku Button – pozwala na proste dodanie popularnych buttonów na stronę, standardowo o rozmiarze 88x31
• Core/Menu kategorii – pokazuje menu wyboru kategorii w postaci listy
• Core/Simple File Include – wczytuje pliku z podanego przez nas adresu
• Core/FXP Currency Exchange – przelicznik walut
• Core/HTML – blok pozwala na wstawienie dowolnego tekstu z możliwością formatowania go przez HTML
• Core/Logowanie użytkownika – jak sama nazwa wskazuje pokazuje formularz logowania użytkowników na stronie
• Core/Menu generowane – generator menu w stylu drzewka lub listy linków
• Core/Online – pokazuje ilość gości i użytkowników online oraz informacje i prywatnych wiadomościach
• Core/Starsze artykuły – wyświetla newsy, które nie pokazują się już na stronie głównej oraz starsze dodane artykuły w serwisie według naszych kryteriów
• Core/Skrypt PHP – pozwala na wstawienie dowolnego kodu PHP
• Core/Prezentacja ankiety – wyświetla ankietę – najnowszą lub wybraną przez nas z istniejących
• Core/Linki relacyjne artykułu – wyświetla linki powiązane z danym artykułem
• Core/Stopka z nowinami RSS – pozwala na wyświetlenie kanału RSS ze ścieżki do pliku źródła RSS
• Core/RSS Extra – funkcjonalność taka sama jak powyżej z tym wyjątkiem, że możemy wybrać jeden z istniejących już kanałów na liście
• Core/Box Szukaj – pokazuje wyszukiwarkę
• Core/Tytuły artykułów – wyświetla ostatnio dodane artykuły, możemy zdefiniować ich ilość, kategorię oraz temat
• Core/Pełny tekst – wyświetla podany przez nas tekst
• Core/Języki – pokazuje listę wyboru języka
• Core/Menu tematów – pokazuje listę wyboru skórki
• Core/Box zwykłego użytkownika – pokazuje blok użytkownika (każdy użytkownik domyślnie może w panelu swojego konta stworzyć sobie blok np. z notatkami)
• Core/Ostatnie linki Web – wyświetla ostatnio dodane linki do katalogu
• Admin/Show admin categories and modules – wyświetla blok administratora, rozwiązanie podobne jak w CMSie Xaraya
• Admin_Messages/Show Admin Messages – wyświetla komunikaty modułu Admin_Messages
• pnRender/custom pnRender block – blok, w którym możemy używać znaczników pnRender (Smarty)
• pnRender/pnRender Loginblock – wyświetla blok logowania z szablonu pnRender
• Xanthia/Logo Block for Xanthia Themes – blok z logo skórek Xanthia
• Xanthia/Display module output in a block – pozwala na wyświetlenie modułu zgodnego z Xanthia w bloku

Po wybraniu Aktulizuj możemy wstawić treść do wybranego bloku. Jak widać nie sprawia też problemu aktulizacja danych z zewnętrznych źródeł co jakiś czas, np. w przypadku bloku RSS nie musimy martwić się o aktulizację linków. PostNuke oferuje nam edycję strony generatora standardowego bloku menu z linkami do danych modułów bez konieczności zmian w szablonie na naszym serwerze! Wybierzmy edycję naszego bloku Menu główne, który jest typu Core/Menu. Edycja jest bardzo prosta – możemy m.in. zmienić wyświetlanie menu ze standardowego na “ostylowaną” listę, która często używana jest do wyświetlania menu w postaci drzewka. Do każdego z linków możemy dodać opis, który będzie widoczny w dymku po najechaniu myszką na dany link. Jeśli dodamy pozycję z tytułem nie podając URL, zostanie wyświetlony tylko tekst w tytule. Usuwanie i dodawanie linków odbywa się poprzez zaznaczenie odpowiedniego checkboxa w dwóch ostatnich kolumnach. Nie musimy także męczyć się z wpisywaniem linków do modułów – w polu URL wystarczy wpisać nazwę modułu w kwadratowym nawiasie, a system sam wstawi odpowiedni link. Dla testu zmieńmy pozycję Tematy na Google z URL http://www.google.pl, a w pustym polu pod pozycją Wyloguj dodajmy sam tytuł Dodatkowe.

Dodatkowe moduły, ich dostosowanie i optymalizacja

Zainstalujmy teraz nowy moduł. Niech to będzie dodatkowy system szablonów AutoTheme, pozwalający na uruchamianie dużo prościej konstruowanych skórek. Moduł ten zawieraj wtyczkę krótkich linków do PostNuke (temat przyjaznych linków wraz z zastosowaniem AutoTheme na CMSach opisany był w PHP Solutions Nr 6/2006 [17]) oraz jest dużo prostrzy do nauki tworzenia skórek. Jest to dużo popularniejszy system szablonów, pomimo że nie znajduje się on w standardowej paczce PostNuke. Instalujemy AutoTheme tak jak każdy inny moduł z tym wyjątkiem, że nadpisujemy także pliki z folderu Blocks. Ma to na celu umożliwienie używania bloków area AT w standardowym module bloków. Modułem tym zajmiemy się później tworząc własny szablon. Jeśli mamy zamiar instalować dużo modułów tworząc wielką stronę o ogromnej ilości zróżnicowanej treści, warto zainteresować się modułem Pagesetter. Jest to chyba największy moduł jaki kiedykolwiek powstał na PN, a przy okazji jest nowoczesny i dobrze napisany. Mówiąc w skrócie można nim zrobić wszystko. Administrator post–nuke.pl mówi nawet żartobliwie: dla mnie to PostNuke jest dodatkiem do Pagesettera, a nie odwrotnie. Moduł ten pozwala na tworzenie własnych typów publikacji, definiowania w nich swoich pól, nie musimy trzymać się jakiegoś schematu – sami decydujemy jak dana publikacja ma wyglądać! Łatwo jest zrobić tym sposobem system newsów, artykułów, pobieralnię plików, katalog stron, czy nawet rozbudowaną galerię zdjęć. Najlepsze w tym wszystkim jest to, że sami ustalamy szablony do każdej publikacji, wybieramy odpowiadające nam plugin do szablonów i mamy pełną kontrolę nad tym co robimy, gdyż Pagesetter nie narzuca żadnego kodu, ani rozwiązań, jak to bywa w innych modułach. Jego system kategorii pozwala na nieskończenie głębokie zagnieżdżanie podkategorii. Jedynie jego trudność obsługi może przeszkadzać początkującym w tym module, dlatego na początek przygody z PN nie jest on polecany. Nasze moduły możemy także usprawnić. Niestety temu CMSowi daleko do ideału, jest napisany nieoptymalnie, a starsze moduły są nieprzemyślane. Spójrzmy chociażby na kwestię ilości newsów na stronie głównej – możemy wybrać z listy 5, 10, 15, 20 i więcej. Co jednak, jeśli chcemy, by ilość newsów wynosiła 7? A może 13? Zawsze można modyfikować konfigurację w bazie danych, ale gdzie tu wygodne rozwiązanie? Takie rzeczy naszczęście nawet początkujący programista może ulepszyć sam! Nie usprawiedliwia to jednak tego, że przez tyle lat rozwoju PostNuke nie pomyślano o zwykłym polu tekstowym z wpisywaniem ilości newsów. Aby dokonać takiej modyfikacji wchodzimy w folder modułu Settings i otwieramy w dowolnym edytorze plik admin.php. Odnajdujemy linię 300 i jej okolice (Listing 1.). na taki:

Listing 1. Nieoptymalny kod w pliku admin.php

.'<select name="xstoryhome" size="1">'
."<option value=\"5\"".$sel_storyhome['5'].">5</option>\n"
."<option value=\"10\"".$sel_storyhome['10'].">10</option>\n"
."<option value=\"15\"".$sel_storyhome['15'].">15</option>\n"
."<option value=\"20\"".$sel_storyhome['20'].">20</option>\n"
."<option value=\"25\"".$sel_storyhome['25'].">25</option>\n"
."<option value=\"30\"".$sel_storyhome['30'].">30</option>\n"
."</select>"

i zamieniamy ten typowo nieestetyczny i starego typu kod, na którym absolutnie nie należy się wzorować, na taki:

.'<input name="xstoryhome" />'

Minusem tego rozwiązania jest to, że przy każdej edycji ustawień należy podać tam jakąś liczbę, aby wszystko poprawnie się zapisało. Ambitni programiści mogą tę modyfikację wzbogacić o pobieranie aktualnej ilości newsów do value tego pola input. Spójrzmy także na newsy – domyślnie układ linków Czytaj więcej z ikonką drukowania i polecania w każdej skórce jest taki sam. W dodatku PostNuke w nawiasie pokazuje ilość bajtów tekstu, wstawionego w tekst rozszerzony artykułu (tekst rozszerzony widoczny jest tylko po wejściu do artykułu). Czy jakiegoś użytkownika interesuje informacja o bajtach? A może chcemy usunąć ikonkę polecania artykułu bez pozbywania się modułu Poleć nas? Wystarczy nieco zmodyfikować główne funkcje newsów, które znajdują się w katalogu modules/News w pliku funcs.php. Co m.in. możemy zmienić? Linia 208, zmiana tytułu newsa/artykułu:

$info['catandtitle'] = $info['cattitle'].": ".$info['title'];

Jeśli wybraliśmy kategorię dla newsa, jej nazwa będzie poprzedzać jego tytuł przed dwukropkiem. Możemy całkowicie wyrzucić pokazywanie kategorii w tytule lub dodać ją np. w nawiasie:

$info['catandtitle'] = $info['title']. ' ('.$info['cattitle'].')';

Linia 417:

$preformat['catandtitle'] = "$preformat[category]: $preformat[title]";

zamieniamy na:

$preformat['catandtitle'] = $preformat[title].' ('.$preformat[category].')';

Linia 312, pozbywanie się ilości bajtów:

$bytesmorelink = "$bytesmore "._BYTESMORE;

zamieniamy na:

$bytesmorelink = '';

Linia 412:

$preformat['more'] .= "$preformat[readmore] ($preformat[bytesmore]) ";

zamieniamy na:

$preformat['more'] .= $preformat[readmore];

Linie 333–341, zmiana schematu wyświetlania ilości komentarzyDomyślnie wyświetlana ilość komentarzy w przypadku jednego komentarza to 1 komentarz, a w większej ilości ilość komentarzy. Jeśli komentarzy jest np. 2, to mimo tego widzimy tekst 2 komentarzy zamiast 2 komentarze. Można by dodać dodatkowy warunek do kodu, ale prościej będzie po prostu wyświetlać ilość komentarzy po dwukropku, np.: komentarzy: 27, komentarzy: 1. W tym celu modyfikujemy warunek (Listing 2.).

Listing 2. Warunek do modyfikacji

if ($info['withcomm'] == 0) {
if ($info['comments'] == 0) {$comment = _COMMENTSQ;
}else if ($info['comments'] == 1) {
$comment = '1 ' . _COMMENT;
}else { $comment = "$info[comments] "._COMMENTS; }
}

Od teraz nasze newsy będą wyglądały ciekawiej. Nic nie stoi na przeszkodzie, by plik ten całkowicie przerobić pod swoją stronę – wystarczy znajomość podstaw PHP. Standardowy system komentarzy nie zadowala pewnie wielu użytkowników. Wyświetla komentarze w postaci drzewka, jest nieintuicyjny i nie posiada szybkiej odpowiedzi (musimy klikać na przycisk Wyślij komentarz lub linki Odpowiedz na to). Ratować możemy się alternatywami. Dostępne są modyfikacje standardowego modułu – prosta modyfikacja Comments mod by Izydor usprawniające komentarze jak i ich layout oraz rozbudowana wersja NS–Comments Ex, która pomimo tego, że nie została wydana w nowej wersji finalnej, pozbawiła modułu komentarzy zbędnych pól, a ponad to wyświetla avatary użytkowników przy komentarzach, ma jednolity layout oraz opcję szybkiej odpowiedzi pod komentarzami. Możemy jednak wybrać alternatywny moduł pod nazwą EzComments – pełni on rolę wtyczki, którą możemy zaktywować do dowolnego modułu. Nie ma on jednak możliwości zagnieżdżania komentarzy. Standardowo pozwala na import komentarzy z modułu Comments (który przy użyciu Ez- Comments należy wyłączyć). Wszystkie moduły są do pobrania na oficjalnej stronie PostNuke Polska. Co z optymalizacją? Niestety trzeba to odważnie powiedzieć – PostNuke nie ma dobrze zoptymalizowanego kodu, a także przez lata nie zmieniło się wiele w kierunku jego rozwiązań. Spójrzmy np. na bazy danych – ten CMS używa klasy AdoDB do obsługi wielu baz danych, pomimo że pozwala na korzystanie jedynie z MySQL. AdoDB to dość stara i wolna klasa, więc nie powinna być tutaj używana. Kolejna sprawa to kod – dotychczas kod całego PN nie wyglądał zbyt ciekawie, był pisany na zasadzie kod w kodzie – aby zedytować layout danego modułu trzeba było modyfikować jego kod w funkcjach echo porozrzucanych śmiesznie po plikach. Obecnie 90% PostNuke korzysta już z pnRender, dlatego moduły mają osobne szablony tworzone zgodnie ze Smarty. W większości przypadków rozwiązanie te jeszcze bardziej spowalnia PostNuke, ale za to zyskujemy czysty kod. Ratować możemy się świetnym systemem cachowania (możliwość włączenia w administracji Xanthia i pnRender) oraz buforowania. Włączenie tych opcji daje wspaniałe rezultaty. Niestety także zapytania do bazy danych nieraz nie są optymalizowane. Dobrym przykładem jest pobieranie wszystkich newsów tylko po to, by je policzyć – a na tej podstawie wyświetlany jest pager na stronie głównej. Jeśli korzystamy z pagera i mamy dużo odwiedzin, warto pager wyłączyć lub zastąpić ten moduł jakimś alternatywnym. Nie zawsze trzeba przerzucać się na coraz lepsze serwery gdy strona się rozrasta – musimy pamiętać o zaawansowanych funkcjach szablonów, używaniu tylko nowszych modułów i używaniu jak najmniejszej ilości modułów. Wiele porad i tricków na temat optymalizacji tego CMSa można znaleźć także na jego oficialnym polskim forum – większość stron da się prosto odciążyć.

Tworzenie własnego modułu

Bardziej zaawansowani programiści PHP mogą pokusić się o stworzenie własnego modułu... Zapraszam do trzeciej części mojego artykułu.

Autor: Michał Gacki

Przeczytaj też: PostNuke, system zarządzania treścią. Część 3;PostNuke, system zarządzania treścią. Część 1

Zaufali nam:

i wielu więcej

Nowości »

Postanowiliśmy umieścić poradniki dotyczące tworzenia stron WWW, które opublikowaliśmy kilka lat temu na łamach magazynu PHP Solutions. Są to artykuły prasowe, które od dziś będzie można przeczytać online i zastosować w praktyce. Jeśli jesteś początkującym programistą lub chcesz zacząć swoją przygodę z programowaniem, zapraszamy do lektury. więcej nowości >