Szczegóły ebooka

Drupal 7. Zaawansowane programowanie

Drupal 7. Zaawansowane programowanie

John K. VanDyk, Todd Tomlinson

Ebook

Opanuj niesamowite możliwości tego CMS-a i twórz rozbudowane witryny oraz aplikacje internetowe!

  • Poznaj architekturę Drupala i sposób jego działania
  • Naucz się pracować z bazą danych i API formularzy
  • Twórz własne moduły i rozszerzaj możliwości tego systemu
  • Zobacz, jak optymalnie wykorzystać jQuery w Drupalu

Drupal to nie tylko kolejny, nieco lepszy od innych CMS. Ten system zarządzania treścią zrobił ostatnio oszałamiającą karierę jako doskonały framework do tworzenia wszelkiej maści aplikacji internetowych. Dzięki niezwykłej łatwości i szybkości, z jaką Drupal pozwala programistom tworzyć rozbudowane blogi, profesjonalne witryny korporacyjne czy serwisy społecznościowe, zainteresowanie tą technologią zaczęło dynamicznie wzrastać. Co więcej, choć już dziś wydaje się, że sposoby wykorzystania tego CMS-a ogranicza jedynie ludzka wyobraźnia, system jest wciąż intensywnie rozwijany przez liczną społeczność entuzjastów na całym świecie. Możliwość czerpania z ogromnych zasobów wiedzy tysięcy programistów poprawi jakość Twoich nawet najbardziej wyrafinowanych internetowych projektów.

Jeśli chcesz tworzyć nowoczesne, rozbudowane witryny internetowe z wykorzystaniem Drupala 7, właśnie znalazłeś idealny podręcznik dla siebie! Omówiono tu wszystko, co będzie Ci potrzebne, począwszy od podstawowych zagadnień, takich jak architektura i struktura plików systemu, przez sposoby wykorzystania API formularzy czy dodawania własnych modułów w celu rozszerzania możliwości, aż po metody tworzenia bezpiecznego, wydajnego kodu. Dowiesz się więcej na temat pracy z bazą danych, uruchomienia własnej strony wyszukiwarki oraz korzystania z jQuery w Drupalu. Nauczysz się także sprawnie optymalizować Drupal i przeprowadzać skuteczne testy oraz poznasz wiele innych praktycznych zagadnień, które sprawią, że bez trudu zrozumiesz zasady działania tego CMS-a oraz pokonasz wszelkie problemy napotykane w trakcie pracy.

Z tej książki dowiesz się między innymi:

  • jak działa Drupal i jaką ma architekturę
  • jak tworzyć dodatkowe, funkcjonalne moduły
  • jak pracować z bazą danych i API formularzy
  • jak wygląda obsługa użytkowników, segmentów i pól
  • jak przechowywać dane w sesjach
  • jak zapewnić wyszukiwanie i indeksowanie informacji
  • jak wykorzystać jQuery w Drupalu
  • jak tworzyć czysty, bezpieczny kod
  • jak optymalizować działanie Drupala
  • jak przeprowadzić efektywny proces testowania

Todd Tomlinson - przez piętnaście lat zajmował się projektowaniem, rozwijaniem, wdrażaniem i konserwacją zaawansowanych rozwiązań internetowych. Pracował m.in. w Oracle Corporation jako specjalista od opracowywania planów strategicznych pod kątem najlepszego wykorzystania możliwości Internetu. Todd uwielbia Drupal, który jest przez niego wykorzystywany jako główne narzędzie do tworzenia przyjemnych dla oka i funkcjonalnych witryn. Jest autorem książki "Drupal 7. Od podstaw".

John K. VanDyk jest starszym architektem aplikacji webowych w Lullabot — firmie zajmującej się szkoleniami i konsultingiem Drupala. Wcześniej był analitykiem i adiunktem na Stanowym Uniwersytecie Naukowo-Technicznym w Iowa (USA). Na swoim koncie ma już jedną książkę na temat tego CMS-a: "Pro Drupal Development. Second Edition".

Przedmowa (15)

O autorach (17)

O korektorach merytorycznych (19)

Podziękowania (21)

Wstęp (23)

Rozdział 1. Jak działa Drupal? (25)

  • Czym jest Drupal? (25)
  • Stos technologii (25)
  • Rdzeń (26)
  • Interfejs administratora (26)
  • Moduły (27)
  • Haki (27)
  • Skórki (28)
  • Segmenty (28)
  • Pola (29)
  • Bloki (29)
  • Układ plików (29)
  • Obsługa żądania (31)
    • Zadania serwera WWW (31)
    • Proces rozruchu (bootstrap) (32)
    • Przetwarzanie żądania (32)
    • Wyświetlanie danych (32)
  • Podsumowanie (32)

Rozdział 2. Tworzenie modułów (33)

  • Tworzenie plików (33)
  • Implementacja haka (35)
  • Dodawanie ustawień charakterystycznych dla modułu (36)
  • Tworzenie własnej sekcji administracyjnej (42)
  • Wyświetlanie formularza ustawień (43)
  • Walidacja ustawień wysłanych przez użytkownika (44)
  • Przechowywanie ustawień (45)
    • Tabela variables w akcji (45)
    • Wczytywanie wartości za pomocą funkcji variable_get() (46)
  • Co dalej? (46)
  • Podsumowanie (47)

Rozdział 3. Haki, działania i wyzwalacze (49)

  • Jak działają zdarzenia i wyzwalacze? (49)
  • Działania w praktyce (51)
    • Interfejs użytkownika wyzwalaczy (51)
    • Twoje pierwsze działanie (52)
    • Przypisywanie akcji (53)
    • Zmiana wyzwalaczy wywołujących działanie (53)
  • Kontekst a działania (58)
    • Przygotowanie kontekstu przez moduł wyzwalaczy (58)
    • Modyfikacja działań przy użyciu funkcji action_info_after() (59)
    • Określanie kontekstu (59)
  • Metody przechowywania działań (61)
    • Tabela actions (61)
    • Identyfikatory działań (61)
  • Bezpośrednie wywołanie działania przy użyciu metody actions_do() (62)
  • Tworzenie własnych wyzwalaczy przy użyciu hook_trigger_info() (62)
  • Dodawanie wyzwalaczy do istniejących haków (65)
  • Podsumowanie (67)

Rozdział 4. System menu (69)

  • Mapowanie wywołań zwrotnych (69)
  • Mapowanie adresów URL na funkcje (69)
  • Tworzenie elementu menu (71)
  • Argumenty wywołań zwrotnych strony (74)
  • Wywołania zwrotne strony w innych plikach (75)
  • Dodawanie łącza do bloku Nawigacja (76)
  • Zagnieżdżanie menu (77)
  • Kontrola dostępu (78)
  • Lokalizacja i dostosowanie (80)
  • Tworzenie wywołania zwrotnego tytułu (80)
  • Znaki wieloznaczne w elementach menu (81)
    • Podstawowe znaki wieloznaczne (81)
    • Znaki wieloznaczne i parametry wywołań zwrotnych strony (82)
    • Korzystanie z wartości dopasowanej przez znak wieloznaczny (82)
    • Znaki wieloznaczne a zamiana parametrów (82)
    • Przekazywanie dodatkowych argumentów do funkcji ładowania (84)
    • Specjalne argumenty ładowania: %map i %index (84)
    • Tworzenie ścieżek na podstawie znaków wieloznacznych z wykorzystaniem funkcji to_arg() (85)
    • Znaki wieloznaczne i funkcja to_arg(): przypadki specjalne (85)
  • Zastępowanie elementów menu w innych modułach (86)
  • Zastępowanie hiperłączy menu w innych modułach (87)
  • Rodzaje elementów menu (87)
  • Typowe zadania (89)
    • Przypisywanie wywołań zwrotnych bez dodawania hiperłączy do menu (89)
    • Wyświetlanie elementów menu jako zakładek (89)
    • Ukrywanie istniejących elementów menu (91)
    • Korzystanie z menu.module (91)
    • Typowe błędy (91)
  • Podsumowanie (92)

Rozdział 5. Praca z bazą danych (93)

  • Określanie parametrów bazy danych (93)
  • Jak działa warstwa abstrakcji bazy danych? (94)
  • Łączenie się z bazą danych (94)
  • Wykonywanie prostych zapytań (95)
  • Pozyskiwanie wyników zapytań (97)
    • Pobieranie pojedynczej wartości (97)
    • Pobieranie wielu wierszy (97)
    • Twórca zapytań i obiekty zapytań (97)
    • Pobieranie ograniczonego zbioru wyników (98)
    • Stronicowanie wyników zapytań (98)
    • Przykłady typowych zapytań (99)
  • Modyfikacje rekordów za pomocą funkcji drupal_write_record() (100)
  • API schematów (101)
    • Plik .install a schematy (101)
    • Tworzenie tabel (101)
    • Wykorzystywanie modułu schema (103)
    • Mapowanie typów pól schematów na typy pól bazy danych (104)
    • Deklarowanie wybranych typów kolumn za pomocą funkcji mysql_type (106)
    • Zarządzanie tabelami (108)
    • Usuwanie tabel przy deinstalacji modułu (108)
    • Zmiana istniejących schematów za pomocą funkcji hook_schema_alter() (109)
  • Zmiana zapytań istniejących w innych modułach za pomocą haka hook_query_alter() (110)
  • Obsługa wielu baz danych w Drupalu (110)
  • Tabele tymczasowe (112)
  • Tworzenie własnego sterownika bazy danych (112)
  • Podsumowanie (113)

Rozdział 6. Obsługa użytkowników (115)

  • Obiekt $user (115)
  • Sprawdzanie stanu logowania użytkownika (116)
  • Wprowadzenie do haków użytkownika (116)
    • Sposób działania funkcji hook_user_view($account, $view_mode) (118)
  • Proces rejestracji użytkownika (120)
  • Zbieranie informacji o użytkownikach za pomocą modułu profile.module (122)
  • Proces logowania (123)
    • Dodawanie danych do obiektu $user w momencie ładowania (124)
    • Kategorie informacji o użytkownikach (125)
  • Logowanie zewnętrzne (126)
  • Podsumowanie (129)

Rozdział 7. Obsługa segmentów (131)

  • Segment - co to takiego? (131)
  • Nie wszystko jest segmentem (133)
  • Tworzenie modułu segmentu (133)
    • Tworzenie pliku .install (134)
    • Tworzenie pliku .info (136)
    • Tworzenie pliku .module (136)
    • Udostępnianie informacji o rodzaju zawartości (136)
    • Zmiana wywołań zwrotnych menu (137)
    • Tworzenie uprawnień zależnych od typu segmentu za pomocą haka hook_permission() (138)
    • Ograniczenie dostępu do typu segmentu za pomocą haka hook_node_access() (139)
    • Dostosowywanie formularza segmentów do naszego typu segmentu (139)
    • Walidacja pól za pomocą haka hook_validate() (140)
    • Zapisywanie danych za pomocą haka hook_insert() (141)
    • Aktualizowanie danych i interakcja z hakiem hook_update() (141)
    • Usuwanie segmentów za pomocą haka hook_delete() (142)
    • Modyfikowanie segmentów naszego typu za pomocą haka hook_load() (142)
    • Hak hook_view() (142)
    • Modyfikowanie segmentów, które nie należą do naszego typu za pomocą haków w postaci hook_node_xxxxx() (144)
  • Sposób przechowywania segmentów (145)
  • Tworzenie typu segmentu z własnymi typami zawartości (147)
  • Ograniczanie dostępu do segmentów (147)
    • Określanie uprawnień do segmentów (147)
    • Proces obsługi dostępu segmentów (149)
  • Podsumowanie (149)

Rozdział 8. Obsługa pól (151)

  • Tworzenie rodzajów zawartości (151)
  • Dodawanie pól do rodzaju zawartości (153)
  • Tworzenie własnego pola (156)
  • Dodawanie pól z poziomu kodu (164)
  • Podsumowanie (167)

Rozdział 9. System skórek (169)

  • Skórki (169)
    • Instalacja gotowej skórki (169)
    • Tworzenie skórki (170)
  • Plik .info (176)
    • Dodawanie obszarów do skórki (176)
    • Dodawanie do skórki plików CSS (176)
    • Dodawanie skryptów języka JavaScript (177)
    • Dodawanie ustawień do skórki (177)
  • Pliki szablonów - co, gdzie, jak (179)
    • Zarys ogólny (179)
    • Plik html.tpl.php (181)
    • Przesłanianie plików szablonów (188)
    • Pozostałe pliki szablonów (191)
    • Przesłanianie skórkowalnych elementów (192)
    • Przesłanianie plików szablonów (194)
    • Dodawanie i modyfikowanie zmiennych szablonu (195)
    • Moduł twórcy skórek (196)
  • Podsumowanie (196)

Rozdział 10. Bloki (197)

  • Czym jest blok? (197)
  • Opcje ustawień bloków (199)
  • Rozmieszczenie bloków (199)
    • Tworzenie bloku (200)
    • Wykorzystywanie haków bloku (202)
  • Tworzenie bloku (202)
  • Włączanie bloku w zainstalowanych modułach (207)
  • Przykłady widoczności bloków (208)
    • Wyświetlanie bloku tylko dla użytkowników zalogowanych (208)
    • Wyświetlanie bloku tylko dla użytkowników anonimowych (208)
  • Podsumowanie (208)

Rozdział 11. API formularzy (209)

  • Przetwarzanie formularzy (209)
    • Rozpoczęcie procesu (211)
    • Określanie tokenu (211)
    • Określanie ID (211)
    • Pobieranie dostępnych definicji elementów formularza (211)
    • Poszukiwanie funkcji walidacji (212)
    • Poszukiwanie funkcji wysyłania formularza (212)
    • Modyfikowanie formularzy przed ich utworzeniem (213)
    • Tworzenie formularzy (213)
    • Modyfikowanie formularzy po ich utworzeniu (213)
    • Sprawdzenie, czy formularz został wysłany (213)
    • Poszukiwanie funkcji skórki dla formularza (213)
    • Modyfikowanie formularzy przed renderowaniem (214)
    • Renderowanie formularza (214)
    • Walidacja formularza (214)
    • Wysyłanie formularza (215)
    • Przekierowanie użytkownika (215)
  • Tworzenie prostych formularzy (216)
    • Właściwości formularza (218)
    • Identyfikatory formularzy (218)
    • Zbiory pól (219)
    • Stosowanie skórek do formularzy (221)
    • Wybór funkcji walidacji i przetwarzania za pomocą haka hook_forms() (224)
    • Porządek wywołań funkcji skórek, walidacji i przetwarzania (225)
    • Tworzenie funkcji walidacji (225)
    • Wykorzystywanie zmiennej $form_state do przekazywania danych (227)
    • Proces odbudowania formularza (228)
    • Tworzenie funkcji przetwarzania (229)
    • Modyfikowanie formularzy za pomocą haka hook_form_alter() (229)
    • Przetwarzanie formularzy z poziomu kodu za pomocą funkcji drupal_form_submit() (230)
    • Formularze dynamiczne (231)
  • Właściwości API formularzy (237)
    • Właściwości formularza (237)
    • Właściwości dodawane do wszystkich elementów (237)
    • Właściwości dostępne we wszystkich elementach (238)
    • Elementy formularza (240)
  • Podsumowanie (252)

Rozdział 12. System filtrów (255)

  • Filtry (255)
  • Filtry i formaty tekstu (256)
    • Instalacja filtru (258)
    • Zastosowania filtrów (259)
  • Tworzenie własnego filtru (259)
    • Implementacja haka hook_filter_info() (260)
    • Funkcja przetwarzania (260)
    • Funkcja pomocnicza (261)
  • Podsumowanie (263)

Rozdział 13. Wyszukiwanie i indeksowanie informacji (265)

  • Tworzenie własnej strony wyszukiwarki (265)
    • Domyślny formularz wyszukiwarki (266)
    • Formularz wyszukiwania zaawansowanego (266)
    • Dodawanie formularza wyszukiwania (267)
  • Wykorzystywanie indeksera HTML (269)
    • Zastosowania indeksera (270)
    • Jak działa indekser? (270)
  • Podsumowanie (277)

Rozdział 14. Obsługa plików (279)

  • Metody udostępniania plików przez Drupal (279)
  • Zarządzane i niezarządzane API Drupala (279)
    • Pliki publiczne (280)
    • Pliki prywatne (281)
  • Ustawienia PHP (281)
  • Obsługa wysyłanych plików (282)
    • Pole wysyłania pliku (282)
    • Wideo i audio (283)
  • API plików (283)
    • Schemat bazy danych (283)
    • Typowe zadania i funkcje (284)
    • Haki uwierzytelniania do pobierania (292)
  • Podsumowanie (293)

Rozdział 15. Obsługa kategorii (295)

  • Struktura kategorii (295)
  • Tworzenie słownika (295)
  • Tworzenie terminów (296)
  • Powiązanie słownika z rodzajem zawartości (296)
  • Rodzaje kategorii (296)
    • Płaska (296)
    • Hierarchiczna (297)
    • Wielohierarchiczna (298)
  • Przeglądanie treści przy użyciu terminów (299)
    • Wykorzystywanie operatorów AND i OR w adresach URL (299)
    • Automatyczne kanały RSS (300)
  • Przechowywanie kategorii (301)
  • Słowniki budowane w modułach (302)
    • Tworzenie słownika w obrębie modułu (302)
    • Informowanie o zmianach w słowniku - haki kategorii (302)
  • Typowe zadania (304)
    • Wyświetlanie terminów taksonomii związanych z segmentem (304)
    • Tworzenie własnych zapytań kategorii (304)
    • Funkcja taxonomy_select_nodes() (304)
  • Funkcje taksonomii (305)
    • Pozyskiwanie informacji o słownikach (305)
    • Dodawanie, modyfikacja i usuwanie słowników (305)
    • Pobieranie informacji o terminach (306)
    • Dodawanie, modyfikacja i usuwanie terminów (307)
    • Pobieranie informacji o hierarchii terminów (307)
    • Wyszukiwanie segmentów oznaczonych wybranymi terminami (309)
  • Dodatkowe informacje (309)
  • Podsumowanie (310)

Rozdział 16. Obsługa pamięci podręcznej (311)

  • Zastosowania pamięci podręcznej (311)
  • Sposób działania pamięci podręcznej (312)
  • Wykorzystywanie pamięci podręcznej w obrębie rdzenia (313)
    • System menu (313)
    • Pamięć podręczna a przefiltrowany tekst (314)
    • Zmienne administracyjne i ustawienia modułów (314)
    • Bloki (317)
    • API pamięci podręcznej w praktyce (318)
  • Podsumowanie (321)

Rozdział 17. Sesje (323)

  • Czym są sesje? (323)
  • Sposób użycia sesji (323)
  • Ustawienia związane z sesją (325)
    • Plik .htaccess (325)
    • Plik settings.php (325)
    • Plik bootstrap.inc (325)
    • Wymaganie cookies (326)
  • Sposób przechowywania danych w sesji (326)
  • Cykl życia sesji (327)
  • Konwersacje w trakcie sesji (328)
    • Pierwsza wizyta (328)
    • Druga wizyta (328)
    • Użytkownik zarejestrowany (328)
  • Typowe zadania (329)
    • Zmiana terminu ważności cookie (329)
    • Zmiana nazwy sesji (329)
    • Przechowywanie danych w sesji (329)
  • Podsumowanie (330)

Rozdział 18. jQuery w Drupalu (331)

  • Czym jest jQuery? (331)
  • JavaScript po staremu (332)
  • Jak działa jQuery? (333)
    • Wykorzystywanie identyfikatorów CSS (333)
    • Wykorzystywanie selektora klasy CSS (333)
  • jQuery + Drupal = ? (334)
    • Twój pierwszy kod jQuery (334)
    • Określanie elementu za pomocą ID (336)
    • Łańcuchy wywołań (337)
    • Dodawanie i usuwanie klas (337)
    • Opakowywanie istniejących elementów (337)
    • Zmiana wartości elementów CSS (338)
    • Umieszczanie kodu JavaScript (338)
    • Przesłanialny kod JavaScript (341)
  • Tworzymy kontrolkę do głosowania w jQuery (343)
    • Tworzenie modułu (345)
    • Wykorzystywanie zachowań Drupala (351)
    • Możliwości rozszerzenia modułu (351)
    • Zgodność (352)
  • Co dalej? (352)
  • Podsumowanie (352)

Rozdział 19. Lokalizacja i tłumaczenie (353)

  • Włączanie modułu locale (353)
  • Tłumaczenie interfejsu użytkownika (353)
    • Łańcuchy znaków (353)
    • Tłumaczenie łańcuchów znaków za pomocą funkcji t() (354)
    • Zamiana wbudowanych łańcuchów znaków na własne (354)
  • Tworzenie nowego tłumaczenia (362)
    • Generowanie plików .pot za pomocą modułu translation template extractor (362)
    • Tworzenie pliku .pot dla Twojego modułu (362)
    • Tworzenie plików .pot dla całej witryny (364)
  • Instalacja pełnego tłumaczenia dla języka (364)
    • Ustawianie tłumaczenia w trakcie instalacji (364)
    • Instalacja tłumaczenia w istniejącej witrynie (365)
  • Obsługa języków z pisownią od prawej do lewej (366)
  • Wybór języka (367)
    • Domyślny (368)
    • URL (369)
    • Przeglądarka (370)
    • Tylko URL (370)
  • Tłumaczenie treści (370)
    • Wprowadzenie do modułu tłumaczenia treści (371)
    • Obsługa wersji językowych (371)
    • Obsługa wersji językowych dla tłumaczenia (371)
  • Pliki związane z lokalizacją i tłumaczeniem (375)
  • Dodatkowe informacje (375)
  • Podsumowanie (375)

Rozdział 20. XML-RPC (377)

  • XML-RPC - co i jak? (377)
  • Wymagania wstępne dla XML-RPC (377)
  • Klienci XML-RPC (378)
    • Przykład klienta XML-RPC - pobieramy czas (378)
    • Przykład klienta XML-RPC - pobieramy nazwę stanu (379)
    • Obsługa błędów u klienta XML-RPC (380)
  • Prosty serwer XML-RPC (382)
    • Przypisywanie nazw metod za pomocą haka hook_xmlrpc() (383)
    • Automatyczna walidacja typów parametrów za pomocą haka hook_xmlrpc() (383)
  • Wbudowane metody XML-RPC (384)
    • system.listMethods (384)
    • system.methodSignature (386)
    • system.methodHelp (386)
    • system.getCapabilities (386)
    • system.multiCall (387)
  • Podsumowanie (387)

Rozdział 21. Tworzenie bezpiecznego kodu (389)

  • Obsługa danych przesyłanych przez użytkownika (389)
    • Typy danych (390)
    • check_plain() i t() - metody na oczyszczenie danych (391)
    • Wykorzystywanie funkcji filter_xss() do zapobiegania atakom typu cross-site scripting (393)
    • Wykorzystywanie haka filter_xss_admin() (395)
  • Bezpieczna obsługa adresów URL (395)
  • Tworzenie bezpiecznych zapytań za pomocą funkcji db_query() (396)
  • Kontrola dostępu do danych prywatnych - hak hook_query_alter() (398)
  • Zapytania dynamiczne (399)
  • Uprawnienia i wywołania zwrotne strony (399)
  • Ataki typu CSRF (Cross-Site Request Forgery) (400)
  • Bezpieczeństwo plików (400)
    • Uprawnienia do plików (400)
    • Pliki chronione (401)
    • Wysyłanie plików (401)
    • Nazwy plików i ścieżki (402)
  • Kodowanie nagłówków poczty elektronicznej (402)
  • Pliki w środowisku produkcyjnym (403)
  • Obsługa SSL (403)
  • Samodzielne pliki PHP (403)
  • Bezpieczeństwo i AJAX, czyli atak przez powtórzenie żądania (405)
  • Bezpieczeństwo formularzy API (405)
  • Ochrona konta superużytkownika (406)
  • Podsumowanie (406)

Rozdział 22. Dobre praktyki programistyczne (407)

  • Standardy kodowania (407)
    • Wcięcia i białe znaki (407)
    • Operatory (407)
  • Rzutowanie (408)
  • Instrukcje kontroli przepływu (408)
    • Wywołania funkcji (408)
    • Deklaracje funkcji (409)
    • Nazwy funkcji (409)
    • Wywołania konstruktorów (410)
    • Tablice (410)
    • Cudzysłowy (411)
    • Złączanie łańcuchów znaków (411)
  • Komentarze (411)
    • Przykłady dokumentacji (412)
    • Dokumentowanie stałych (412)
    • Dokumentowanie funkcji (412)
    • Dokumentowanie implementacji haków (414)
    • Dołączanie kodu (414)
    • Znaczniki kodu PHP (414)
    • Średniki (415)
    • Przykładowe adresy URL (415)
  • Konwencje nazewnicze (415)
  • Sprawdzanie stylu kodowania za pomocą modułu coder (415)
  • Szybka nawigacja w kodzie Drupala za pomocą narzędzia grep (416)
  • Podsumowanie (417)

Rozdział 23. Optymalizacja Drupala (419)

  • Pamięć podręczna - klucz do wydajności Drupala (419)
  • Optymalizacja PHP (421)
    • Przekierowanie pliku pamięci podręcznej kodu operacyjnego PHP na /dev/zero (422)
    • Ustawienia puli procesów PHP (422)
  • Dostosowywanie serwera Apache (423)
    • mod_expires (423)
    • Przenoszenie dyrektyw z pliku .htaccess do pliku httpd.conf (423)
    • Preforkowanie MPM vs. Apache MPM Worker (424)
    • Dopasowywanie rozmiaru puli Apache (424)
    • Zmniejszanie czasu oczekiwania Apache (425)
    • Wyłączenie nieużywanych modułów Apache (425)
  • Nginx zamiast Apache - zmiana serwera WWW (425)
  • Pressflow (425)
  • Varnish (425)
    • Normalizacja żądań przychodzących w celu zwiększenia wydajności Varnisha (426)
    • Varnish: znajdywanie dodatkowych cookies (427)
  • Boost (427)
  • Boost a Varnish (428)
  • Konfiguracja systemu Linux w serwerach o wysokim natężeniu (428)
  • Używanie szybkich systemów plików (429)
  • Serwery dedykowane a serwery wirtualne (430)
  • Unikanie wywoływania zewnętrznych usług sieciowych (430)
  • Obniżanie czasu oczekiwania serwera (430)
  • Optymalizacja bazy danych (431)
    • Włączenie pamięci podręcznej zapytań MySQL (431)
    • Wydajność silnika MySQL InnoDB w systemie Windows (431)
  • Wydajność Drupala (432)
    • Pozbycie się błędów 404 (432)
    • Wyłączenie niewykorzystywanych modułów (432)
  • Optymalizacje Drupala (432)
    • Pamięć podręczna dla stron (432)
    • Optymalizacja pasma (432)
    • Czyszczenie tabeli sesji (433)
    • Zarządzanie ruchem użytkowników zalogowanych (433)
    • Wywoływanie programu cron (434)
  • Architektury (434)
    • Pojedynczy serwer (434)
    • Odrębny serwer bazodanowy (434)
    • Odrębny serwer bazodanowy i klaster serwerów WWW (434)
    • Wiele serwerów baz danych (436)
  • Znajdowanie wąskich gardeł (436)
    • Serwer WWW z obciążonym procesorem (437)
    • Serwer WWW nie dysponuje wystarczającą ilością pamięci RAM (437)
  • Podsumowanie (440)

Rozdział 24. Profile instalacji (441)

  • Tworzenie nowego profilu instalacji (441)
    • Plik enhanced.info (441)
    • Plik enhanced.profile (442)
    • Plik enhanced.install (443)
  • Haki hook_install_tasks i hook_install_tasks_alter (455)
  • Podsumowanie (456)

Rozdział 25. Testowanie (457)

  • Konfiguracja środowiska testowego (457)
  • Tworzenie testów (459)
  • Funkcje testowe (464)
  • Asercje testowe (467)
  • Podsumowanie (470)

Dodatek A: Spis tabel bazy danych Drupala (471)

Dodatek B: Zasoby (511)

  • Programowanie (511)
    • Repozytorium kodu Drupala (GIT) (511)
    • Przykłady (511)
    • Dokumentacja API Drupala (512)
    • Porady dotyczące bezpieczeństwa (512)
    • Aktualizacja modułów (512)
    • Aktualizacja skórek (512)
  • Podręczniki (512)
  • Forum (512)
  • Listy dyskusyjne (513)
    • Development (513)
    • Themes (513)
    • Translations (513)
  • Grupy użytkowników (513)
  • Internet Relay Chat (513)
  • Ameryka Północna (514)
    • Europa (515)
    • Azja (516)
    • Ameryka Łacińska/Karaiby (516)
    • Oceania (516)
    • Afryka (516)
  • Nagrania wideo (517)
  • Dzienniki sieciowe (517)
  • Konferencje (517)
  • Obsługa Drupala (517)

Skorowidz (519)

  • Tytuł: Drupal 7. Zaawansowane programowanie
  • Autor: Todd Tomlinson, John K. VanDyk
  • Tytuł oryginału: Pro Drupal 7 Development
  • Tłumaczenie: Krzysztof Rychlicki-Kicior
  • ISBN: 978-83-246-3840-6, 9788324638406
  • Data wydania: 2011-11-23
  • Format: Ebook
  • Identyfikator pozycji: dru7zp
  • Wydawca: Helion