• Nie Znaleziono Wyników

WordPress. Tworzenie aplikacji internetowych. Wydanie II

N/A
N/A
Protected

Academic year: 2022

Share "WordPress. Tworzenie aplikacji internetowych. Wydanie II"

Copied!
38
0
0

Pełen tekst

(1)
(2)

Tytuł oryginału: Building Web Apps with WordPress: WordPress as an Application Framework, 2nd Edition

Tłumaczenie: Agnieszka Górczyńska ISBN: 978-83-283-6925-2

© 2021 Helion SA

Authorized Polish translation of the English edition of Building Web Apps with WordPress 2E ISBN 9781491990087 © 2020 Brian Messenlehner and Jason Coleman

This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher.

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Autorzy oraz Helion SA dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autorzy oraz Helion SA nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.

Helion SA

ul. Kościuszki 1c, 44-100 Gliwice tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl

WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku!

Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/wordp2

Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

Printed in Poland.

• Kup książkę

• Poleć książkę • Księgarnia internetowa

• Lubię to! » Nasza społeczność

(3)

Spis treści

Przedmowa ... 19 Wprowadzenie ... 21 1. Tworzenie aplikacji internetowych w WordPressie ... 27

Czym jest witryna internetowa? 27

Czym jest aplikacja? 27

Czym jest aplikacja internetowa? 27

Funkcje aplikacji internetowej 28

Aplikacje mobilne 30

Progresywne aplikacje internetowe 30

Dlaczego WordPress? 31

Jesteś już użytkownikiem WordPressa 31

Zarządzanie treścią w WordPressie jest łatwe 31

Łatwe i bezpieczne zarządzanie użytkownikami w WordPressie 32 Wtyczki 32

Elastyczność ma duże znaczenie 33

Częste uaktualnienia zabezpieczeń 33

Koszt 34 Odpowiedź na często pojawiającą się krytykę wybranych aspektów WordPressa 34

Kiedy nie używać WordPressa? 37

Planujesz licencjonować lub sprzedawać technologię witryny internetowej 37 Inna platforma szybciej doprowadzi Cię do celu 38

Elastyczność jest bez znaczenia 38

Aplikacja musi działać w czasie rzeczywistym 39

WordPress jako framework aplikacji 39

WordPress kontra frameworki MVC 40

Anatomia aplikacji internetowej WordPressa 42

Czym jest SchoolPress? 43

SchoolPress działa w sieci zawierającej wiele witryn WordPressa 43

(4)

Model biznesowy SchoolPressa 43

Poziomy członkostwa i role użytkowników 44

Klasy są grupami BuddyPress 44

Zadanie to przykład CPT 44

Rozwiązania zadań są podtypami CPT zadań 44

Semestry to taksonomie dla CPT klasy 45

Wydział to taksonomia dla CPT klasy 45

Aplikacja SchoolPress ma jedną główną niestandardową wtyczkę 45 Aplikacja SchoolPress używa kilku innych niestandardowych wtyczek 46 Aplikacja SchoolPress używa motywu Memberlite 46

2. Podstawy WordPressa ... 47

Struktura katalogu WordPressa 47

Katalog główny 48

/wp-admin 48 /wp-includes 48 /wp-content 48

Struktura bazy danych WordPressa 50

wp_options 50 Funkcje zdefiniowane w /wp-includes/option.php 50 wp_users 53 Funkcje zdefiniowane w plikach /wp-includes/pluggable.php

i /wp-includes/user.php 53

wp_usermeta 57 wp_posts 61 Funkcje zdefiniowane w /wp-includes/post.php 61 wp_postmeta 66 Funkcje zdefiniowane w /wp-includes/post.php 66 wp_comments 70 Funkcje zdefiniowane w /wp-includes/comment.php 71 wp_commentsmeta 75 Funkcje zdefiniowane w /wp-includes/comment.php 76 wp_terms 78 Funkcje zdefiniowane w /wp-includes/taxonomy.php 78 wp_termmeta 82 wp_term_taxonomy 84 Funkcje zdefiniowane w /wp-includes/taxonomy.php 85 wp_term_relationships 86

Zaczepy — akcje i filtry 87

Akcje 88 Filtry 88

(5)

Środowiska programistyczne i hostingowe 90

Praca lokalna 90

Wybór hostingu 91

Środowiska robocze i produkcyjne 92

Rozszerzanie WordPressa 92

3. Stosowanie wtyczek WordPressa ... 95

Licencja GPLv2 96

Instalowanie wtyczek WordPressa 96

Utworzenie własnej wtyczki 97

Struktura plików we wtyczce 98

/adminpages/ 99 /classes/ 99 /css/ 99 /js/ 101 /images/ 101 /includes/ 102 /includes/lib/ 102 /pages/ 102 /services/ 103 /scheduled/ 103 /schoolpress.php 104

Dodatki dla istniejących wtyczek 104

Przypadki użycia i przykłady 104

Pętla WordPressa 105

Zmienne globalne WordPressa 105

Wtyczki bezpłatne 115

Admin Columns 115

Advanced Custom Fields 115

BadgeOS 116

Posts 2 Posts 116

Members 117

W3 Total Cache 117

Yoast SEO 117

Wtyczki premium 118

Gravity Forms 118

BackupBuddy 118

WP All Import 118

Wtyczki społecznościowe 119

BuddyPress 119

(6)

4. Motywy ... 131

Motyw kontra wtyczka 131

Gdzie umieścić kod podczas tworzenia aplikacji? 131

Kiedy opracować wtyczkę? 132

Gdzie umieszczać kod podczas tworzenia motywu? 133

Hierarchia szablonu 133

Szablony strony 135

Przykładowy szablon strony 135

Stosowanie zaczepów do kopiowania szablonów 137

Kiedy należy używać szablonu motywu? 138

Funkcje WordPressa powiązane z motywem 139

Stosowanie funkcji locate_template() w motywach 140

Plik style.css 141

Wersjonowanie plików CSS motywu 142

Plik functions.php 143

Motywy i niestandardowe typy postów 144

Popularne frameworki motywów 144

Frameworki motywów WordPressa 144

Frameworki motywów przeznaczone nie tylko dla WordPressa 146

Tworzenie motywu potomnego dla Memberlite 146

Wykorzystanie frameworka Bootstrap w motywie aplikacji 147

Menu 148

Menu nawigacyjne 148

Menu dynamiczne 149

Responsywny układ strony 150

Wykrywanie urządzenia i ekranu za pomocą CSS 150 Wykrywanie urządzeń i funkcji za pomocą kodu JavaScript 152

Wykrywanie urządzenia w PHP 154

Słowo końcowe na temat wykrywania przeglądarki WWW 157

5. Niestandardowe typy postów, metadane postów i taksonomie ... 159

Domyślne i niestandardowe typy postów 159

Strona 159 Post 159 Załącznik 159 Wersja 160

Element menu nawigacyjnego 160

Niestandardowe style CSS 160

Changeset 160

Bufor oEmbed 160

(7)

Żądania użytkowników 161

Bloki kodu wielokrotnego użycia 161

Definiowanie i rejestrowanie niestandardowych typów postów 161

register_post_type( $post_type, $args ); 162

Co to jest taksonomia i jak należy z niej korzystać? 171

Taksonomie kontra metadane posta 171

Tworzenie niestandardowych taksonomii 173

register_taxonomy( $taxonomy, $object_type, $args ) 173 register_taxonomy_for_object_type( $taxonomy, $object_type ) 177 Stosowanie niestandardowych typów postów i taksonomii

we własnych motywach i wtyczkach 177

Szablony stron archiwum i pojedynczego posta w motywie 177 Stare dobre komponenty WP_Query i get_posts() 178

Metadane w niestandardowych typach postów 181

add_meta_box( $id, $title, $callback, $screen, $context, $priority, $callback_args ) 182 Stosowanie elementów obsługi metadanych w edytorze bloków 184 Opakowania klas dla niestandardowych typów postów 185 Rozszerzanie klasy WP_Post kontra opakowanie obiektu tej klasy 187

Po co używać klasy opakowania? 188

CTP i taksonomie będą w jednym miejscu 188

Definiowanie kodu w klasie opakowania 189

Klasa opakowania jest czytelniejsza 191

6. Użytkownicy, role i uprawnienia ...193

Pobieranie danych użytkownika 194

Dodawanie, uaktualnianie i usuwanie użytkowników 196

Zaczepy i filtry 199

Czym są role i uprawnienia? 200

Sprawdzanie ról i uprawnień użytkownika 200

Tworzenie niestandardowych ról i uprawnień 202

Rozszerzanie klasy WP_User 203

Dodanie właściwości rejestracji i profilu 205

Dostosowanie do własnych potrzeb tabeli użytkowników w panelu głównym 209 Wtyczki 211

Theme My Login 211

Ukrycie paska administracyjnego przed użytkownikami

niebędącymi administratorami 212

Paid Memberships Pro 212

Paid Memberships Pro Register Helper 212

Members 213

WP User Fields 213

(8)

7. Praca z API WordPressa, obiektami i funkcjami pomocniczymi ... 215

API skrótów 215

Atrybuty skrótu 216

Skróty zagnieżdżone 217

Usunięcie skrótu 217

Inne użyteczne funkcje powiązane ze skrótami 218

API widżetów 219

Zanim zaczniesz dodawać własny widżet 220

Dodawanie widżetu 220

Definiowanie obszaru widżetu 223

Osadzanie widżetu poza dynamicznym paskiem bocznym 225

API widżetów w panelu głównym WordPressa 226

Usunięcie widżetu panelu głównego 227

Dodawanie własnego widżetu panelu głównego 228

API ustawień 231

Czy naprawdę potrzebna jest strona ustawień? 231 Czy zamiast ustawień można użyć zaczepu lub filtru? 232 Stosowanie standardów podczas dodawania ustawień 233 Ignorowanie standardów podczas dodawania ustawień 233

API przepisywania adresów URL 234

Dodawanie reguły przepisywania adresu URL 235

Usuwanie reguły przepisywania adresu URL 236

Inne funkcje przepisywania adresów URL 237

WP-Cron 239

Definiowanie niestandardowego odstępu czasu 241

Tworzenie harmonogramu dla pojedynczych zdarzeń 241

Wywoływanie zadań mechanizmu cron z serwera 242

Stosowanie zadań mechanizmu cron jedynie po stronie serwera 243

WP Mail 244

Wysyłanie ładniejszych wiadomości e-mail za pomocą WordPressa 245

API nagłówka pliku 246

Dodawanie nagłówków plików do własnych plików 248 Dodawanie nowych nagłówków do wtyczek i motywów 249

API Heartbeat 250

8. Bezpieczny WordPress ... 255

Dlaczego bezpieczeństwo jest ważne? 255

Podstawy zapewnienia bezpieczeństwa 256

Regularnie uaktualniaj oprogramowanie 256

Nie używaj nazwy użytkownika admin 256

Używaj silnych haseł 256

(9)

Przykłady beznadziejnych haseł 257

Przykłady dobrych haseł 257

Zabezpieczenie WordPressa 258

Nie zezwalaj administratorowi na edycję wtyczek lub motywów 258

Zmień domyślny prefiks tabel bazy danych 258

Przenieś wp-config.php 259

Ukryj komunikaty błędów logowania 259

Ukryj numer wersji WordPressa 260

Uniemożliw logowanie poprzez stronę wp-login.php 260 Dodaj niestandardowe reguły .htaccess w celu zabezpieczenia strony wp-admin 261

Certyfikaty SSL i HTTPS 262

Instalacja certyfikatu SSL w serwerze 262

Stosowanie szyfrowania SSL na stronach logowania i administracyjnych 265

Debugowanie problemów związanych z HTTPS 266

Zapobieganie błędom dzięki „opcji nuklearnej” 266

Twórz kopię zapasową całości! 268

Skanuj, skanuj i skanuj! 269

Użyteczne wtyczki zapewnienia bezpieczeństwa 269

Wtyczki związane z blokowaniem spamu 269

Wtyczki związane z tworzeniem kopii zapasowej 270 Wtyczki związane z zaporą sieciową i skanowaniem 270

Wtyczki związane z logowaniem i hasłami 271

Tworzenie bezpiecznego kodu 271

Sprawdzenie uprawnień użytkownika 272

Niestandardowe zapytania SQL 273

Weryfikacja danych, ich oczyszczanie i stosowanie znaków sterujących 273

Jednokrotnie używana liczba 278

9. Frameworki JavaScript ...285

Co to jest ECMAScript 286

Co to jest ES6 286

Co to jest ES9 287

Co to jest ESNext 287

Co to jest AJAX 287

Co to jest JSON 287

jQuery i WordPress 287

Dodawanie innych bibliotek JavaScript 288

Gdzie umieszczać niestandardowy kod JavaScript 289

Wywołania AJAX za pomocą WordPressa i jQuery 290

Zarządzanie wieloma żądaniami AJAX 295

API Heartbeat 296

(10)

Ograniczenia WordPressa związane z przetwarzaniem asynchronicznym 301

Frameworki JavaScript 302

Backbone.js 302 React 303

10. API REST WordPressa ... 305

Czym jest API REST? 305

API 305 REST 306 JSON 306 HTTP 306

Dlaczego warto używać API REST WordPressa 309

Używanie wersji drugiej API REST WordPressa 311

Odkrycie 311 Uwierzytelnianie 311

Trasy i punkty końcowe 316

Żądania 317 Odpowiedź 320

Dodawanie własnych tras i punktów końcowych 321

register_rest_route( $namespace, $route, $args, $override ); 321 Konfiguracja wtyczki Single Sign-On w WordPressie 322

Dodanie trasy /wp-sso/v1/check 322

Stosowanie uwierzytelniania prostego w omawianej wtyczce 323 Używanie zdefiniowanego punktu końcowego do sprawdzenia danych

uwierzytelniających użytkownika 324

Popularne wtyczki używające API REST WordPressa 325 WooCommerce 325 BuddyPress 327

Paid Memberships Pro 328

11. Projekt Gutenberg, bloki i niestandardowe typy postów ... 333

Edytor WordPressa 334

Wtyczka Classic Editor 335

Używanie bloków podczas tworzenia treści i projektu 335

Używanie bloków do tworzenia funkcjonalności 335

Tworzenie własnego bloku 335

Przykład minimalnego bloku 336

Używanie bloków niestandardowych do tworzenia aplikacji 337 Włączenie edytora bloków w niestandardowych typach postów 338

Kategorie bloków 338

Bloki Homework 339

(11)

Ograniczenie bloków do określonych CPT 339

Ograniczenie CPT do określonych bloków 340

Szablon bloku 341

Zapisywanie danych bloku w metadanych posta 342

Podpowiedzi 343

Włączenie WP_SCRIPT_DEBUG 343

Używanie wywołania filemtime() dla wersji skryptu 344

Więcej podpowiedzi 344

Poznaj dokładnie JavaScript, Node.js i React 344

12. Sieć witryn internetowych WordPressa ...347

Dlaczego sieć witryn internetowych 347

Dlaczego nie należy korzystać z sieci witryn 348

Alternatywy dla sieci witryn 349

Wielu autorów lub kategorii w tej samej witrynie WordPressa 349

Niestandardowe typy postów 349

Oddzielne witryny internetowe 349

Używanie usługi konserwacji WordPressa 349

Wielodostępność 350

Przygotowanie sieci witryn 350

Zarządzanie siecią witryn WordPressa 352

Panel główny 353

Witryny internetowe 353

Użytkownicy 353 Motywy 354 Wtyczki 354 Ustawienia 355 Uaktualnienia 356

Struktura bazy danych sieci witryn 356

Tabele o zasięgu sieci 356

Tabele poszczególnych witryn 358

Współdzielone tabele witryny internetowej 359

Mapowanie domeny 360

Wtyczki użyteczne w sieci witryn internetowych 360

Gravity Forms User Registration Add-On 361

Dodatek Member Network Sites dla wtyczki Paid Memberships Pro 361

Multisite Global Media 361

Multisite Plugin Manager 361

Multisite Robots.txt Manager 361

NS Cloner — Site Copier 362

WP Multi Network 362

(12)

Podstawowa funkcjonalność sieci witryn WordPressa 362

$blog_id 362 is_multisite() 363 get_current_blog_id() 363

switch_to_blog( $new_blog ) 363

restore_current_blog() 364 get_blog_details( $fields = null, $get_all = true ) 364 update_blog_details( $blog_id, $details = array() ) 366

get_blog_status( $id, $pref ) 366

update_blog_status( $blog_id, $pref, $value ) 367 get_blog_option( $id, $option, $default = false ) 367

update_blog_option( $id, $option, $value ) 367

delete_blog_option( $id, $option ) 368

get_blog_post( $blog_id, $post_id ) 368

add_user_to_blog( $blog_id, $user_id, $role ) 369

wpmu_delete_user( $user_id ) 369

create_empty_blog( $domain, $path, $weblog_title, $site_id = 1 ) 370

Funkcje niewymienione w tym podrozdziale 370

13. Lokalizacja aplikacji WordPressa ... 371

Czy w ogóle zachodzi potrzeba lokalizacji aplikacji 371 Jak lokalizacja jest przeprowadzana w WordPressie 372

Definiowanie lokalizacji w WordPressie 372

Domeny tekstu 373

Definiowanie domeny tekstu 373

Przygotowanie ciągów tekstowych za pomocą funkcji tłumaczeń 375

__( $text, $domain = "default" ) 375

_e( $text, $domain = "default" ) 376

_x( $text, $context, $domain = "default" ) 376 _ex( $title, $context, $domain = "default" ) 377 Jednoczesne tłumaczenie tekstu i stosowanie znaków sterujących 377

Tworzenie i wczytywanie plików tłumaczeń 377

Struktura pliku do lokalizacji 378

Generowanie pliku .pot 379

Utworzenie pliku .po 380

Utworzenie pliku .mo 381

GlotPress 381 Używanie narzędzia GlotPress dla wtyczek

i motywów umieszczanych w repozytorium WordPress.org 381

Utworzenie własnego serwera GlotPress 381

(13)

14. Optymalizacja i skalowanie WordPressa ...383

Terminologia 383

Źródło kontra krawędź 385

Testowanie 385

Co będzie testowane 386

Pasek debugowania w Chrome 388

Narzędzie Stan witryny WordPressa 390

Apache Bench 390

Siege 397

W3 Total Cache 397

Ustawienia Page Cache 398

Minimalizacja 400

Buforowanie bazy danych 401

Buforowanie obiektów 401

Sieć CDN 402

Kompresja GZIP 402

Hosting 402

Hosting przygotowany z myślą o WordPressie 403

Utworzenie własnego serwera 403

Buforowanie selektywne 416

API Transient 416

Elementy tymczasowe dla wielu witryn internetowych 419 Używanie JavaScriptu do poprawy wydajności działania 420

Tabele niestandardowe 421

Pominięcie WordPressa 423

15. E-commerce ...425

Wybór wtyczki 425

WooCommerce 426

Paid Memberships Pro 428

Easy Digital Downloads 429

Bramki płatności 432

Konto sprzedawcy 432

Konfigurowanie modelu Saas przy użyciu wtyczki Paid Memberships Pro 434

Model SaaS 434

Etap 0. — ustalenie sposobu pobierania opłaty za korzystanie z aplikacji 434 Etap 1. — instalowanie i aktywowanie wtyczki Paid Memberships Pro 435

Etap 2. — ustalenie poziomu członkostwa 435

Etap 3. — konfiguracja stron 437

Etap 4. — wybór ustawień płatności 437

Etap 5. — wybór ustawień wiadomości e-mail 439

(14)

Etap 6. — wybór ustawień zaawansowanych 440

Etap 7. — uniemożliwianie dostępu do stron 441

Etap 8. — dostosowanie wtyczki Paid Memberships Pro do własnych potrzeb 443

16. Aplikacje mobilne na bazie WordPressa ... 449

Przypadki użycia aplikacji mobilnych 449

Natywne i hybrydowe aplikacje mobilne 450

Co to jest natywna aplikacja mobilna 450

Co to jest hybrydowa aplikacja mobilna 451

Dlaczego lepiej wybrać aplikację hybrydową zamiast natywnej 451 Cordova 452

Framework Ionic 457

Opakowanie aplikacji 458

AppPresser 459

17. Biblioteki PHP, integracje usług sieciowych, migracje platform ... 475

Biblioteki PHP 475

Generowanie i przetwarzanie obrazów 476

Generowanie dokumentu PDF 478

Geolokalizacja i geotargetowanie 483

Kompresja i archiwizowanie plików 485

Narzędzia programistyczne 489

Zewnętrzne API i usługi sieciowe 491

Elasticsearch 491

ElasticPress firmy 10up 491

Google Vision 492

Mapy Google 492

Tłumacz Google 493

Twilio 493

Inne popularne interfejsy API 494

Migracje 495

Migracja hosta 496

Migracja platformy 497

Utworzenie przewodnika mapowania danych 499

18. Przyszłość ... 501

Jak to było wcześniej 501

API REST 502

Wtyczki WordPressa będą bardziej skoncentrowane na API 502

Headless WordPress 502

GraphQL 503

(15)

Projekt Gutenberg 504 Interfejs administracyjny zostanie przeniesiony do rozwiązania

opartego na React i Gutenberg 504

Gutenberg zapewni obsługę edycji we frontendzie WordPressa 504

Szablon bloku zastąpi motyw 504

Bloki zastąpią wtyczki 505

Udział WordPressa w rynku będzie się zmieniał 505

WordPress stanie się znacznie popularniejszą platformą

do tworzenia aplikacji mobilnych 506

WordPress wciąż będzie użyteczny

podczas tworzenia różnych aplikacji internetowych 506

(16)
(17)

ROZDZIAŁ 1.

Tworzenie aplikacji internetowych w WordPressie

Ta książka pomoże Ci utworzyć w WordPressie witrynę internetową, motyw, wtyczkę, usługę sie- ciową i aplikację internetową. Zdecydowaliśmy się skoncentrować na aplikacjach internetowych, ponieważ można je postrzegać jako superwitryny internetowe pozwalające wykorzystywać wszystkie techniki przedstawione w tej książce.

Wiele osób jest przekonanych, że WordPress nie ma wystarczających możliwości do tworzenia aplikacji internetowych lub nie został opracowany w tym celu. Do tego tematu jeszcze powrócimy w dalszej części rozdziału. Od wielu lat tworzymy aplikacje internetowe WordPressa i wiemy, że doskonale nadaje się on do budowania skalowalnych aplikacji.

W tym rozdziale zaczniemy od zdefiniowania aplikacji internetowej, a następnie wyjaśnimy, dla- czego WordPress to doskonały framework przeznaczony do jej tworzenia. Zaprezentujemy rów- nież kilka wybranych sytuacji, w których użycie WordPressa nie będzie najlepszym rozwiązaniem podczas tworzenia aplikacji internetowej.

Czym jest witryna internetowa?

Doskonale wiesz, czym jest witryna internetowa: to jedna lub więcej stron internetowych zawie- rających informacje i dostępnych za pomocą przeglądarki WWW.

Czym jest aplikacja?

Lubimy definicję zamieszczoną w Wikipedii (en.wikipedia.org/wiki/Application_software): „apli- kacja to oprogramowanie zaprojektowane do wykonywania grupy powiązanych ze sobą funkcji, zadań lub czynności, które oferują pewną korzyść użytkownikowi”.

Czym jest aplikacja internetowa?

Aplikacja internetowa to po prostu aplikacja uruchomiona w przeglądarce WWW.

(18)

Zwróć uwagę na to, że w przypadku niektórych aplikacji internetowych technologia przeglądarki WWW pozostaje ukryta — np. podczas integracji aplikacji internetowej z natywną aplikacją sys- temu iOS lub Android, podczas uruchamiania witryny internetowej jako aplikacji w Google Chrome, a także podczas uruchamiania aplikacji w środowisku Adobe AIR. Jednak wewnątrz tych aplikacji nadal znajduje się system przetwarzający dane w HTML, CSS i JavaScripcie.

Aplikację internetową można traktować także jako witrynę internetową wraz z dodatkami przy- pominającymi aplikację. Nie istnieje wyraźna granica, po której przekroczeniu witryna interneto- wa staje się aplikacją internetową. To jest przykład jednej z tych sytuacji, w których zobaczywszy witrynę internetową, od razu będziesz wiedzieć, że masz do czynienia z aplikacją internetową.

Natomiast można wyjaśnić pewne funkcje aplikacji internetowej, przedstawić przykłady i spró- bować zaprezentować skróconą definicję, aby Czytelnik ogólnie wiedział, co mamy na myśli, gdy w tekście książki stosujemy wyrażenie „aplikacja internetowa”.

Podczas lektury książki będziesz napotykać odwołania do SchoolPressa. Jest to aplika- cja internetowa, którą budujemy, aby pomóc szkołom i nauczycielom w zarządza- niu uczniami i programem nauczania. Wszystkie przykładowe fragmenty kodu zo- stały przygotowane z myślą o funkcjonalności, która może istnieć w SchoolPressie.

Więcej informacji na temat ogólnych koncepcji stojących za aplikacją SchoolPress znajdziesz w dalszej części rozdziału.

Funkcje aplikacji internetowej

W tej sekcji wymieniamy typowe funkcje powiązane z aplikacjami internetowymi i ogólnie z apli- kacjami. Im więcej tych funkcji znajdziesz w witrynie internetowej, tym bardziej odpowiednie jest nazywanie jej aplikacją internetową1.

Elementy interaktywne

Typowa witryna internetowa oznacza poruszanie się między tworzącymi ją stronami, wczy- tywanie tych stron, przewijanie treści i klikanie łączy. Aplikacja internetowa również może mieć łącza i wymagać przewijania, ale zwykle wykorzystuje inne metody umożliwiające poru- szanie się po aplikacji.

Witryny internetowe wraz z formularzami oferują możliwość obsługi transakcji. Przykładem może być formularz kontaktowy w witrynie internetowej lub formularz aplikacji na stronie zawierającej oferty pracy w danej firmie. Formularze pozwalają użytkownikom pracować z witryną za pomocą czegoś więcej niż tylko kliknięć.

Aplikacje internetowe oferują jeszcze bardziej interaktywne elementy interfejsu użytkownika.

Do przykładów zaliczamy paski narzędzi, elementy typu „przeciągnij i upuść”, edytory boga- tego tekstu i paski przewijania.

1Wiele idei przedstawionych w tej sekcji zostało zainspirowanych następującymi postami z blogów: „What is a Web Application?” napisany przez Dominique Hazae’l-Massieux i opublikowany na stronie http://people.w3.org/~dom/

archives/2010/08/what-is-a-web-application/ oraz „What is a Web Application?” napisany przez Boba Baxleya i opublikowany na stronie http://boxesandarrows.com/what-is-a-web-application/.

(19)

Zadania zamiast treści

Pamiętaj, że aplikacje internetowe są „zaprojektowane, aby pomóc użytkownikowi w wyko- nywaniu określonych zadań”. Mapy Google dostarczają użytkownikom wskazówki ułatwiające dotarcie pod wskazany adres. Użytkownicy usługi Gmail tworzą wiadomości e-mail. Użyt- kownicy serwisu Trello zarządzają listami. Użytkownicy serwisu SchoolPress komentują zdarze- nia zachodzące w klasie.

Część aplikacji nadal koncentruje się na treści. Typowa sesja w aplikacji Facebook lub Twitter obejmuje 90% czasu czytania. Jednak same aplikacje zapewniają możliwość przeglądania treści w inny sposób niż w przypadku tradycyjnej witryny internetowej.

Loginy

Loginy i konta pozwalają aplikacji internetowej zapisywać informacje o użytkownikach. Te in- formacje są później używane podczas wykonywania głównych zadań aplikacji i dla zapew- nienia trwałego przechowywania danych. Po zalogowaniu się użytkownik serwisu School- Press widzi, których tematów nie przeczytał. Otrzymuje również nazwę użytkownika określającą jego aktywność w aplikacji.

Aplikacja internetowa może też mieć grupy użytkowników. W przypadku aplikacji School- Press istnieją administratorzy nadzorujący wewnętrzny sposób działania aplikacji, nauczy- ciele tworzący klasy oraz uczniowie biorący udział w dyskusjach prowadzonych w klasach.

Wykorzystanie możliwości urządzeń

Aplikacja internetowa uruchomiona w smartfonie może uzyskać dostęp do aparatu fotogra- ficznego, książki adresowej, wewnętrznego magazynu danych, dostarczanych przez GPS in- formacji o położeniu itd. Z kolei aplikacja internetowa uruchomiona w tradycyjnym kom- puterze może mieć dostęp do kamery internetowej i dysku twardego. Ta sama aplikacja internetowa może reagować odmiennie w zależności od urządzenia, w którym została uru- chomiona. Aplikacja internetowa dostosuje się do wielkości ekranu, rozdzielczości i możli- wości urządzenia.

Praca w trybie offline

Gdy jest to możliwe, dobrym rozwiązaniem jest zapewnienie aplikacji możliwości działania w trybie offline. Oczywiście interaktywność internetu jest tym, co definiuje „internetową” część aplikacji. Jednak witryna internetowa, działająca, gdy jedziesz samochodem w tunelu, będzie przypominała bardziej aplikację.

W przypadku serwisu Gmail wiadomość e-mail można tworzyć w trybie offline. Evernote po- zwala na tworzenie notatek w trybie offline, a następnie ich synchronizację z internetem po przywróceniu połączenia.

Mashupy

Istnieje możliwość połączenia jednej lub więcej aplikacji internetowych. Aplikacja interneto- wa może wykorzystywać różne usługi sieciowe i API w celu przekazywania i pobierania danych.

Możesz mieć aplikację internetową pobierającą dane o położeniu, np. długość i szerokość geograficzną, z serwisu Twitter lub Foursquare i przekazującą je do serwisu Mapy Google.

(20)

Aplikacje mobilne

Wydanie pierwsze tej książki zostało opublikowane w 2012 roku — od tamtej chwili jesteśmy świadkami gwałtownego rozwoju aplikacji internetowych, w szczególności aplikacji mobilnych.

W większości witryn internetowych urządzenia mobilne wyprzedziły tradycyjne komputery i generują najwięcej ruchu sieciowego (źródło: Perficient Inc., https://www.perficientdigital.com/insights/

our-research/mobile-vs-desktop-usage-study).

W 2012 roku typowa aplikacja internetowa wyglądała jak Basecamp, oprogramowanie menedżera projektu dostępne w komputerze za pomocą przeglądarki WWW. Natomiast w 2019 roku typowa aplikacja internetowa wygląda jak Twitter, aplikacja komunikacyjna dostępna za pomocą smart- fona działającego pod kontrolą systemu iOS lub Android.

Ponieważ w większości przypadków duża część użytkowników uzyskuje dostęp do witryny inter- netowej i aplikacji za pomocą urządzeń mobilnych, podczas projektowania i tworzenia aplikacji internetowych stosowane jest podejście „najpierw wersja mobilna”. Temat natywnego urucha- miania aplikacji WordPressa zostanie omówiony w rozdziale 16. Natomiast podstawy projektu re- sponsywnego i przygotowanie witryny internetowej do prawidłowego wyświetlania na ekranie o każdej wielkości dokładniej omówimy w rozdziale 4.

Progresywne aplikacje internetowe

Progresywne aplikacje internetowe (ang. progressive web apps, PWA) to witryny internetowe, które wy- korzystują zalety funkcji nowoczesnych przeglądarek WWW umożliwiające działanie tych witryn jak natywnych aplikacji w systemach iOS, Android oraz w tradycyjnych komputerach. W szczegól- ności witryny internetowe używające tzw. usług roboczych do funkcjonowania w trybie offline mają plik manifestu aplikacji internetowej, który pozwala zdefiniować aplikację w systemie opera- cyjnym oraz spełnić kilka innych wymagań, aby możliwe było uruchamianie takiej aplikacji bez- pośrednio z przeglądarki WWW.

Orędownikiem progresywnych aplikacji internetowych był zespół Google Chrome, a teraz te aplikacje są obsługiwane także w systemie iOS oraz w większości nowoczesnych przeglądarek WWW. Do- stępna jest wtyczka (https://wordpress.org/plugins/pwa/) oferująca obsługę podstawowych funkcji PWA w WordPressie. Dzięki tej wtyczce można witrynę internetową WordPressa zmienić w aplikację PWA. Wprawdzie to jest dobry pomysł, ale w rzeczywistości tworzenie kodu PWA jest bardziej związane z nastawieniem niż z faktyczną konwersją. Podobnie jak w przypadku przedstawionych wcześniej „funkcji aplikacji internetowej” strona główna PWA w serwisie Google (https://web.dev/

progressive-web-apps/) zawiera listę m.in. następujących funkcji oczekiwanych od większości aplikacji typu PWA (https://web.dev/pwa-checklist/):

witryna korzysta z protokołu HTTPS;

strony są responsywne w tabletach i innych urządzeniach mobilnych;

wszystkie adresy URL aplikacji działają po jej przejściu do trybu offline;

dostarczone są metadane pozwalające dodać witrynę do ekranu głównego urządzenia;

pierwsze wczytanie witryny jest szybkie nawet w przypadku połączenia 3G;

(21)

witryna działa w każdej przeglądarce WWW;

przejścia między stronami nie blokują sieci;

każda strona ma adres URL.

Poza wymienionymi tutaj podstawowymi funkcjami istnieje także lista rzeczy do sprawdzenia dla

„wzorowych” aplikacji typu PWA obejmujących UX i wydajność działania. Narzędzie Lighthouse firmy Google (https://developers.google.com/web/tools/lighthouse/) oferuje testy zautomatyzowane i raporty dotyczące spełniania kryteriów PWA. Nawet aplikacje w pełni natywne lub utworzone dla przeglądarki WWW mogą czerpać korzyści z pewnych sugestii zamieszczonych na liście rze- czy do sprawdzenia PWA oraz w raportach Lighthouse.

Dlaczego WordPress?

Żaden język programowania lub narzędzie nie będzie odpowiednim wyborem do wykonania każdego zadania. Wkrótce się dowiesz, dlaczego nie należy wybierać WordPressa, teraz natomiast chcemy się skoncentrować na sytuacjach, w których wykorzystanie WordPressa do utworzenia aplikacji internetowej jest dobrym rozwiązaniem.

Jesteś już użytkownikiem WordPressa

Jeżeli już używasz WordPressa do udostępnienia głównej witryny internetowej, dodanie niezbędnej funkcjonalności będzie wymagało niewiele pracy. WordPress oferuje ogromny wybór wtyczek dla e-commerce (WooCommerce), forów (bbPress), witryn obsługi użytkowników (Paid Member- ships Pro), funkcjonalności związanej z serwisami społecznościowymi (BuddyPress) i gamifikacją (BadgeOS).

Budowa aplikacji internetowej na podstawie istniejącej witryny internetowej WordPressa pozwoli na dużą oszczędność czasu i ułatwi pracę jej użytkownikom. Dlatego jeśli aplikacja jest dość pro- sta, można utworzyć dla witryny WordPressa własną wtyczkę zawierającą funkcjonalność nie- zbędną dla aplikacji internetowej.

Jeżeli jesteś zadowolony z użycia WordPressa w istniejącej witrynie, nie martw się, słysząc, że mu- sisz uaktualnić coś jeszcze, aby dodać określoną funkcjonalność do witryny. Prawdopodobnie to nieprawda. Nie musisz pozbywać się wykonanej dotąd pracy w WordPressie, a wcześniej zdobyte doświadczenie to doskonały powód, by pozostać przy wyborze tej właśnie platformy.

Zarządzanie treścią w WordPressie jest łatwe

Na początku WordPress opracowano jako platformę przeznaczoną do publikacji blogów. Na przestrzeni lat ewoluował i wraz z wprowadzeniem niestandardowych typów postów (ang. custom post types, CPT) w wydaniu 3.0 WordPress zyskał w pełni funkcjonalny system zarządzania treścią (ang. content management system, CMS). Każda strona lub post mogą być edytowane przez admini- stratorów za pomocą panelu głównego (ang. dashboard), do którego dostęp odbywa się za pomo- cą przeglądarki WWW. Więcej informacji na temat pracy z CPT znajdziesz w rozdziale 5.

(22)

WordPress ułatwia dodawanie i edytowanie treści dzięki edytorowi działającemu w trybie WY- SIWYG (ang. what you see is what you get), więc nie musisz się zwracać do projektanta interne- towego za każdym razem, gdy chcesz wprowadzić prostą zmianę w witrynie internetowej. Po- nadto możesz tworzyć własne menu i elementy nawigacyjne dla witryny nawet bez tworzenia jakiegokolwiek kodu.

Jeżeli aplikacja internetowa koncentruje się na treści (np. podstawowe funkcje aplikacji School- Press to zlecanie zadań i dyskusje), to omówione w rozdziale 5. API CPT dla WordPressa pozwala na łatwe i szybkie przygotowanie treści dla użytkowników i zarządzanie nią.

Nawet w przypadku aplikacji bardziej ukierunkowanych na zadania zwykle istnieje kilka stron zawie- rających informacje, dokumentację i inne dane, np. związane ze sprzedażą. Użycie WordPressa do utworzenia aplikacji internetowej oznacza, że aplikacją i jej całą treścią możesz zarządzać w jednym miejscu.

Łatwe i bezpieczne zarządzanie użytkownikami w WordPressie

WordPress zawiera wszystko to, co jest potrzebne w celu dodawania użytkowników administra- cyjnych i końcowych do witryny internetowej.

Poza kontrolą dostępu do treści system ról i możliwości w WordPressie jest rozszerzalny oraz po- zwala kontrolować, które akcje są dostępne dla poszczególnych grup użytkowników. Na przykład domyślnie użytkownik w roli o nazwie contributor może dodawać nowe posty, ale nie może ich publikować. Podobnie można tworzyć nowe role i definiować nowe możliwości, aby w ten sposób zarządzać dostępem do własnego systemu funkcjonalności.

Wtyczki takie jak Paid Membership Pro rozszerzają wbudowane możliwości zarządzania użyt- kownikami i pozwalają na desygnowanie członków na różnych poziomach i kontrolowanie treści, do której użytkownicy mają dostęp. Przykładowo można utworzyć poziom zapewniający dostęp do treści dodatkowej witryny WordPressa tym użytkownikom, którzy wykupili taką możliwość.

Wtyczki

W repozytorium WordPressa istnieje ponad 55 000 bezpłatnie dostępnych wtyczek (https://wordpress.

org/plugins/). Znacznie większa liczba wtyczek, zarówno płatnych, jak i bezpłatnych, jest dostępna w innych witrynach internetowych. Gdy wpadniesz na pomysł, by utworzyć rozszerzenie dla wi- tryny internetowej, istnieje duże prawdopodobieństwo, że taka wtyczka została już wcześniej opracowana, co pozwala zaoszczędzić czas i pieniądze.

W repozytorium znajdziesz wiele niezastąpionych wtyczek, które ostatecznie znajdą zastosowanie w każdej tworzonej przez Ciebie witrynie internetowej i aplikacji internetowej.

W praktycznie każdej tworzonej witrynie internetowej będziesz chciał m.in. zastosować buforo- wanie danych wyjściowych (co pozwala przyspieszyć operacje przeglądania stron), wykorzystać narzędzia takie jak Google Analytics do śledzenia odwiedzających, utworzyć mapę witryny, dosto- sować ustawienia strony w taki sposób, aby stała się przyjazna technikom optymalizacji dla wyszuki- warek internetowych (ang. search engine optimization, SEO).

(23)

Istnieje wiele doskonałych wtyczek przeznaczonych do wykonywania wymienionych funkcji.

W książce przedstawimy nasze ulubione, a pełną ich listę znajdziesz w witrynie poświęconej książce (https://web.archive.org/web/20191103020221/https://bwawwp.com/plugins/).

Elastyczność ma duże znaczenie

WordPress to w pełni wyposażony framework oferujący naprawdę potężne możliwości. Został zbudowany w oparciu o technologie PHP, JavaScript i MySQL, więc to, co można utworzyć za pomocą PHP i MySQL (czyli praktycznie wszystko), można także dość łatwo zrobić w aplikacji WordPressa.

Ogólnie rzecz biorąc, WordPress oraz PHP i MySQL to nie jest doskonałe rozwiązanie dla każde- go zadania, choć to połączenie sprawdza się w wielu różnych przypadkach. Wykorzystanie jednej platformy rozwijającej się wraz z firmą pozwala na szybsze działanie i dostosowywanie się do zmian.

Oto typowy proces rozwoju i rozbudowy witryny w przypadku witryny internetowej startupu zbudowanej w WordPressie:

1. Zaprezentowanie startupu za pomocą witryny internetowej składającej się z jednej strony.

2. Dodanie formularza umożliwiającego gromadzenie adresów e-mail.

3. Dodanie bloga.

4. Skoncentrowanie się na technikach SEO i optymalizacji całej treści.

5. Przekazywanie postów bloga do serwisów Twitter i Facebook.

6. Dodanie forum.

7. Użycie wtyczki Paid Membership Pro, aby umożliwić użytkownikom wnoszenie opłat za dostęp do treści witryny internetowej.

8. Dodanie niestandardowych formularzy, narzędzi i funkcjonalności aplikacji dla użytkowni- ków płacących za dostęp do treści.

9. Uaktualnienie interfejsu użytkownika za pomocą frameworków i technik JavaScriptu.

10. Dostosowanie witryny internetowej i serwera do skalowania.

11. Lokalizacja witryny internetowej i aplikacji dla różnych krajów i języków.

12. Dodanie obsługi progresywnej aplikacji internetowej.

13. Przygotowanie opakowań iOS i Android dla aplikacji internetowej.

Pozytywnym aspektem przejścia przez ten proces jest to, że na każdym etapie masz do dyspozycji tę samą bazę danych użytkowników i korzystasz z tej samej platformy programistycznej.

Częste uaktualnienia zabezpieczeń

Fakt wykorzystywania WordPressa przez witryny internetowe powoduje, że stanowi on cel dla hakerów próbujących złamać jego zabezpieczenia. W przeszłości części hakerów to się udało, na szczęście programiści tworzący WordPressa dość szybko reagują na znalezione luki w zabezpie- czeniach i wydają usuwające je poprawki. Można to porównać do sytuacji, w której miliony osób nieustannie testują i poprawiają oprogramowanie, ponieważ dokładnie z tym mamy do czynienia.

(24)

Architektura stojąca za WordPressem powoduje, że stosowanie uaktualnień to proces szybki i bezproblemowy, nawet dla użytkowników dopiero rozpoczynających pracę z tą platformą. Jeżeli potrafisz zainstalować i uaktualnić WordPress do najnowszej dostępnej wersji, wówczas dla wi- tryny internetowej masz do dyspozycji znacznie bezpieczniejszą platformę niż jakakolwiek inna aktualnie dostępna. Tematem zapewnienia bezpieczeństwa zajmiemy się w rozdziale 8.

Koszt

WordPress jest bezpłatny, PHP jest bezpłatny, MySQL jest bezpłatny i większość wtyczek Word- Pressa jest bezpłatnych.

Wprawdzie serwery i hosting wymagają opłat, ale w zależności od wielkości aplikacji internetowej i natężenia generowanego przez nią ruchu sieciowego ten koszt może być względnie niewielki. Jeżeli wymagasz funkcjonalności niedostępnej w żadnej istniejącej wtyczce, wtedy będzie trzeba zatrudnić programistę i zlecić mu utworzenie odpowiedniej wtyczki. Jeżeli sam jesteś programistą, nie mu- sisz ponosić tego kosztu i wystarczy, że poświęcisz trochę czasu na opracowanie wtyczki.

Odpowiedź na często pojawiającą się krytykę wybranych aspektów WordPressa

Dość często można spotkać się z opinią, że WordPress nie jest dobrym frameworkiem do tworze- nia aplikacji internetowych lub nawet że w ogóle nie jest frameworkiem. Szanując prawo innych do wypowiedzi, w tym miejscu chcielibyśmy wyjaśnić, dlaczego nie zgadzamy się z takimi opiniami.

W kolejnych punktach odniesiemy się do często pojawiającej się krytyki.

WordPress jest przeznaczony tylko do tworzenia blogów

Spora grupa osób jest przekonana, że jeśli WordPress powstał w celu tworzenia blogów, to sprawdza się dobrze tylko w tym zakresie.

Takie stwierdzenia mogły być prawdziwe kilka lat temu. Jednak ostatnio w WordPressie zaim- plementowano oferującą dość potężne możliwości funkcjonalność CMS, więc platforma stała się użyteczna także dla innych witryn internetowych skoncentrowanych na treści. Obecnie Word- Press to najpopularniejszy system zarządzania treścią, a jego udział w rynku szacuje się na 60%2. Na rysunku 1.1 możesz zobaczyć slajd z prezentacji „State of WordPress”, przygotowanej przez Matta Mullenwega na konferencję WordCamp San Francisco 2013. Widoczny po lewej stronie trójkąt skierowany do dołu przedstawia WordPress z mniej więcej 2006 roku, gdy większość kodu tworzącego ten framework była przeznaczona do obsługi aplikacji bloga, a tylko niewielka część dla systemu CMS i kodu platformy. Z kolei widoczny po prawej stronie trójkąt przedstawia aktu- alny stan platformy WordPress, w której większość kodu jest związana z samą platformą wraz ze znajdującą się nad nią warstwą CMS, aplikacja bloga zaś działa na warstwie CMS. Obecnie WordPress to znacznie stabilniejsza platforma niż kilka lat temu.

2Na stronie W3Tech pod adresem https://w3techs.com/technologies/overview/content_management dostępne są aktualne dane dotyczące użycia różnych systemów zarządzania treścią.

(25)

Rysunek 1.1. Wykresy przygotowane przez Matta Mullenwega w 2013 roku na potrzeby prezentacji

„State of WordPress”. WordPress nie zawsze był stabilny

API CPT można wykorzystać do usprawnienia instalacji WordPressa i zapewnienia obsługi ty- pów treści innych niż posty bloga lub strony internetowe. Więcej informacji na ten temat znaj- dziesz w rozdziale 5.

WordPress jest przeznaczony tylko dla stron z treściami

Podobnie jak w przypadku stwierdzenia „tylko dla bloga”, część osób twierdzi, że WordPress jest przeznaczony tylko dla witryn internetowych skoncentrowanych na treści.

Po pierwsze, jeżeli WordPress byłby przeznaczony tylko dla skoncentrowanych na treści witryn internetowych i aplikacji, to i tak oznacza ogromną liczbę aplikacji. Na ekranie głównym smart- fona prawdopodobnie masz wiele aplikacji koncentrujących się na treści, np. Netflix, Twitter, Face- book, Reddit, Evernote. To są przykłady bardzo popularnych aplikacji opracowanych przez ogromne firmy. Oczywiście nie sugerujemy, że powinny one działać w oparciu o WordPress, na- tomiast sugerujemy, że aplikacje o podobnym sposobie działania można zbudować, wykorzystując do tego framework WordPress.

Po drugie, jak się dowiesz z lektury niniejszej książki, WordPress to doskonały framework prze- znaczony także do tworzenia bardziej interaktywnych aplikacji internetowych. Podstawową funk- cją pozwalającą na wykorzystanie WordPressa jako frameworka jest API wtyczek, które umożli- wia sprawdzenie domyślnego sposobu działania WordPressa i jego zmianę. Nie tylko masz dostęp do tysięcy wtyczek znajdujących się w repozytorium WordPressa i na różnych stronach w inter- necie, ale również za pomocą API wtyczek możesz przygotować własne wtyczki przeznaczone do wykonywania wszelkich zadań, które są możliwe do zrealizowania z użyciem PHP i MySQL.

WordPress się nie skaluje

Niektórzy będą wskazywać na domyślną instalację WordPressa uruchomioną w usłudze hostingu o małych możliwościach i zwracać uwagę na spowolnienie działania witryny internetowej lub jej awarie w przypadku dużego obciążenia i na tej podstawie wyciągać wniosek, że WordPress się nie skaluje.

Być może uśmiałbyś się, gdybyś usłyszał o możliwości zbudowania witryny typu Facebook za pomocą WordPressa.

W rzeczywistości wiele witryn internetowych notujących ogromny ruch sieciowy zbudowano w oparciu o WordPress. Witryna wordpress.com została zbudowana w dokładnie taki sam sposób jak każda inna korzystająca z WordPressa i jest jedną z najczęściej odwiedzanych witryn interne- towych na świecie.

(26)

Jeżeli masz zamiar utworzyć aplikację internetową na miarę Facebooka, nie jest to odpowiednia książka dla Ciebie. Zapytaj CTO, jaki odsetek wielomiliardowego bu- dżetu jest przeznaczony na potrzeby związane z utworzeniem aplikacji i zatrudnie- niem inżynierów z firm Google i Amazon, którzy będą potrzebni do pracy nad tą niestandardową aplikacją internetową.

Wraz ze wzrostem poziomu użycia aplikacji internetowej konieczne będzie uaktualnianie i wy- mienianie poszczególnych komponentów, aby sprostać tej skali. Problemy związane ze skalowa- niem WordPressa są dokładnie takie same jak podczas skalowania każdej innej aplikacji: buforo- wanie stron i danych, znacznie szybsza obsługa zapytań do bazy danych i poprawienie wydajności działania sieci. Ogromne witryny takie jak wordpress.com, TechCrunch i blogi New York Timesa są skalowane w WordPressie. Podobnie większość wniosków wyciągniętych ogólnie ze skalowa- nia aplikacji PHP i MySQL ma zastosowanie dla WordPressa. Tematem skalowania zajmiemy się w rozdziale 14.

WordPress nie zapewnia bezpieczeństwa

Podobnie jak w przypadku innych produktów typu open source także WordPress wiąże się z pewny- mi kompromisami w zakresie zapewnienia bezpieczeństwa.

Z jednej strony ogromna popularność WordPressa oznacza, że będzie on celem hakerów szukają- cych luk w zabezpieczeniach. Skoro kod źródłowy został udostępniony jako open source, poten- cjalne luki w zabezpieczeniach są łatwiejsze do znalezienia.

Z drugiej strony, ponieważ kod źródłowy WordPressa jest właśnie typu open source, dość szybko dowiesz się o znalezionych lukach w zabezpieczeniach, a ktoś inny prawdopodobnie usunie je za Ciebie.

Czujemy się znacznie bezpieczniej, wiedząc, że choć wiele osób próbuje wykorzystać luki w za- bezpieczeniach, inne starają się zabezpieczyć WordPressa przed wykorzystaniem tych braków.

Nie wierzymy w „zapewnienie bezpieczeństwa przez niejawność”, chyba że jest ona stosowana ja- ko dodatkowy środek. Zamiast tego wolimy, aby znalezione luki w zabezpieczeniach oprogramo- wania wychodziły na światło dzienne, niż pozostały nieujawnione aż do najgorszego z możliwych momentów.

W rozdziale 8. znacznie dokładniej zajmiemy się omówieniem kwestii zapewnienia bezpieczeń- stwa — m.in. przedstawimy listę najlepszych praktyk w zakresie zabezpieczania instalacji Word- Pressa, a także podpowiemy, jak tworzyć bezpieczniejszy kod.

Wtyczki WordPressa są beznadziejne

API wtyczek w WordPressie oraz tysiące dostępnych wtyczek opracowanych z wykorzystaniem tego API to tajna broń i według nas podstawowy powód, dla którego WordPress zyskał tak ogromną popularność i odniósł duży sukces jako platforma dla witryn internetowych.

Można się spotkać ze stwierdzeniem typu „oczywiście, że są dostępne tysiące wtyczek, ale więk- szość z nich jest kiepska”. W porządku, część wtyczek na pewno jest kiepska.

(27)

Jednak istnieje naprawdę wiele wtyczek, które zdecydowanie są użyteczne — wśród nich znajduje się AppPresser opracowana przez jednego z autorów tej książki, Briana Messenlehnera. Jeżeli używasz WordPressa do zarządzania treścią pisaną lub sklepem internetowym, wówczas wtyczka AppPresser i platforma to najszybszy sposób na otrzymanie tej treści lub sklepu internetowego w aplikacji mobilnej.

Paid Memberships Pro opracowana przez drugiego autora książki, Jasona Colemana, również za- licza się do użytecznych wtyczek. Pozwala ona obsługiwać rachunki wystawiane użytkownikom witryny internetowej, dzięki czemu można się skoncentrować na podstawowej funkcjonalności aplikacji zamiast zmagać się z integracją witryny z bramkami płatności.

Wiele wtyczek wykonuje bardzo proste zadania (np. ukrycie paska administracyjnego dla użyt- kowników niebędących administratorami), działa zgodnie z oczekiwaniem i naprawdę trudno je uznać za kiepskie.

Motywy i wtyczki znajdujące się w repozytorium WordPressa są przez wolontariuszy sprawdzane pod kątem zapewnienia bezpieczeństwa i jakości kodu. Proces Theme Review Team (https://make.

wordpress.org/themes/handbook/review/required/) jest coraz bardziej rygorystyczny i rozbudowa- ny niż pozostałe. Projekt Tide (https://make.wordpress.org/tide/) ma na celu opracowanie testów zautomatyzowanych do sprawdzania repozytoriów wtyczek i motywów, co powinno zapewnić dostęp do wysokiej jakości wtyczek i uaktualnień, a jednocześnie pozwolić na szybsze wykrywanie problemów związanych z zachowaniem zgodności i zapewnieniem bezpieczeństwa.

Nawet słaba wtyczka może zostać poprawiona, utworzona na nowo lub stanowić punkt wyjścia do opracowania kolejnej, która będzie działała lepiej. Czasami okazuje się, że utworzenie wtyczki od nowa jest łatwiejsze niż poprawienie kiepskiej. Mimo to i tak jesteś w znacznie lepszej sytuacji, niż gdybyś musiał zupełnie od początku tworzyć wszystko to, co jest potrzebne do działania bu- dowanej aplikacji internetowej.

Nikt nie zmusza Cię do stosowania wtyczek WordPressa bez ich wcześniejszego sprawdzenia. Jeżeli budujesz poważną aplikację internetową, kod wtyczki powinieneś dokładnie sprawdzić samodzielnie i poprawić go w taki sposób, aby spełniał Twoje standardy, a dopiero potem przejść do następnego zadania.

Kiedy nie używać WordPressa?

WordPress na pewno nie jest rozwiązaniem dla każdej aplikacji. W tym podrozdziale przedsta- wimy kilka sytuacji, w których nie należy używać WordPressa do budowania aplikacji internetowej.

Planujesz licencjonować lub sprzedawać technologię witryny internetowej

WordPress jest dostępny na licencji GPLv2, która nakłada pewne ograniczenia związane ze spo- sobem rozpowszechniania oprogramowania utworzonego za pomocą narzędzi na tej licencji. Przede wszystkim nie można ograniczać sposobów wykorzystania oprogramowania po jego sprzedaży lub dostarczeniu.

(28)

Wprawdzie to jest złożony temat, ale podstawowa idea polega na tym, że jeśli tylko sprzedajesz lub zapewniasz dostęp do aplikacji, nie musisz się przejmować GPLv2. Jeżeli jednak sprzedajesz lub rozpowszechniasz kod źródłowy aplikacji, wówczas licencja GPLv2 ma zastosowanie dla roz- powszechnianego kodu.

Przykładowo jeśli na własnym serwerze prowadzisz hosting aplikacji SchoolPress i sprzedajesz konta zapewniające dostęp do aplikacji, nie jest to uznawane za rozpowszechnianie i licencja GPLv2 nie ma tutaj znaczenia.

Jeżeli chcesz umożliwić instytucjom edukacyjnym instalowanie oprogramowania i uruchamianie go na własnych serwerach, wówczas musisz im udostępnić kod źródłowy. To jest uznawane za dystrybucję. Klient będzie mógł legalnie i bezpłatnie przekazać dalej ten kod źródłowy, nawet jeśli musiał zapłacić za oprogramowanie. Konieczne jest użycie licencji GPLv2, która nie zezwala na ograniczenie tego, co użytkownik może zrobić z kodem źródłowym po jego pobraniu.

Inna platforma szybciej doprowadzi Cię do celu

Jeżeli masz zespół doświadczonych programistów języka Ruby, aplikację internetową powinieneś utworzyć właśnie w tym języku. Jeżeli istnieje platforma, framework lub paczka zawierająca 80%

funkcji niezbędnych dla Twojej aplikacji internetowej, a WordPress nie oferuje niczego podobne- go, wówczas prawdopodobnie powinieneś skorzystać z innej platformy.

Elastyczność jest bez znaczenia

Jedną z najważniejszych zalet witryny internetowej opartej na WordPressie jest możliwość szybkiej zmiany jej poszczególnych komponentów, aby lepiej pasowała do Twoich potrzeb. Przykładowo jeśli „polubienia” na Facebooku przestaną być użyteczne, można odinstalować wtyczkę Facebook Connect i zainstalować wtyczkę zapewniającą obsługę serwisu Pinterest.

Ogólnie rzecz biorąc, uaktualnianie motywu lub zastępowanie wtyczek witryny WordPressa bę- dzie odbywało się szybciej niż samodzielne opracowywanie danej funkcjonalności zupełnie od początku na innej platformie. Jeżeli jednak optymalizacja i wydajność działania mają dużo większe znaczenie niż możliwość szybkiego uaktualniania aplikacji, wtedy opracowanie aplikacji natywnej lub programowanie bezpośrednio w PHP będzie lepszym rozwiązaniem.

Jeżeli aplikacja będzie wykonywać jedno proste zadanie, powinna zostać utworzona na niższym poziomie. Przykładowo serwer licencji wtyczki Paid Membership Pro to w zasadzie pojedynczy plik JSON informacji dodatkowych oraz mały skrypt sprawdzający klucze licencji i dostarczający spa- kowane pliki. Jason zbudował serwer licencji bezpośrednio w kodzie PHP i w ogromnym stopniu wy- korzystał buforowanie. Ten serwer działa na kosztującym 10 USD miesięcznie DigitalOcean Sroplet i obsługuje ponad 80 000 witryn internetowych wraz z działającą wtyczką Paid Membership Pro.

Podobnie jeśli masz zasoby dostępne dla Facebooka, możesz pozwolić sobie na samodzielne zbu- dowanie czegokolwiek, wykorzystanie własnych kompilatorów PHP do C, a także natywnych komponentów iOS w celu skrócenia o kilka milisekund czasu wczytywania witryny internetowej i aplikacji.

(29)

Aplikacja musi działać w czasie rzeczywistym

Jedną z potencjalnych wad WordPressa, na której temat więcej dowiesz się z dalszej części książki, jest oparcie na typowej architekturze serwera WWW. W typowej konfiguracji WordPressa użyt- kownik przechodzi pod określony adres URL, co powoduje nawiązanie komunikacji z serwerem WWW (takim jak Apache) za pomocą protokołu HTTP, uruchomienie skryptu PHP generujące- go stronę, która następnie zostaje zwrócona użytkownikowi.

Jest wiele sposobów na poprawę wydajności działania tej architektury za pomocą technik bufo- rowania i/lub optymalizacji konfiguracji serwera. Istnieje możliwość asynchronicznego działania WordPressa dzięki wywołaniom w technologii AJAX lub dostępu do bazy danych za pomocą al- ternatywnych klientów. Jeżeli jednak aplikacja musi działać w czasie rzeczywistym i być w pełni asynchroniczna (przykładem może być aplikacja czatu internetowego lub gra wieloosobowa), wówczas masz nasze błogosławieństwo i możesz dobrze się zastanowić, czy na pewno chcesz sko- rzystać z WordPressa.

Wielu programistów WordPressa, w tym także Matt Mullenweg — założyciel i przywódca du- chowy tej platformy, zdaje sobie sprawę ze wspomnianego ograniczenia. Coraz więcej funkcjonalności jest przenoszonych do języka JavaScript pozwalającego na przeprowadzanie obliczeń w przeglą- darce WWW oraz do frameworków takich jak React zapewniających wysoką interaktywność aplikacji internetowej. Nowy edytor Gutenberg, dodany w WordPressie 5.0, jest najlepszym przy- kładem tego trendu i wskazuje kierunek, w którym podąża platforma. Jednak na razie trzeba się zmagać z drogą pod górę, aby zapewnić asynchroniczne działanie WordPressa z wydajnością po- równywalną do aplikacji natywnej, utworzonej całkowicie w Node.js lub za pomocą innych tech- nologii przeznaczonych specjalnie dla aplikacji działających w czasie rzeczywistym.

WordPress jako framework aplikacji

Systemy zarządzania treścią takie jak WordPress, Drupal i Joomla są często wykluczane z dyskusji związanych z frameworkami. Jednak w rzeczywistości WordPress (szczególnie) to doskonały przykład pokazujący, do czego są przeznaczone frameworki: do szybkiego tworzenia aplikacji.

W ciągu zaledwie kilku minut można skonfigurować WordPressa i otrzymać w pełni funkcjonal- ną aplikację wraz z obsługą użytkowników, zarządzaniem sesją, zarządzaniem treścią oraz pane- lem głównym przeznaczonym do monitorowania aktywności witryny internetowej.

Różne API, obiekty i funkcje pomocnicze omówione w książce umożliwiają bardzo szybkie two- rzenie skomplikowanych aplikacji, bez konieczności zajmowania się kwestiami związanymi z in- tegracją tej aplikacji z systemami działającymi na niższym poziomie.

Na rysunku 1.2 pokazaliśmy trójkąt pochodzący z przedstawionej w 2013 roku prezentacji „State of WordPress”. Na podstawie tego rysunku WordPress jawi się jako platforma wraz z umieszczo- ną na niej warstwą CMS, na której z kolei znajduje się aplikacja bloga.

Rzeczywistość jest taka, że większość obecnej bazy kodu obsługuje platformę aplikacji. Każde wydanie WordPressa należy traktować jako framework aplikacji połączony z przykładową aplikacją bloga.

(30)

Rysunek 1.2. Platforma WordPress

WordPress kontra frameworki MVC

Model – widok – kontroler (ang. model-view-controller, MVC) to wzorzec projektowy używany w wielu frameworkach przeznaczonych do tworzenia oprogramowania. Najważniejszą korzyścią wynikającą z użycia architektury MVC jest możliwość wielokrotnego użycia kodu i rozdzielenia zadań. WordPress nie stosuje architektury MVC, ale ma własny sposób zachęcający do wielo- krotnego użycia kodu i separacji zadań.

Tutaj pokrótce wyjaśnimy architekturę MVC i sposób jej mapowania na proces programowania w WordPressie. Jeżeli masz doświadczenie w pracy z frameworkami MVC, to informacje przed- stawione w tym punkcie powinny pomóc w zrozumieniu podejścia, które w WordPressie pozwoli programować w sposób podobny jak w przypadku MVC.

Na rysunku 1.3 pokazaliśmy typową aplikację zbudowaną na podstawie wzorca MVC. Użytkow- nik końcowy korzysta z kontrolera przeprowadzającego operacje wpływające na stan aplikacji za pomocą modelu, który następnie uaktualnia widok wyświetlany użytkownikowi. Przykładowo w apli- kacji bloga użytkownik może patrzeć na stronę ostatnio opublikowanych postów (widok). Następnie może kliknąć tytuł posta, co spowoduje przejście pod nowy adres URL (kontroler), co z kolei oznacza wczytanie danych posta (model) i wyświetlenie pojedynczego posta (inny widok).

Rysunek 1.3. Sposób działania architektury MVC

Architektura MVC obsługuje wielokrotne użycie kodu i umożliwia współpracę modelom, widokom i kontrolerom. Przykładowo widok, zarówno ostatnio opublikowanych postów, jak i wyświetlają- cy treść pojedynczego posta, może do wyświetlania danych posta używać tego samego modelu.

Z kolei te same modele można wykorzystać we frontendzie do wyświetlania postów, w backendzie zaś do ich edycji. Architektura MVC obsługuje separację zadań przez umożliwienie projektantom koncentracji na widokach, a programistom — na modelach.

(31)

Możesz spróbować użyć architektury MVC w WordPressie. Istnieje wiele projektów, które mają w tym pomóc. Jednak uważamy, że próba stosowania architektury MVC w WordPressie może prowadzić do problemów, o ile oficjalna obsługa MVC nie zostanie wprowadzona w jądrze Word- Pressa. Dopóki tak się nie stanie, sugerujemy zastosowanie podejścia „zgodnego z WordPressem”, które zostało omówione w tej książce.

Jeżeli mimo to wciąż jesteś zainteresowany podejściem MVC w WordPressie, zwróć uwagę na wtyczkę WP MVC (https://wordpress.org/plugins/wp-mvc/), która jest aktywnie rozwijana i po- zwala stosować framework MVC podczas tworzenia wtyczek WordPressa. Jeżeli nie chcesz lub nie potrzebujesz pełnej architektury MVC, istnieje kilka sposobów mapowania procesu MVC na WordPressa.

Modele = wtyczki

We frameworku MVC kod przechowujący struktury danych i logikę biznesową znajduje się w mode- lach. To na tworzenie modeli programiści poświęcają najwięcej czasu.

W WordPressie wtyczka to odpowiednie miejsce na przechowywanie nowych struktur danych, złożonej logiki biznesowej oraz niestandardowych typów postów.

Jednak takie porównanie jest nie najlepsze z kilku powodów. Po pierwsze, wiele wtyczek dodaje funkcjonalność przypominającą widok i zawiera elementy projektowe — rozważ np. wtyczkę do- dającą widżet umieszczany na stronach internetowych. Po drugie, formularze i inne komponenty projektowe używane w panelu głównym WordPressa są, ogólnie rzecz biorąc, obsługiwane przez wtyczki.

Jednym ze sposobów na zapewnienie bardziej wyraźnie zarysowanej separacji zadań podczas do- dawania przypominających widoki komponentów do wtyczek WordPressa jest utworzenie kata- logu templates lub pages i umieszczenie w nim kodu frontendu. Często stosowana praktyka po- zwala szablonom nadpisywać szablony wykorzystane przez wtyczkę. Przykładowo gdy używasz wtyczki Paid Membership Pro, katalog paid-memberships-pro/pages można umieścić w aktyw- nym motywie, aby w ten sposób nadpisać domyślne szablony stron. (Dokładniejsze omówienie tej techniki nadpisywania szablonów wtyczki znajdziesz w rozdziale 4.).

Widoki = motywy

We frameworku MVC kod odpowiedzialny za wyświetlanie danych użytkownikowi zostaje umiesz- czony w widokach. To właśnie na ich tworzenie projektanci i programiści frontendu poświęcają najwięcej czasu.

W WordPressie motywy to odpowiednie miejsce na umieszczenie kodu i logiki szablonów.

Warto przypomnieć ponownie, że przedstawione tutaj porównanie nie jest do końca prawidłowe.

Mimo to stwierdzenie widoki = motywy to dobry punkt wyjścia.

(32)

Kontrolery = procedury wczytujące szablony

We frameworku MVC kod odpowiedzialny za przetwarzanie danych wejściowych użytkownika (w postaci adresów URL lub danych $_GET bądź $_POST) oraz ustalający, które z modeli i widoków będą obsługiwały dane żądanie, jest przechowywany w kontrolerach. Kod kontrolera jest, ogólnie rzecz biorąc, obsługiwany przez programistę, a po pierwotnym utworzeniu często pozostaje za- pomniany. Sedno programowania w aplikacji MVC odbywa się w modelach i widokach. Jednak pomimo tego kontrolery to komponenty odgrywające ważne role w sposobie działania aplikacji.

W przypadku aplikacji WordPressa wszystkie żądania stron (o ile nie dotyczą buforowanych plików .html) przechodzą przez plik index.php i są przetwarzane przez WordPressa zgodnie z hierarchią szablonów. Procedura wczytująca szablon ustala, który plik szablonu powinien zostać użyty do wy- świetlenia strony użytkownikowi końcowemu. Przykładowo plik search.php jest używany do po- kazania wyników wyszukiwania, plik single.php do wyświetlenia pojedynczego posta itd.

To zachowanie domyślne można zmodyfikować za pomocą API WP_Rewrite (jego dokładne omówienie znajdziesz w rozdziale 7.) oraz innych zaczepów i filtrów. Informacje dotyczące hie- rarchii szablonów (https://developer.wordpress.org/themes/basics/template-hierarchy/) znajdziesz w książce WordPress Theme Handbook. W niniejszej książce temat hierarchii szablonów będzie dokładniej omówiony w rozdziale 4.

Jeżeli chcesz lepiej zrozumieć sposób działania frameworków MVC, to na stronie frameworka PHP o nazwie Yii (https://www.yiiframework.com/doc/guide/1.1/en/basics.best-practices) znajduje się doskonałe wyjaśnienie, jak najlepiej używać architektury MVC3.

Więcej informacji na temat tworzenia aplikacji internetowych za pomocą frameworka WordPress znajdziesz w dalszej części tej książki.

Anatomia aplikacji internetowej WordPressa

W tym podrozdziale przedstawimy aplikację, która będzie budowana w książce: SchoolPress. Za- prezentujemy funkcjonalność aplikacji SchoolPress, sposób jej działania i użytkowników, dla któ- rych została przeznaczona. Co najważniejsze z pespektywy czytelnika tej książki, dokładnie poka- żemy, jak każdy fragment tej aplikacji został utworzony w WordPressie.

Nie przejmuj się, jeśli nie będziesz rozumieć znaczenia pewnych pojęć w stosowanej tutaj termi- nologii. W dalszych rozdziałach książki powrócimy do omówienia aplikacji SchoolPress i przed- stawimy wszystko znacznie dokładniej. Gdy tylko będzie to możliwe, będziemy starać się wska- zywać rozdział zawierający dokładniejsze omówienie danej funkcjonalności.

Celem tej książki nie jest pokazać krok po kroku, jak utworzyć aplikację School- Press. Gdy ma to sens, fragment aplikacji SchoolPress został użyty w przykłado- wych fragmentach kodu prezentowanych w książce. Dzięki temu nie musisz po- święcać czasu na próbę zrozumienia każdego z przedstawionych przykładów.

3Yii to oparty na architekturze MVC framework PHP. Wprawdzie inne frameworki PHP, takie jak Laravel (https://laravel.com/), są popularniejsze wśród programistów WordPressa i ogólnie społeczności PHP, ale doty- cząca MVC dokumentacja w witrynie Yii została doskonale napisana.

(33)

Czym jest SchoolPress?

SchoolPress to aplikacja internetowa ułatwiająca nauczycielom pracę z uczniami poza klasą w szkole.

Nauczyciel może tworzyć klasy i zapraszać do nich uczniów. Każda klasa ma przypisane forum przeznaczone na dyskusje, a bardziej strukturalny system dla nauczycieli umożliwia im publiko- wanie zadań, które muszą być wykonywane przez uczniów.

Działanie aplikacji SchoolPress możesz zobaczyć w witrynie internetowej https://schoolpress.me/.

Kod źródłowy aplikacji znajduje się w archiwum dostępnym pod adresem ftp://ftp.helion.pl/

przyklady/wordp2.zip.

SchoolPress działa w sieci zawierającej wiele witryn WordPressa

SchoolPress to działająca wersja WordPressa składająca się z wielu witryn. Witryna główna za- pewnia obsługę bezpłatnych kont pozwalających nauczycielom zapisać się do systemu i rozpocząć tworzenie klas. Obsługuje również wszystkie informacje marketingowe dla witryn poszczególnych szkół w sieci, łącznie ze stronami przeznaczonymi m.in. do zapisywania się do płatnych usług.

Szkoły mogą tworzyć unikatowe poddomeny przeznaczone dla klas organizowanych przez na- uczycieli z danej szkoły. Takie podejście zapewnia dokładniejszą kontrolę i raportowanie infor- macji dla wszystkich klas w szkole. Szczegóły dotyczące używania sieci zawierającej wiele witryn internetowych WordPressa znajdziesz w rozdziale 12.

Model biznesowy SchoolPressa

Aplikacja SchoolPress używa wtyczek Paid Memberships Pro, PMPro Register Helper i PMPro Network w celu dostosowania do własnych potrzeb procesu rejestracji oraz akceptowania płatno- ści kartami kredytowymi za korzystanie z serwisu.

Szkoła może wykupić dla siebie unikatową poddomenę za roczną opłatą. Inni użytkownicy Scho- olPressa nie muszą płacić za dostęp do serwisu. Gdy administrator szkoły zapisze się do aplikacji, może podać nazwę szkoły i usług dla jej poddomeny, np. <nazwa_szkoły>.schoolpress.me. Dla szkoły zostaje utworzona nowa witryna w sieci, a szkole jest zapewniony dostęp do uproszczonej wersji panelu głównego WordPressa przeznaczonego dla danej witryny internetowej.

Następnie administrator szkoły rozpoczyna zapraszanie uczniów do systemu. Nauczyciele mogą również żądać zaproszenia do szkoły, które musi być zaakceptowane przez administratora danej szkoły. Nauczyciel może zapraszać uczniów do utworzonej przez siebie klasy. Z kolei uczniowie mogą żądać zaproszenia do klasy, które musi być zaakceptowane przez tworzącego ją nauczyciela.

Nauczyciele mogą bezpłatnie zapisywać się do serwisu SchoolPress i organizować w nim klasy.

Strony wyświetlane w poddomenie klasy mogą zawierać reklamy lub stosować inne rozwiązania pozwalające zarabiać pieniądze. Szczegóły związane z konfiguracją e-commerce za pomocą Word- Pressa będą dokładnie omówione w rozdziale 15.

Cytaty

Powiązane dokumenty

wyłączenia w dziedzinie odpowiedzialności ustanowione w niniejszej dyrektywie obejmują jedynie przypadki, w których działalność podmiotu świadczącego usługi

Stanie się to dlatego, że istnieje wiele systemów, których przerabianie na nową technologię tylko dlatego, że jest nowocześniejsza nie jest ekonomicznie uzasadnione..

Jeśli nie jest możliwe wyznaczenie czasu trwania materiału (np. w przypadku transmisji na żywo lub transmisji na żywo kanału TV), wartość parametru

drobnego cukru do wypieków szklanki mąki pszennej szklanka zmielonych orzechów laskowych łyżka kakao łyżeczki proszku do pieczenia łyżki mleka (60 ml).. gorzkiej czekolady,

Celem studiów jest zapoznanie Cię z najważniejszymi technologiami, narzędziami oraz zasadami tworzenia aplikacji internetowych, intranetowych i mobilnych, a także przygotowanie

Tworzenie stron internetowych z wykorzystaniem HTML i CSS (22 godz.) Tworzenie struktury witryn internetowych w oparciu o język HTML.. Najważniejsze

Po dodaniu wzorców adresu URL oraz szablonów dla widoków logowania i wylogowania budo- wana tutaj witryna internetowa jest gotowa na obsługę logowania użytkowników za pomocą

Po dodaniu wzorców adresu URL oraz szablonów dla widoków logowania i wylogowania budo- wana tutaj witryna internetowa jest gotowa na obsługę logowania użytkowników za pomocą