Kompleksowe tworzenie stron internetowych, webdesign, aplikacje CMS

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

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; Część 2

Tworzenie własnego modułu

Na początek można posłużyć się modułem Example lub zacząć od prostego modułu, który będzie np. wyświetlał tekst Witaj w moim pierwszym module. W tym celu należy stworzyć katalog z nazwą modułu, dajmy na to Modtest. Struktura plików w najprostrostrzym module z własnym blokiem i panelem administracyjnym wygląda tak:

• index.php – główny plik odpowiadający za wyświetlanie modułu, będziemy go wywoływać w PostNuke z adresu index. php?name=Modtest
• admin.php – odpowiada za funkcje w panelu administracyjnym
• version.php – zawiera informacje o module
• Katalog images – zawiera obrazki modułu, np. admin.gif z ikonką administracji
• Katalog lang lub pnlang – zawiera podkatalogi z plikami językowymi, np. eng z językiem angielskim, pol z polskim. W każdym takim podkatalogu powinien znajdować się plik global.php ze stałymi językowymi
• Katalog blocks lub pnblocks – zawiera pliki php pełniące rolę bloków (tworząc swój blok najlepiej jest wzorować się na jakimś z bloków typu Core w katalogu includes/ blocks; blok modułu, jeśli jest poprawnie napisany, automatycznie pojawia się na liście przy tworzeniu nowego bloku)

Zacznijmy od opisania swojego modułu w pliku version.php (Listing 3.).

Listing 3. Zawartość pliku version.php
<?
$modversion['name'] = 'Modtest'; // nazwa modułu
$modversion['version'] = '1.0'; // wersja modułu
$modversion['description'] = 'Moj pierwszy modul'; // opis modułu
$modversion['credits'] = 'Autorem jestem tylko ja'; // uznania
$modversion['help'] = 'pomoc.txt'; // plik pomoc
$modversion['changelog'] = ''; // plik informacji o zmianach
$modversion['license'] = ''; // licencja modułu
$modversion['official'] = 0; // czy moduł jest oficialny 1 – tak, 0 – nie
$modversion['author'] = 'Autor to ja'; // autor modułu
$modversion['contact'] = 'ziomek@pocztaautora.pl'; // kontakt
$modversion['admin'] = 0;
?>

Tworzenie modułów jest bardzo proste. Plik index.php praktycznie nie daje nam żadnych ograniczeń, możemy korzystać ze swoich funkcji oraz funkcji PostNuke (jak chociażby klasy AdoDB do obsługi bazy danych). Stworzyć moduł wyświetlający tekst Witaj w moim pierwszym module będzie bardzo prosto. Plik index.php powinien wyglądać tak (Listing 4.).

Listing 4. Zawartość pliku index.php

<?
// Sprawdzanie czy moduł został poprawnie wywołany (czy nie wpisano np. ścieżki
modules/
if (!defined('LOADED_AS_MODULE')) {
die ("You can't access this file directly...");
}
// wczytywanie headeru strony (generuje górny szablon)
include('header.php');
?>
Witaj w moim pierwszym module. Dzisiaj mamy dzień
<?=date('d.m.Y')?>, jesteś zalogowany jako <?=pnUserGetVar('uname')?>
<?
// wczytanie stopki strony (generuje dolny szablon)
include('footer.php');
?>

Jak widać bez problemu możemy używać dowolnych funkcji PHP jak i funkcji API PostNuke (pnUser- GetVar('uname') w tym przypadku pobiera nazwę użytkownika, parametr 'uid' pobrał by ID użytkownika itp.). Zaprogramujmy także prosty panel administracyjny. Plik admin.php powinien wyglądać tak (Listing 5.).

<?
// Sprawdzanie czy moduł został poprawnie wywołany (czy nie wpisano np. ścieżki
modules/
if (!defined('LOADED_AS_MODULE')) {
die ("You can't access this file directly...");
}
// wczytywanie headeru strony (generuje górny szablon)
include('header.php');
if (isset($_GET['action'])) {
if ($_GET['action'] == 'date') {
?>Dzisiaj mamy <?=date('d.m.Y')?>
<? } else { ?>Taka opcja nie istnieje!<? } } ?>
<p>
Witaj w panelu administracyjnym. Panel jest tymczasowo w budowie.<br />
<a href=”admin.php?module=Modtest&amp;action=date”>Wyświetl dzisiejszą datę</a></p>
<?
// wczytanie stopki strony (generuje dolny szablon)
include('footer.php');
?>

Struktura tego pliku jest bardzo podobna do index.php. W starszych wersjach PostNuke sprawdzało się, czy użytkownik jest administratorem – w nowszych wersjach PN robi to już za nas. W tym pliku po prostu programujemy nawigację po panelu administracyjnym, wszystkie funkcje i cokolwiek chcemy, by było widoczne w administracji naszym modułem. Wystarczy teraz już tylko skopiować nasz folder Modtest do katalogu modules na serwerze, zainicjować i zaktywować moduł, po czym sprawdzić jego działanie. Temat modułów jest dosyć głęboki, a kiedy nie ma ograniczeń, możemy działać cuda. Nic nie stoi także na przeszkodzie, a nawet jest to wskazane, by do modułów użyć systemu szablonów z pnRender, w czym pomoże dokumentacja. Polskich modułów do tego CMSa jest dość mało, nic nie stoi na przeszkodzie, aby któryś z czytelników wykazał się nowym pomysłem – może później dodać projekt do http://noc.postnuke.com (strona developerów) jak i do downloadu PostNuke Polska.

System szablonów

Standardowy system szablonów Xanthia w PostNuke jest trudniejszy do pojęcia niż Auto- Theme. Oferuje on jednak większe możliwości, większą swobodę i lepsze efekty w optymalizacji. Mimo tego skórki pod ten system to mniejszość. Jednakże jeśli chcemy stworzyć nowoczesną stronę internetową, nie należy traktować wszystkiego na zasadzie tworzenia w 5 minut z darmową, ogólnodostępną skórką. Stwórzmy coś własnego, na początek najlepiej w AutoTheme. AT jest modułem bardzo prostym, nasza skórka składa się tam z zaledwie kilku plików:

• theme.html – główny szablon strony
• summary.html – szablon newsa na stronie głównej
• article.html – szablon pełnego newsa oraz artykułu
• leftblock.html – szablon lewych bloków
• rightblock.html – szablon prawych bloków
• centerblock.html – szablon środkowych bloków
• theme.cfg – konfiguracja skórki
• theme.php – plik identyczny we wszystkich skórkach AutoTheme, wczytuje on odpowiednie funkcje systemu szablonów

Obrazki znajdują się w podkatalogu skórki images, a style w podkatalogu skórki style w pliku style. css. Pliki theme.cfg i theme.php warto wyciągnąć z dowolnej skórki pod AutoTheme (w paczce z modułem są przykładowe skórki), gdyż theme.php jest zawsze taki sam, a theme.cfg i tak ulegnie zmianie po skopiowaniu go na serwer z chmod 777. Interesują nas teraz głównie znaczniki, które wstawia się do poszczególnych plików: theme.html:

• <!––[modules]––> – Wyświetla moduły
• <!––[date]––> – Wyświetla datę
• <!––[time]––> – Wyświetla czas
• <!––[user]––> – Wyświetla nazwę użytkownika
• <!––[user–welcome]––> – Wyświetla powitanie użytkownika
• <!––[user–login]––> – Wyświetla poziomy panel logowania
• <!––[user–links]––> – Wyświetla linki do logowania / rejestracji oraz wylogowania / mojego konta
• <!––[banners]––> – Wyświetla bannery
• <!––[banners–typeX]––> – Wyświetla bannery wg. ID X
• <!––[footer–msg]––> – Wyświetla stopkę
• <!––[open–table]––> – Rozpoczyna tabelę
• <!––[close–table]––> – Zamyka tabelę
• <!––[open–table2]––> – Rozpoczyna subtabelę
• <!––[close–table2]––> – Zamyka tabelę
• <!––[table–content]––> – Wyświetla zawartość tabeli
• <!––[site–slogan]––> – Wyświetla slogan strony
• <!––[site–name]––> – Wyświetla nazwę strony
• <!––[search]––> – Wyświetla wyszukiwarkę ze wszystkimi pluginami wyszukiwania
• <!––[logo–image]––> – Wyświetla logo strony
• {image–path} – Zwraca ścieżkę do obrazków skórki (katalog images)
• {theme–path} – Zwraca ścieżkę do skórki

bloki:

• <!––[block–content]––> – Wyświetla zawartość bloku
• <!––[block–title]––> – Wyświetla tytuł bloku
• <!––[left–blocks]––> – Wyświetla lewe bloki
• <!––[center–blocks]––> – Wyświetla środkowe bloki
• <!––[right–blocks]––> – Wyświetla prawe bloki

artykuły/newsy:

• <!––[article–edit–del]––> – Wyświetla linki do edycji i usuwania dla administratorów
• <!––[article–full]––> – Wyświetla pełną treść artykułu/newsa
• <!––[article–more]––> – Wyświetla link czytaj więcej, ikonkę drukowania, ikonkę polecania
• <!––[article–notes]––> – Wyświetla notatki dla artykułu/newsa
• <!––[article–summary]––> – Wyświetla wstęp artykułu/newsa
• <!––[cat–title]––> – Wyświetla tytuł poprzedzony kategorią
• <!––[posted–by]––> – Wyświetla autora tekstu
• <!––[posted–date–time]––> – Wyświetla datę dodania tekstu
• <!––[topic–image]––> – Wyświetla zdjęcie tematu
• <!––[article–reads]––> – Wyświetla ilość odsłon

Można także używać znaczników zdefiniowanych kolorów od {color1} do {color10}

Co wniesie nowa wersja? – Podsumowanie

Jak widać PostNuke ma wiele zalet, ale wad także mu nie brakuje. Niestety wersje 0.76x nie będą już kontynuowane, więc poprawek uciążliwych błędów się nie doczekamy. Jednak wersja 0.8 jest już od długiego czasu w budowie. Jest ona pisana w większości od nowa, dlatego silnik będzie dużo nowocześniejszy. Ostatnio wydano wersję Milestone 3, czyli wczesną niedopracowaną wersję testową, aby programiści mogli sprawdzić z nią swoje moduły. Dopiero w tej wersji wiele się zmienia. A co czeka nas nowego?

• Wsparcie dla Oracle, PostgreSQL i MsSQL
• Całkowicie nowy moduł Search działający z każdym modułem dzięki uniwersalnemu API
• Uniwersalny moduł kategorii – Categories – będzie on używany w każdym module do tworzenia kategorii. Koniec z kategoriami dla każdego modułu z osobna
• Moduły podzielono na systemowe i dodatkowe – domyślnie w paczce znajdziemy standardowe moduł potrzebne do uruchomienia PN w katalogu system, a resztę w katalogu modules
• Poprawiono obsługę błędów
• Cały system będzie obsługiwać nowy moduł szablonów (tylko jeden) oparty o pnRender, czyli taka nowsza Xanthia. Nie będzie natomiast "kodu w kodzie", wszystko będzie zapisywane w szablonach pnRender
• Stworzono moduł do tłumaczeń, podobny do translatora w CMSie Xaraya
• Poprawiono bezpieczeństwo

Moim zdaniem warto wybrać PostNuke jako przyszłościowy CMS – ma duże możliwości, a zachowuje przy tym uniwersalność. Jest to dobra podstawa do nauki o CMSach dla każdego początkującego programisty PHP.

Autor: Michał Gacki

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

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 >