Szczegóły ebooka

Drupal. Poznaj go z każdej strony

Drupal. Poznaj go z każdej strony

Krzysztof Palikowski

Ebook

Dodatkowe materiały do książki, erratę oraz ciekawostki związane z Drupalem znajdziesz na stronie autora:
http://palikowski.net/drupal-kompendium.

Własna strona WWW? Sklep internetowy lub forum? Z Drupalem to możliwe!

  • Jak sprawnie poruszać się w środowisku systemu Drupal?
  • Jak pracować z modułami, skórkami i zawartością witryny?
  • Jak od podstaw zbudować i uruchomić własny serwis?

Jak twierdzi autor tej książki, Drupal to coś więcej niż CMS. I ma rację, biorąc pod uwagę fakt, że ten system zarządzania treścią umożliwia to, co nie zawsze łatwe jest w przypadku innych systemów, takich jak Joomla! czy Wordpress — swobodę tworzenia w pełni dopasowanych stron. Dzięki modularnej strukturze i tysiącom dodatków Drupal zapewnia projektantom niemal nieograniczone możliwości kreowania funkcjonalności i wyglądu witryny. Ten potencjał w połączeniu z opinią niezawodnego i elastycznego systemu oraz wielkim wsparciem światowej społeczności sprawił, że wciąż mało popularny w Polsce Drupal na świecie wyrósł na lidera rynku CMS. Dowód? W oparciu o niego powstały tak prestiżowe witryny, jak strona amerykańskiego Białego Domu, oficjalny serwis miasta Londyn, strona króla Belgii czy polskiego Ministerstwa Gospodarki. Jednocześnie od 2007 roku Drupal regularnie zdobywa tytuł najlepszego CMS w licznych konkursach.

I choć jest to system oparty na otwartym kodzie źródłowym, nic za darmo! Drupal uchodzi bowiem za jeden ze skryptów trudniejszych do opanowania. Aby więc ułatwić sobie to zadanie, podejmij naukę z kompletnym podręcznikiem, dzięki któremu szybko i bez trudu ujarzmisz ten niezwykły system. Błyskawicznie opanujesz jego środowisko i przejdziesz do budowania własnej, profesjonalnej witryny. Przeczytasz o tym, jak opracować strukturę menu i wykonać tłumaczenie interfejsu oraz dowiesz się wszystkiego na temat modułów, "skórek" i szablonów. Nauczysz się sprawnie zarządzać zawartością strony i jej użytkownikami oraz optymalnie ją konfigurować. Krok po kroku prześledzisz proces budowania przykładowego serwisu z wykorzystaniem modułów CCK i Views — zobaczysz, jak atrakcyjnie prezentować treść, zapewnić stronie pełnię funkcjonalności i estetyczny wygląd oraz zadbać o jej bezpieczeństwo. Dowiesz się, jak poprawnie uruchomić swoją witrynę i administrować nią, a także poznasz rozwiązania typowych problemów, na jakie możesz trafić przy każdym z realizowanych etapów.

Czego nauczysz się z tej książki:

  • Czym jest Drupal, jak działa i jak jest zbudowany
  • Jak sprawnie poruszać się w jego środowisku
  • Jak poprawnie go zainstalować i uruchomić
  • Czym są moduły i jak z nimi pracować
  • Jak stworzyć strukturę menu
  • Jak dodawać i konfigurować "skórki"
  • Jak przeprowadzić tłumaczenie interfejsu
  • Jak wprowadzać i edytować zawartość witryny oraz zarządzać nią
  • Jak pracować nad prezentacją zamieszczanych treści
  • Czym są segmenty i jakie mają atrybuty
  • Jak przeprowadzić konfigurację witryny
  • Jak zarządzać profilami i uprawnieniami użytkowników
  • Jak generować raporty i korzystać z nich
  • Jak od podstaw zbudować i uruchomić przykładowy serwis
  • Jak utrzymywać gotową witrynę
  • Jak sprawnie rozwiązywać typowe problemy
  • Jak budować nowe typy zawartości z modułem CCK
  • Jak prezentować treść modułem Views

Przekonaj się, że nawet tak potężne narzędzie jak Drupal z dobrym podręcznikiem staje się łatwe do opanowania!


Patron medialny książki:

blog.elimu.pl

Rozdział 1. Drupal: podstawowe informacje (15)

  • Wprowadzenie (15)
  • Co to jest ten Drupal? (15)
    • Dlaczego właśnie Drupal? (16)
    • Czy z Drupalem odniosę sukces? (17)
  • Drupal od strony technicznej (20)
    • Pliki systemowe (20)
    • Baza danych (21)
    • Pliki użytkowników (22)
    • CMS czy CMF? (22)
  • Drupal jako projekt (23)
  • Trochę historii (24)
  • Trochę liczb (24)
  • Społeczność i wsparcie (25)
    • Polska społeczność (26)
  • Zasoby pomocne w nauce i poznawaniu Drupala (26)
    • Podręcznik (27)
    • IRC (27)
    • Fora i grupy dyskusyjne (27)
    • Blogi i mikroblogi (28)
    • Podcasty (28)
    • Screencasty (28)
  • Rozwiązywanie problemów (29)
  • Przyszłość Drupala (30)
    • Drupal 7 (30)
    • Rozwój firm świadczących usługi (32)
    • Dystrybucje (33)
    • Przewidywania dotyczące przyszłości (37)
  • Licencje i koszty (37)
    • Licencje (37)
    • Koszty (39)
  • Podsumowanie (40)

Rozdział 2. Poznajemy środowisko Drupala (41)

  • Wprowadzenie (41)
  • Podstawy HTML i CSS (42)
    • HTML (42)
    • CSS (44)
    • Dokumenty statyczne i dynamiczne (45)
  • Podstawy serwowania stron WWW (46)
    • Jak serwowane są strony WWW? (46)
    • Jak działa serwer WWW? (47)
    • Drupal jako baza danych z interfejsem WWW (49)
  • Budujemy środowisko testowe do nauki Drupala (50)
    • Instalacja XAMPP LITE (50)
    • Weryfikujemy działanie serwera stron WWW (53)
    • Weryfikujemy działanie interpretera PHP (53)
    • Weryfikujemy działanie serwera bazy danych (54)
    • Tworzymy bazę danych dla przyszłej instalacji systemu Drupal (54)
  • Instalujemy Drupala (57)
    • Pobieramy potrzebne pliki (57)
    • Poznajemy systemowe pliki Drupala (58)
    • Pobieramy tłumaczenie i instalujemy Drupala (60)
    • Poszczególne kroki instalacji (61)
  • Podsumowanie (66)

Rozdział 3. Pierwsze kroki po instalacji (67)

  • Wprowadzenie (67)
  • Ważne terminy (67)
    • Moduł (67)
    • Rodzaj zawartości (68)
    • Segment (69)
    • Strony niebędące segmentami (70)
    • Skórka i szablon (70)
    • Blok i obszar skórki (71)
    • Ranga (71)
    • Ścieżka do strony (72)
    • Ścieżka do pliku (73)
  • Co widać na stronie powitalnej (74)
  • Dział zarządzania (75)
    • Zarządzanie zawartością (75)
    • Budowa witryny (76)
    • Zarządzanie użytkownikami (76)
    • Konfiguracja witryny (76)
    • Raporty (76)
  • Moduły dodatkowe (76)
    • Wyjmijmy z szafki wszystkie zabawki (77)
    • Czym są moduły (78)
    • Skąd pobierać moduły (79)
    • Włączamy moduł zewnętrzny (80)
  • Skórki (81)
    • Skórki systemowe (81)
    • Skórki dodatkowe (82)
  • Dodawanie zawartości (82)
    • Strona "Dodaj zawartość" (83)
    • Artykuł (wpis na stronie głównej) (84)
    • Strona z linkiem w menu (86)
    • Dodawanie obrazków do wpisu (87)
    • Atrybuty segmentu (90)
  • Co dalej (91)
    • Uprawnienia (91)
    • Odpowiedzi i ich moderacja (92)
    • Rejestracja i logowanie (92)
  • Podsumowanie (93)

Rozdział 4. Budowa witryny (95)

  • Wstęp (95)
  • Aliasy adresów (95)
  • Bloki (97)
    • Bloki dostępne po instalacji (99)
    • Konfiguracja bloku (101)
    • Własne bloki (103)
  • Formularz kontaktowy (105)
  • Menu (107)
    • Struktura menu (107)
    • Dodawanie elementu do menu (108)
    • Dodawanie menu (110)
    • Bloki zawierające menu (111)
    • Ustawienia modułu menu (112)
  • Moduły (112)
    • Zależności modułów (114)
    • Instalowanie nowych modułów (115)
    • Wersje modułów (115)
    • Strony modułów (projektów) (117)
    • Wsparcie do modułów (120)
    • Przestrzeń nazw (121)
    • Aktualizacja modułów (121)
    • Odinstalowywanie modułów (122)
  • Skórki (123)
    • Dodawanie skórek (123)
    • Konfiguracja skórek (123)
    • Ustawienia globalne skórek (124)
    • Konfiguracja przykładowej skórki - Garland (126)
    • Skórka działu zarządzania (127)
  • Tłumaczenie interfejsu (127)
    • Jak sprawdzić, w jakim stopniu nasz interfejs jest zlokalizowany (128)
    • Jak zdobyć pliki .po (128)
    • Jak zaimportować plik z tłumaczeniem do naszej strony (129)
    • Wyszukiwanie i tłumaczenie pojedynczych napisów (129)
    • Zmienne w napisach (130)
    • Eksport i obróbka plików .po (131)
    • Struktura plików .po (132)
    • Formuła liczby mnogiej (134)
  • Wyzwalacze (134)
  • Podsumowanie (136)

Rozdział 5. Zarządzanie zawartością (137)

  • Wprowadzenie (137)
  • Rodzaje zawartości (137)
    • Nowy rodzaj zawartości (143)
  • Rodzaje (typy) zawartości raz jeszcze (144)
    • Podstawowe atrybuty segmentu (145)
    • Prezentacja segmentów (146)
    • Skrót i pełna wersja wpisu (147)
    • Różnice między rodzajami zawartości (148)
  • Kategorie (150)
    • Dodawanie terminów (152)
    • Adresy z listą wpisów przypisanych do terminu (154)
  • Zawartość (154)
  • Ustawienia dotyczące wpisów (156)
  • Książki (157)
  • Fora (160)
  • Odpowiedzi (161)
  • Kanały RSS (162)
  • Subskrybent kanałów (163)
    • Bloki (164)
  • Podsumowanie (165)

Rozdział 6. Konfiguracja witryny (167)

  • Wprowadzenie (167)
  • Podstawowe dane (167)
  • Przerwa techniczna (168)
  • Formaty danych (169)
    • Konfiguracja formatu (170)
    • Konfiguracja filtrów (171)
    • Kolejność filtrów (172)
  • Języki (173)
  • Przyjazne adresy (175)
  • Skórka działu zarządzania (176)
  • System plików (176)
  • Wysyłanie plików (177)
  • API blogów (181)
  • Data i czas (182)
  • Działania zautomatyzowane (184)
    • Wstrzymywanie publikacji na podstawie słów kluczowych (185)
    • Wyświetlanie komunikatu dla użytkownika (186)
    • Wysyłanie e-maila (186)
    • Zmienne w akcjach (187)
  • Dzienniki zdarzeń i alerty (188)
    • Dzienniki zdarzeń w bazie danych (188)
    • Syslog (188)
  • Narzędzie przetwarzania grafik (191)
    • Instalacja ImageMagick (192)
    • Powiadamianie o błędach (192)
  • Ustawienia wyszukiwarki (193)
  • Wydajność (195)
  • Zapobieganie przeciążeniu (197)
  • Podsumowanie (198)

Rozdział 7. Zarządzanie użytkownikami (199)

  • Wprowadzenie (199)
  • Rangi (200)
  • Uprawnienia (201)
    • Przykład deklaracji uprawnień (201)
    • Za mało uprawnień? (203)
    • Najważniejsze uprawnienia (203)
  • Profile (206)
    • Dodatkowe pola w profilach użytkowników (207)
  • Reguły dostępu (211)
  • Ustawienia dotyczące użytkowników (213)
    • Tworzenie kont (213)
    • Logowanie z OpenID (214)
    • Wiadomości do użytkowników (215)
  • Użytkownicy (216)
    • Dodawanie nowego użytkownika (217)
    • Użytkownicy testowi (217)
  • Podsumowanie (218)

Rozdział 8. Raporty (219)

  • Wprowadzenie (219)
  • Raport o stanie witryny (220)
  • Nowe wersje (221)
  • Ostatnie wpisy do dziennika (222)
  • Najczęstsze błędy nieznalezienia strony (223)
  • Najczęstsze błędy odmowy dostępu (224)
  • Ustawienia dziennika odwiedzin (225)
  • Najczęściej odsyłające strony (226)
  • Najpopularniejsze słowa kluczowe (226)
  • Ostatnie odsłony (226)
  • Najpopularniejsze strony (227)
  • Najczęściej odwiedzający (228)
  • Podsumowanie (228)

Rozdział 9. Budujemy przykładowy serwis (229)

  • Wstęp (229)
  • Typowy cykl życia projektu internetowego (229)
    • Wymagania funkcjonalne (230)
    • Projekt graficzny i rozplanowanie elementów (230)
    • Wybór rozwiązania (231)
    • Projekt techniczny (231)
    • Przeniesienie na środowisko produkcyjne (232)
    • Utrzymanie i rozwój (232)
    • Serwis "Nasza Okolica" (232)
  • Konfiguracja strony (232)
    • Przygotowanie systemu (233)
    • Moduły (233)
    • Dane podstawowe (235)
    • Konfiguracja skórki (235)
    • Wydajność (235)
    • Ranga "pomocnik redakcji" (236)
    • Format Full HTML dla pomocników (237)
    • Ustawienia użytkowników (238)
    • Uprawnienia (239)
    • Testowi użytkownicy (240)
    • Forum dyskusyjne (241)
    • Profile użytkowników (242)
    • Menu (244)
    • Pierwszy artykuł na stronę główną (246)
    • Pierwsza strona (246)
    • Blogi (247)
    • Formularz kontaktowy (247)
    • Wyszukiwarka (249)
  • Podsumowanie (249)

Rozdział 10. Zawartość serwisu (251)

  • Wstęp (251)
  • Nowe rodzaje zawartości (252)
    • Rodzaj zawartości Wieści z miasta (252)
    • Rodzaj zawartości Zdjęcie (255)
    • Rodzaj zawartości Ogłoszenie (255)
    • Uprawnienia dodatkowe (256)
  • Kategoryzacja treści (257)
  • Instalacja CCK i innych potrzebnych modułów (258)
    • Spolszczenie CCK (260)
    • Przegląd możliwości CCK (260)
  • Nowe pola w typach zawartości (262)
    • Pole Telefon w typie zawartości Ogłoszenie (262)
    • Pole Obraz w typie zawartości Wieści z miasta (265)
    • Współdzielenie pól między rodzajami zawartości (269)
    • Zmiana etykiety i kontrolki pola już po jego utworzeniu (270)
    • Pole Obraz w typie zawartości Zdjęcie (271)
    • Pole Powiązane zdjęcia w typie zawartości Wieści z miasta (272)
    • Uprawnienia do pól - moduł Content Permissions (276)
  • Wprowadzanie i edycja zawartości (277)
    • Formularz dodawania i edycji zawartości (277)
    • Pola i sekcje formularza dodawania treści (279)
    • Kolejność pól (279)
    • Wersje (279)
    • Formaty danych i filtry (281)
  • Zawartość testowa (285)
    • Drobne poprawki w strukturze zawartości (286)
    • Uprawnienia do pól CCK (287)
  • Podsumowanie (288)

Rozdział 11. Prezentacja treści (289)

  • Wstęp (289)
  • Wpis w wersji skróconej i pełnej (289)
    • Wersja skrócona (podsumowanie) (289)
    • Wersja pełna segmentu (290)
  • Jak zmienić wygląd segmentów (290)
    • CCK i formatery (290)
    • Skinr i Fusion (292)
    • Display Suite (292)
    • Panels (293)
    • ImageCache (293)
  • Moduł ImageCache (293)
    • Uprawnienia (296)
    • Konfiguracja formaterów dla rodzaju zawartości Ogłoszenie (297)
    • Położenie plików obsługiwanych przez ImageField i ImageCache (298)
    • Konfiguracja formaterów dla rodzaju zawartości Zdjęcie (300)
    • Odrobina CSS (301)
  • Jak zmienić wygląd wykazów i list (302)
    • Wykazy segmentów (302)
    • Wykazy i tabele elementów (303)
    • Własne listy i wykazy (304)
  • Moduł Views (304)
    • Przykłady widoków (305)
    • Instalacja i polonizacja modułu Views (307)
    • Views i wbudowane widoki (307)
    • Interfejs modułu Views (307)
    • Formaty (310)
    • Obszar Podstawowe ustawienia (312)
    • Ikona kółka zębatego (312)
    • Ikony plusa i strzałek (314)
    • Obszar Filtry (315)
    • Obszar Pola (316)
    • Obszar Kryteria sortowania (317)
    • Obszar Powiązania (318)
    • Obszar Argumenty (319)
  • Budowanie widoków dla strony Nasza Okolica (320)
    • Widok Ostatnio dodane zdjęcia (320)
    • Widok Ogłoszenia (326)
    • Blok 5 ostatnich ogłoszeń (328)
  • Podsumowanie (331)

Rozdział 12. Moduły i przepisy (333)

  • Wstęp (333)
  • Popularne moduły zewnętrzne (333)
    • Content Construction Kit (CCK) (334)
    • Views (335)
    • Flag (337)
    • Token (337)
    • Pathauto (338)
    • Administration menu (338)
    • FileField (339)
    • ImageCache (339)
    • Rules (340)
  • Przepisy na konkretne funkcje (340)
    • Jak wybrać odpowiednie moduły (341)
    • Galeria zdjęć (342)
    • Wiki (343)
    • Sklep internetowy (344)
    • Biuletyny (345)
    • Forum dyskusyjne (345)
    • Grupy (347)
    • Zarządzanie projektami, zadaniami, zgłoszeniami (347)
    • Formularze i zbieranie danych (348)
    • Katalogi (348)
  • Zabezpieczenie przed spamem (348)
    • System CAPTCHA (349)
    • Systemy antyspamowe (350)
    • Blokowanie IP (350)
    • Moderacja treści (351)
    • Regulamin (351)
  • Podsumowanie (351)

Rozdział 13. Wygląd (353)

  • Wprowadzenie (353)
    • Czym są skórki (353)
    • Skórki to nie szablony (354)
  • Skąd pobierać gotowe projekty (355)
    • Skórki komercyjne (355)
    • Szablony HTML (356)
    • Inne źródła (356)
    • Samodzielna produkcja (356)
    • Drupal liderem słabych skórek? (357)
    • Rodzynki, czyli ładne skórki do Drupala (358)
  • Co składa się na wygląd drupalowej strony (359)
    • Treść, forma, funkcje (359)
    • Kaskadowe arkusze stylów (CSS) (360)
    • Obszary i bloki (361)
    • Obszar treści i wygląd segmentów różnego typu (364)
  • Silnik PHPTemplate (367)
    • Czym są silniki skórek (367)
    • Skórka i szablon - to nie to samo! (367)
  • Skórki PHPTemplate (368)
    • Instalacja skórek (368)
  • Szablony i funkcje szablonów (369)
    • Przykładowy szablon (369)
    • Nadpisywanie funkcji i szablonów (370)
    • Reguły nazewnictwa plików przy nadpisywaniu szablonów (371)
    • Rozwiązywanie konfliktów szablonów (372)
    • Szablony w rdzeniu i możliwości ich nadpisania (373)
    • Zasady nadpisywania funkcji szablonów (375)
    • Zmienne dostępne w szablonie page.tpl.php (376)
    • Zmienne szablonu block.tpl.php (378)
    • Zmienne szablonu comment.tpl.php (378)
    • Zmienne szablonu node.tpl.php (379)
    • Contemplate (380)
  • Budowa skórek (381)
    • Pliki składające się na skórkę (381)
    • Plik .info (383)
    • Pliki typowych szablonów (386)
    • Skórki potomne (388)
  • Własna skórka (389)
    • Przerabiana czy całkiem własna? (389)
    • Idealna skórka na start - Zen (390)
    • Robimy skórkę potomną na podstawie Zen (391)
    • Dostosowujemy skórkę z szablonu HTML/CSS (394)
  • Podsumowanie (397)

Rozdział 14. Uruchomienie witryny (399)

  • Wstęp (399)
  • Instalacja Drupala w środowisku produkcyjnym (399)
    • Wybór serwera WWW (400)
    • Zakładamy konto WWW (402)
    • Zakładamy bazę danych MySQL (403)
    • Zakładamy skrzynkę mailową (405)
    • Konfigurujemy domenę na serwerze (406)
    • Odszukujemy katalog na pliki strony (407)
    • Umieszczenie plików Drupala na serwerze - metoda FTP (409)
    • Umieszczenie plików Drupala na serwerze - wiersz poleceń (411)
    • Uruchamiamy instalator (412)
    • Uprawnienia do plików (412)
    • Sprawdzamy działanie poczty (413)
    • Sprawdzamy parametry życiowe (413)
    • Ustawiamy zadania cron (414)
    • Ukrywamy stronę przed ciekawskimi (415)
  • Drupal w trybie wielowitrynowym (multisite) (415)
    • Wiele witryn, jeden Drupal (416)
    • Znaczenie katalogu sites (417)
    • Instalacja nowej witryny (419)
    • Dodanie istniejącej witryny do instalacji wielowitrynowej (422)
    • Konfiguracja współdzielenia tabel między serwisami (424)
    • Instalacja wielowitrynowa na środowisku testowym (Windows) (427)
  • Podsumowanie (429)

Rozdział 15. Utrzymanie witryny (431)

  • Wstęp (431)
    • Zasada nienaruszalności kodu rdzenia (431)
    • Kopie zapasowe (432)
    • Bieżące prace przy witrynie (432)
    • Aktualizacja systemu i modułów (432)
    • Przenosiny na inny serwer (432)
    • Zmiana adresu strony (433)
    • Utrzymanie środowiska rozwojowego (433)
    • Wykorzystanie SSH i Drush (433)
  • Kopie zapasowe (434)
    • Kopia plików z użyciem FTP (435)
    • Kopia plików z użyciem Direct Admin (436)
    • Kopia bazy danych z użyciem phpMyAdmin (437)
    • Kopie bezpieczeństwa z poziomu skryptów PHP i modułów Drupala (438)
    • Kopie z użyciem mechanizmów wbudowanych w panel zarządzania kontem serwera WWW (439)
    • Kopia bazy danych z użyciem mysqldump (439)
    • Kopie różnicowe plików z użyciem narzędzia rsync (442)
    • Planowanie wykonania się kopii z użyciem crontab (445)
  • Przywrócenie systemu z kopii bezpieczeństwa (446)
    • Odtworzenie plików (446)
    • Odtworzenie bazy danych z użyciem phpMyAdmin (447)
    • Odtworzenie bazy danych z użyciem programu mysql (448)
  • Aktualizacje (450)
    • Skąd mam wiedzieć, że są nowe wersje? (450)
    • Kiedy aktualizacja jest konieczna? (451)
    • Proces aktualizacji - najważniejsze zasady (452)
    • Aktualizacja systemu (453)
    • Aktualizacja modułów (454)
    • Aktualizacja skórki (455)
    • Kiedy będę wiedział, że wszystkie elementy mojej strony są aktualne? (455)
  • Uruchomienie środowiska testowego (456)
    • Jeden serwer testowy - piaskownica (456)
    • Więcej serwerów testowych (456)
    • Jak przygotować piaskownicę (457)
    • Piaskownica generowana automatycznie (458)
  • Podsumowanie (459)

Rozdział 16. Typowe problemy (461)

  • Wprowadzenie (461)
  • Popularne problemy (461)
    • Komunikat "Internal server error 500" (461)
    • Biała strona zamiast serwisu (462)
    • Komunikat "Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)" (463)
    • Komunikat "The translation import failed" (464)
    • Komunikat "Maximum execution time of xx seconds exceeded" (465)
    • Błąd 404 protokołu HTTP (465)
    • Powolne działanie systemu na localhost (466)
    • Połączenie z serwerem zostało zresetowane (466)
    • Komunikat "Cannot modify header information - headers already sent by ..." (467)
    • Błędne ścieżki do plików (467)
    • Utrata hasła do konta administratora (469)
    • Na serwerze z PHP 5.3 nie działa podgląd ani generowanie miniatur w ImageCache (470)
  • Podsumowanie (471)

Skorowidz (473)

  • Tytuł: Drupal. Poznaj go z każdej strony
  • Autor: Krzysztof Palikowski
  • ISBN: 978-83-246-4415-5, 9788324644155
  • Data wydania: 2011-12-30
  • Format: Ebook
  • Identyfikator pozycji: drupal
  • Wydawca: Helion