Drupal 7. Zaawansowane programowanie. Wydanie III
John K. VanDyk, Todd Tomlinson
Cena detaliczna: 79,00 zł
Twoja cena: 71,10 zł
Wydawnictwo: Helion
Oprawa: miękka
Numer katalogowy: 538237
Dostępność: 2 - 4 dni
Poleć znajomym:










Drupal 7. Zaawansowane programowanie. Wydanie III - opis
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
- 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
Drupal 7. Zaawansowane programowanie. Wydanie III - spis treści
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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- Konfiguracja środowiska testowego (457)
- Tworzenie testów (459)
- Funkcje testowe (464)
- Asercje testowe (467)
- Podsumowanie (470)
- 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)



