Serwis używa plików cookies do analizy ruchu i poprawy działania. Szczegóły
E.14-03-22.01-SGStyczeń 2022 · 35 kroków · ok. 57 min · 34 kryteria z klucza
Rozwiązanie krok po kroku: Biuro podróży z obsługą ciasteczek (Nowoczesny kod (flex, jedna zmienna PHP))
To drugi sposób rozwiązania tego samego arkusza. Wynik jest ten sam - strona biuro.php z ciasteczkiem, arkusz stylów styl.css, plik regulamin.txt i cztery obrobione zdjęcia - i tak samo spełnia każde kryterium klucza. Inna jest droga:
znaczniki semantyczne: baner to <header>, blok lewy - <main>, blok prawy ze zdjęciami - <aside>, stopka - <footer>,
flexbox zamiast float: <body> układa bloki w wiersze, a szerokości 35%/65% z arkusza wyznaczają podział; nie trzeba clear,
zmienne CSS dla kolorów, box-sizing: border-box, styl :focus-visible dla nawigacji klawiaturą,
PHP z jedną zmienną: $firstVisit liczona raz na początku pliku, w bloku ciasteczek krótki zapis <?= ... ?> z operatorem warunkowym,
odnośnik w nowym oknie z rel="noopener" od początku.
To arkusz E.14 ze stycznia 2022 - kwalifikacji formuły 2012, którą zastąpiła INF.03. Zdjęcia pochodzą z oryginalnego archiwum CKE (załącznik na stronie arkusza), skrypt jest uruchomiony naprawdę - dwie wizyty z zapamiętanym ciasteczkiem - a układ zmierzony w Chrome.
Jak liczą się punkty. Klucz ma 34 kryteria (R.1.1 - R.5.5), każde za 1 punkt. Próg zdania części praktycznej to 75%, czyli 26 punktów - można stracić 8 kryteriów i nadal zdać. Przy każdym kroku jest napisane, które kryteria spełnia; egzaminator ocenia spełnienie kryteriów z klucza, nie zgodność z tym kodem.
Suwak i strzałki obok niego - albo ←→ na klawiaturze - przechodzą krok po kroku; wyjaśnienie, pliki i podgląd zmieniają się razem z krokiem.
Lista „Etap” przenosi od razu do wybranego etapu.
„Rozwiązuję samodzielnie” chowa rozwiązanie kroku - najpierw własna próba, potem odsłonięcie.
„Tryb prezentacji” pokazuje same kroki, bez menu strony - na rzutnik.
Etap 1: Grafika
Kroki 1-6 · po tym etapie masz 5 z 34 kryteriów (pkt)
Krok 1: Folder zdającego i archiwum pliki3
ok. 2 min
Polecenie z arkusza
Aby wykonać zadanie, zaloguj się na konto Egzamin bez hasła. Na pulpicie znajdziesz archiwum ZIP o nazwie pliki3.zip zabezpieczone hasłem: PodRoz3 Archiwum należy rozpakować. Na pulpicie konta Egzamin utwórz folder. Jako nazwy folderu użyj numeru, którym został podpisany arkusz. Rozpakowane pliki umieść w tym folderze. Po zakończonej pracy wyniki zapisz w tym folderze.
Na pulpicie tworzysz folder nazwany numerem, którym podpisano arkusz (PESEL) - w tym rozwiązaniu w jego miejscu stoi imię i nazwisko autora, Bartosz Bryniarski. Archiwum rozpakowujesz do tego folderu z hasłem PodRoz3 (wielkość liter ma znaczenie). W środku są cztery zdjęcia: grecja.jpg (500 × 310 px), hiszpania.jpg (550 × 341 px), polska.jpg (500 × 375 px, z czarną linią w dolnej części) i wlochy.jpg (500 × 310 px).
Archiwum do pobrania jest na stronie arkusza w serwisie - CKE wydała je pod nazwą pliki6.zip przy zadaniu ze stycznia 2019, z tym samym hasłem i tymi samymi plikami.
Krok 2: grecja.jpg: rozmycie Gaussa
Kryteria:
R.1.1 Obraz grecja.jpg jest w całości rozmyty
ok. 2 min
Polecenie z arkusza
Grafika grecja.jpg powinna być rozmyta za pomocą filtru rozmycie Gaussa. Parametry rozmycia muszą być tak dobrane, aby rozmycie było dobrze widoczne. Przykład pokazano na obrazach 1a i 1b.
W GIMP-ie: Filtry → Rozmycie → Rozmycie Gaussa. W oknie filtra ustawiasz rozmiar rozmycia - w tym rozwiązaniu 6 px (w GIMP 2.10 pola Rozmiar X/Y to odchylenie standardowe rozmycia). Przy wartości 1-2 rozmycie jest ledwo widoczne, a arkusz wymaga, żeby było „dobrze widoczne” - w całym obrazie, więc filtr nakładasz bez zaznaczenia. Zapis: Plik → Nadpisz grecja.jpg.
Na podglądzie po lewej oryginał, po prawej obraz po rozmyciu.
Typowe błędy
Rozmycie tylko zaznaczonego fragmentu albo tak słabe, że obraz wygląda na ostry - klucz wymaga, by grecja.jpg była rozmyta w całości.
Podgląd strony po tym kroku
Krok 3: Zrzut ekranu rozmycie.png
Kryteria:
R.1.2 Czynność rozmycia obrazu udokumentowano zrzutem ekranu o nazwie rozmycie.png , na którym widoczny jest edytor grafiki oraz okno parametrów filtra rozmycia Gaussa
ok. 2 min
Polecenie z arkusza
Udokumentuj zastosowany na grafice grecja.jpg filtr za pomocą zrzutu ekranu, na którym widoczny jest edytor grafiki oraz okno parametrów filtra. Zrzut zapisz w formacie PNG i nazwij rozmycie. Nie kadruj zrzutu. Powinien on obejmować cały ekran, z widocznym paskiem zadań.
Zrzut robisz, gdy okno Rozmycie Gaussa jest otwarte z ustawionymi parametrami, a za nim widać okno GIMP-a z obrazem - czyli przed kliknięciem OK w poprzednim kroku. Print Screen kopiuje cały ekran z paskiem zadań, Edycja → Wklej jako → Nowy obraz i Plik → Eksportuj jakorozmycie.png.
W arkuszu jest literówka „grecja,jpg” (przecinek zamiast kropki) - chodzi o plik grecja.jpg, ten sam, który rozmyto w poprzednim kroku.
Ten zrzut zależy od Twojego stanowiska, dlatego rozwiązanie nie zawiera pliku - to praca do wykonania na egzaminie.
Typowe błędy
Zrzut samego okna albo przycięty - bez paska zadań - nie jest oceniany (uwaga w kluczu przy R.1).
Krok 4: hiszpania.jpg: szerokość 500 px
Kryteria:
R.1.3 Przeskalowano obraz hiszpania.jpg z zachowaniem proporcji do szerokości 500 px odpowiadająca temu wysokość wynosi 310 px (± 5 px)
ok. 2 min
Polecenie z arkusza
Grafika hiszpania.jpg powinna być przeskalowana. Należy przeskalować obraz z zachowaniem proporcji do szerokości 500 px.
Obraz → Skaluj obraz, łańcuch między szerokością a wysokością zamknięty, szerokość 500 px. Wysokość przelicza się sama: 341 × 500 / 550 = 310 px - dokładnie tyle sprawdza klucz (310 px ±5). Zapis: Plik → Nadpisz hiszpania.jpg.
Typowe błędy
Rozpięty łańcuch daje 500 × 341 - zdjęcie ściśnięte w poziomie, bez punktu.
Podgląd strony po tym kroku
Krok 5: polska.jpg: odcięcie dołu z czarną linią
Kryteria:
R.1.4 Przycięto dół obrazu polska.jpg do czarnej linii, linia nie jest widoczna na obrazie
ok. 2 min
Polecenie z arkusza
Grafika polska.jpg powinna być przycięta. Na oryginale jest widoczna czarna linia - na przyciętym obrazie powinien być widoczny jedynie obszar nad linią. Wygląd grafiki po przycięciu na obrazie 1c.
Czarna linia biegnie przez całą szerokość zdjęcia w wierszach 310-313 (licząc od góry od zera). Zostawiasz obszar nad nią: Obraz → Rozmiar płótna, łańcuch rozpięty, wysokość 310 px, przesunięcie 0, potem Warstwa → Warstwa do rozmiaru obrazu - albo narzędziem Kadrowanie z polem 0, 0, 500 × 310. Wynik ma 500 × 310 px, jak pozostałe zdjęcia, i nie ma na nim ani jednego wiersza linii.
Typowe błędy
Cięcie „na oko” narzędziem kadrowania zostawia na dole jeden-dwa wiersze czarnej linii - powiększ widok, zanim zatwierdzisz.
Podgląd strony po tym kroku
Krok 6: wlochy.jpg: odcienie szarości
Kryteria:
R.1.5 Zapisano obraz wlochy.jpg w odcieniach szarości
ok. 1 min
Polecenie z arkusza
Grafika wlochy.jpg powinna być w odcieniach szarości.
Obraz → Tryb → Skala szarości i Plik → Nadpisz wlochy.jpg. Tryb skali szarości zapisuje obraz z jednym kanałem jasności - zdjęcie Wenecji staje się czarno-białe, jak na obrazie 2.
Podgląd strony po tym kroku
Etap 2: Strona biuro.php
Kroki 7-22 · po tym etapie masz 18 z 34 kryteriów (pkt)
Krok 7: Plik biuro.php
ok. 1 min
Polecenie z arkusza
Cechy witryny: strona główna o nazwie biuro.php.
Szkielet HTML5 w pliku z rozszerzeniem .php - strona będzie zawierać skrypt wykonywany na serwerze.
R.2.1 Witrynę internetową zapisano w pliku biuro.php oraz zastosowano właściwy standard kodowania polskich znaków
ok. 1 min
Polecenie z arkusza
Zastosowany właściwy standard kodowania polskich znaków.
<meta charset="UTF-8"> - kodowanie polskich znaków. viewport każe telefonowi wyświetlić stronę w jego rzeczywistej szerokości - arkusz tego nie wymaga, ale należy do każdej współczesnej strony.
Tytuł strony widoczny na karcie przeglądarki „Turystyka moja pasja”.
<title> - napis na karcie przeglądarki i w wynikach wyszukiwania.
biuro.phpPHPzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Turystyka moja pasja</title></head><body></body></html>
Podgląd strony po tym kroku (biuro.php)
Krok 10: Podpięcie arkusza stylów styl.css
Kryteria:
R.3.5 Strona zawiera działające połączenie z zewnętrznym arkuszem stylów o nazwie styl.css , formatowanie pochodzi jedynie z tego arkusza Uwaga: kryterium to nie jest spełnione również, gdy źle przypisano co najmniej jeden selektor do bloku (np. kropka zamiast #)
ok. 1 min
Polecenie z arkusza
Arkusz stylów w pliku o nazwie styl.css prawidłowo połączony z kodem strony.
<link rel="stylesheet" href="styl.css"> w <head> - całe formatowanie w tym jednym pliku (R.3.5).
biuro.phpPHPzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Turystyka moja pasja</title> <linkrel="stylesheet"href="styl.css"></head><body></body></html>
Podgląd strony po tym kroku (biuro.php)
Krok 11: Pięć bloków ze znaczników semantycznych
Kryteria:
R.2.3 Wygląd strony zdefiniowano dzieląc ją na bloki: baner, blok ciasteczek, lewy, prawy oraz stopkę. Zastosowano znaczniki sekcji
ok. 2 min
Polecenie z arkusza
Podział strony na bloki: baner, poniżej blok ciasteczek, poniżej dwa bloki: lewy i prawy oraz na dole stopka. Podział zrealizowany za pomocą znaczników sekcji, tak, aby układ bloków strony po uruchomieniu w przeglądarce, był zgodny z Obrazem 2.
baner - <header>, nagłówek strony,
blok ciasteczek - <section>,
blok lewy - <main>: oferta wycieczek i dokumenty to treść główna,
Krok 14: Lista numerowana z dwiema listami punktowanymi
Kryteria:
R.2.8 W bloku lewym umieszczono listę numerowaną z zagnieżdżonymi dwiema listami punktowanymi o elementach zgodnych z obrazem 3, zastosowano znaczniki <ol>, <ul>, <li> oraz ich zamknięcia
ok. 3 min
Polecenie z arkusza
Zawartość bloku lewego: lista numerowana (uporządkowana) z dwoma zagnieżdżonymi listami punktowanymi (nieuporządkowanymi), której treść przedstawia obraz 3.
<ol> z elementami „autokarowe” i „samolotem”; każda lista <ul> stoi wewnątrz swojego <li>, po jego tekście - tak zagnieżdżenie jest poprawne składniowo i czytnik ekranu ogłosi je jako podlistę.
Należy utworzyć plik tekstowy o nazwie regulamin.txt, z treścią „Regulamin”.
Zwykły plik tekstowy (np. w Notatniku) z jednym słowem Regulamin, zapisany w folderze zdającego. Za chwilę strona dostanie do niego odnośnik - kliknięcie wyświetli plik w przeglądarce.
R.3.2 Na stronie zapisano odnośnik o treści "Regulamin biura podróży", którego kliknięcie powoduje wyświetlenie / pobranie dokumentu regulamin.txt
R.2.4 W banerze zapisano h1: "Podróże z uśmiechem" oraz w bloku lewym zapisano dwa h2: "Nasze wycieczki" i "Pobierz dokumenty" oraz w bloku lewym zapisano przynajmniej jeden paragraf
ok. 1 min
Polecenie z arkusza
Zawartość bloku lewego: akapit (paragraf) o treści „Regulamin biura podróży”, który jest odnośnikiem do dokumentu regulamin.txt.
Odnośnik względny w akapicie <p>. Blok lewy ma teraz komplet elementów R.2.4: <h1> w banerze, dwa <h2> i paragraf.
Krok 18: Akapit z odnośnikiem do galerii w nowym oknie
Kryteria: ,
R.3.3 Na stronie zapisano odnośnik o treści "Zdjęcia z naszych wycieczek", którego kliknięcie powoduje otwarcie strony http://galeria.pl
R.3.4 Odnośnik do strony zewnętrznej otwierany jest w osobnym oknie przeglądarki
ok. 1 min
Polecenie z arkusza
Zawartość bloku lewego: akapit o treści „Zdjęcia z naszych wycieczek”, który jest odnośnikiem do strony http://galeria.pl/. Odnośnik otwiera się w osobnym oknie.
target="_blank" otwiera nową kartę albo okno, a rel="noopener" odcina otwartej stronie dostęp do karty biura (window.opener) - obca strona nie podmieni jej na fałszywą.
R.2.5 W bloku prawym zapisano tabelę o wymiarze: 2 x 2, zastosowano znaczniki <table>, <tr>, <td> oraz ich zamknięcia
R.2.6 W komórkach tabeli umieszczono obrazy: polska.jpg, wlochy.jpg, grecja.jpg, hiszpania.jpg , ich rozmieszczenie jest zgodne z obrazem 2 arkusza
ok. 2 min
Polecenie z arkusza
Zawartość bloku prawego: tabela 2x2, w komórkach tabeli znajdują się obrazy, kolejno: polska.jpg, wlochy.jpg, grecja.jpg, hiszpania.jpg.
Arkusz i klucz wymagają tabeli (<table>, <tr>, <td>), więc zostaje tabela, choć dziś galerię zdjęć układa się raczej siatką CSS - tabela służy do danych w wierszach i kolumnach. Kolejność: Kraków, Wenecja, Grecja, Barcelona.
R.2.7 Nadano tekst alternatywny dla przynajmniej dwóch obrazów: „Zwiedzanie Krakowa” - polska.jpg ; " Wenecja i nie tylko" - wlochy.jpg ; „Gorące greckie wyspy” - grecja.jpg ; „Słoneczna Barcelona” - hiszpania.jpg
ok. 1 min
Polecenie z arkusza
W komórkach tabeli znajdują się obrazy, kolejno: polska.jpg z tekstem alternatywnym „Zwiedzanie Krakowa”, wlochy.jpg z tekstem alternatywnym „Wenecja i nie tylko”.
alt opisuje zdjęcie dla czytnika ekranu i wyświetla się, gdy obraz się nie wczyta.
biuro.phpPHPzmienione: 2 linie
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Turystyka moja pasja</title> <linkrel="stylesheet"href="styl.css"></head><body> <headerid="banner"> <h1>Podróże z uśmiechem</h1> </header> <sectionid="cookies"> </section> <mainid="left"> <h2>Nasze wycieczki</h2> <ol> <li>autokarowe <ul> <li>po Polsce</li> <li>do Niemiec i Czech</li> </ul> </li> <li>samolotem <ul> <li>Grecja</li> <li>Barcelona</li> <li>Wenecja</li> </ul> </li> </ol> <h2>Pobierz dokumenty</h2> <p><ahref="regulamin.txt">Regulamin biura podróży</a></p> <p><ahref="http://galeria.pl/"target="_blank"rel="noopener">Zdjęcia z naszych wycieczek</a></p> </main> <asideid="right"> <table> <tr> <td><imgsrc="polska.jpg"alt="Zwiedzanie Krakowa"></td> <td><imgsrc="wlochy.jpg"alt="Wenecja i nie tylko"></td> </tr> <tr> <td><imgsrc="grecja.jpg"></td> <td><imgsrc="hiszpania.jpg"></td> </tr> </table> </aside> <footer> </footer></body></html>
Podgląd strony po tym kroku (biuro.php)
Krok 21: Teksty alternatywne: Grecja i Barcelona
ok. 1 min
Polecenie z arkusza
Dalej: grecja.jpg z tekstem alternatywnym „Gorące greckie wyspy”, hiszpania.jpg z tekstem alternatywnym „Słoneczna Barcelona”.
Dwa pozostałe teksty - komplet czterech.
biuro.phpPHPzmienione: 2 linie
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Turystyka moja pasja</title> <linkrel="stylesheet"href="styl.css"></head><body> <headerid="banner"> <h1>Podróże z uśmiechem</h1> </header> <sectionid="cookies"> </section> <mainid="left"> <h2>Nasze wycieczki</h2> <ol> <li>autokarowe <ul> <li>po Polsce</li> <li>do Niemiec i Czech</li> </ul> </li> <li>samolotem <ul> <li>Grecja</li> <li>Barcelona</li> <li>Wenecja</li> </ul> </li> </ol> <h2>Pobierz dokumenty</h2> <p><ahref="regulamin.txt">Regulamin biura podróży</a></p> <p><ahref="http://galeria.pl/"target="_blank"rel="noopener">Zdjęcia z naszych wycieczek</a></p> </main> <asideid="right"> <table> <tr> <td><imgsrc="polska.jpg"alt="Zwiedzanie Krakowa"></td> <td><imgsrc="wlochy.jpg"alt="Wenecja i nie tylko"></td> </tr> <tr> <td><imgsrc="grecja.jpg"alt="Gorące greckie wyspy"></td> <td><imgsrc="hiszpania.jpg"alt="Słoneczna Barcelona"></td> </tr> </table> </aside> <footer> </footer></body></html>
Podgląd strony po tym kroku (biuro.php)
Krok 22: Stopka: autor strony
Kryteria:
R.2.9 W stopce umieszczono numer zdającego
ok. 1 min
Polecenie z arkusza
Zawartość stopki: tekst „Stronę przygotował: ”, dalej wstawiony numer zdającego.
Na egzaminie numer zdającego - tu imię i nazwisko autora.
biuro.phpPHPzmienione: 1 linia
<!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Turystyka moja pasja</title> <linkrel="stylesheet"href="styl.css"></head><body> <headerid="banner"> <h1>Podróże z uśmiechem</h1> </header> <sectionid="cookies"> </section> <mainid="left"> <h2>Nasze wycieczki</h2> <ol> <li>autokarowe <ul> <li>po Polsce</li> <li>do Niemiec i Czech</li> </ul> </li> <li>samolotem <ul> <li>Grecja</li> <li>Barcelona</li> <li>Wenecja</li> </ul> </li> </ol> <h2>Pobierz dokumenty</h2> <p><ahref="regulamin.txt">Regulamin biura podróży</a></p> <p><ahref="http://galeria.pl/"target="_blank"rel="noopener">Zdjęcia z naszych wycieczek</a></p> </main> <asideid="right"> <table> <tr> <td><imgsrc="polska.jpg"alt="Zwiedzanie Krakowa"></td> <td><imgsrc="wlochy.jpg"alt="Wenecja i nie tylko"></td> </tr> <tr> <td><imgsrc="grecja.jpg"alt="Gorące greckie wyspy"></td> <td><imgsrc="hiszpania.jpg"alt="Słoneczna Barcelona"></td> </tr> </table> </aside> <footer> Stronę przygotował: Bartosz Bryniarski </footer></body></html>
Podgląd strony po tym kroku (biuro.php)
Etap 3: Styl CSS
Kroki 23-30 · po tym etapie masz 29 z 34 kryteriów (pkt)
Krok 23: Plik styl.css: zmienne, border-box i krój Georgia
Kryteria:
R.4.1 Ustawiono domyślny krój czcionki dla całej strony na Georgia (dla * lub html, lub body, lub kontenera całej strony)
ok. 2 min
Polecenie z arkusza
Cechy formatowania CSS: wspólne dla całej strony: krój czcionki Georgia.
zmienne CSS w :root - kolory z arkusza pod nazwami opisującymi rolę, używane dalej przez var(...),
box-sizing: border-box - szerokość obejmuje dopełnienie, więc blok z padding i szerokością 100% nie wystaje poza okno,
R.3.1 Układ bloków po uruchomieniu strony w przeglądarce jest zgodny z Obrazem 2 w arkuszu egzaminacyjnym
ok. 3 min
Polecenie z arkusza
Podział strony na bloki: baner, poniżej blok ciasteczek, poniżej dwa bloki: lewy i prawy oraz na dole stopka. Podział zrealizowany za pomocą znaczników sekcji, tak, aby układ bloków strony po uruchomieniu w przeglądarce, był zgodny z Obrazem 2.
<body> jako kontener flex z flex-wrap: wrap: bloki stoją obok siebie, a gdy następny się nie mieści, przechodzi do nowego wiersza. Baner i blok ciasteczek (100%) zajmują po wierszu, blok lewy 35% i prawy 65% dzielą jeden wiersz, stopka zaczyna ostatni. margin: 0 usuwa domyślny odstęp strony od krawędzi okna - jak na obrazie 2.
Pomiar w Chrome przy oknie 1280 px: blok lewy 448 px, prawy 832 px, oba 550 px wysokości, stopka tuż pod nimi, bez poziomego paska przewijania.
Krok 29: Lista punktowana i odnośniki w kolorze Indigo
Kryteria:
R.4.3 Ustawiono biały kolor czcionki dla banera, bloku ciasteczek i stopki oraz Indigo dla listy punktowanej i odnośnika
ok. 2 min
Polecenie z arkusza
Wspólne dla selektora listy punktowanej oraz odnośnika: kolor czcionki Indigo.
Selektor ul, a - obie listy punktowane i oba odnośniki. Dodatkowo :focus-visible: odnośnik wybrany klawiszem Tab dostaje wyraźną ramkę w tym samym kolorze - osoba bez myszy widzi, gdzie jest.
Krok 30: Obrazy: wysokość, marginesy, rogi i cień pod kursorem
Kryteria: , , ,
R.4.4 Ustawiono wysokość bloku lewego i prawego na 550px oraz 240px dla obrazu
R.4.8 Ustawiono marginesy zewnętrzne (margin) 6px dla obrazu
R.4.9 Ustawiono zaokrąglenie rogów 20px dla obrazu (border-radius)
R.4.10 Gdy kursor myszy znajdzie się na obrazie dodawany jest cień o parametrach: bez przesunięcia, rozmycie 10px, szerokość rozmycia 2px kolor Indigo np. box-shadow: 0 0 10px 2px Indigo;
ok. 2 min
Polecenie z arkusza
Dla selektora obrazu: wysokość 240 px, marginesy zewnętrzne 6 px, zaokrąglenie rogów 20 px.
Kroki 31-32 · po tym etapie masz 34 z 34 kryteriów (pkt)
Krok 31: Zmienna $firstVisit i ciasteczko
Kryteria: , ,
R.5.1 Skrypt lub skrypty napisano w języku uruchamianym po stronie serwera, zawierają przynajmniej jedną zgodną ze składnią instrukcję
R.5.2 W skrypcie zastosowano funkcję ustawiającą ciasteczko o nazwie „ciastko” i zawartości „1”. Np. setcookie("ciastko", "1");
R.5.3 Funkcja setcookie jest wołana tylko, gdy nie jest ustawione ciasteczko
ok. 3 min
Polecenie z arkusza
Skrypt w przypadku, gdy witryna jest wyświetlona po raz pierwszy: tworzy ciasteczko o nazwie „ciastko” i zawartości „1”, pozostałe parametry funkcji przyjmują wartości domyślne.
Na samym początku pliku, przed <!DOCTYPE html> - ciasteczko to nagłówek HTTP, który musi wyjść przed treścią strony. Odpowiedź na pytanie „czy to pierwsza wizyta?” trafia raz do zmiennej $firstVisit (true, gdy przeglądarka nie odesłała ciasteczka), a setcookie('ciastko', '1') z parametrami domyślnymi wykonuje się tylko wtedy.
Sprawdzone na serwerze: bez ciasteczka odpowiedź ma nagłówek Set-Cookie: ciastko=1, z ciasteczkiem - nie ma go.
biuro.phpPHPzmienione: 7 linii
<?php$firstVisit = !isset($_COOKIE['ciastko']);if ($firstVisit) {setcookie('ciastko', '1');}?><!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Turystyka moja pasja</title> <linkrel="stylesheet"href="styl.css"></head><body> <headerid="banner"> <h1>Podróże z uśmiechem</h1> </header> <sectionid="cookies"> </section> <mainid="left"> <h2>Nasze wycieczki</h2> <ol> <li>autokarowe <ul> <li>po Polsce</li> <li>do Niemiec i Czech</li> </ul> </li> <li>samolotem <ul> <li>Grecja</li> <li>Barcelona</li> <li>Wenecja</li> </ul> </li> </ol> <h2>Pobierz dokumenty</h2> <p><ahref="regulamin.txt">Regulamin biura podróży</a></p> <p><ahref="http://galeria.pl/"target="_blank"rel="noopener">Zdjęcia z naszych wycieczek</a></p> </main> <asideid="right"> <table> <tr> <td><imgsrc="polska.jpg"alt="Zwiedzanie Krakowa"></td> <td><imgsrc="wlochy.jpg"alt="Wenecja i nie tylko"></td> </tr> <tr> <td><imgsrc="grecja.jpg"alt="Gorące greckie wyspy"></td> <td><imgsrc="hiszpania.jpg"alt="Słoneczna Barcelona"></td> </tr> </table> </aside> <footer> Stronę przygotował: Bartosz Bryniarski </footer></body></html>
Podgląd strony po tym kroku (biuro.php)
Krok 32: Komunikat w bloku ciasteczek
Kryteria: ,
R.5.4 Na stronie, która jest otwarta w przeglądarce po raz pierwszy, skrypt wyświetla komunikat "Witaj! Nasza strona używa ciasteczek" w bloku ciasteczek
R.5.5 Na stronie, która jest otwarta w przeglądarce po raz kolejny, skrypt wyświetla komunikat "Witaj ponownie na naszej stronie"
ok. 3 min
Polecenie z arkusza
Skrypt w przypadku, gdy witryna jest wyświetlona po raz pierwszy: wyświetla tekst w akapicie (paragrafie) o treści: „Witaj! Nasza strona używa ciasteczek”.
<?= ... ?> to skrót od <?php echo ... ?>. Operator warunkowywarunek ? a : b wybiera jeden z dwóch tekstów: przy pierwszej wizycie „Witaj! Nasza strona używa ciasteczek”, przy kolejnej - „Witaj ponownie na naszej stronie” (to też spełnia drugie wymaganie arkusza: „W przypadku, gdy witryna jest wyświetlona po raz kolejny, skrypt wyświetla w akapicie tekst o treści „Witaj ponownie na naszej stronie””). Akapit <p> stoi w HTML-u, PHP wstawia tylko tekst.
Sprawdzone na serwerze z zapamiętanym ciasteczkiem: pierwsze wczytanie - powitanie z informacją o ciasteczkach, drugie (na podglądzie) - „Witaj ponownie”.
biuro.phpPHPzmienione: 1 linia
<?php$firstVisit = !isset($_COOKIE['ciastko']);if ($firstVisit) {setcookie('ciastko', '1');}?><!DOCTYPE html><htmllang="pl"><head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1"> <title>Turystyka moja pasja</title> <linkrel="stylesheet"href="styl.css"></head><body> <headerid="banner"> <h1>Podróże z uśmiechem</h1> </header> <sectionid="cookies"> <p><?= $firstVisit ? 'Witaj! Nasza strona używa ciasteczek' : 'Witaj ponownie na naszej stronie'?></p> </section> <mainid="left"> <h2>Nasze wycieczki</h2> <ol> <li>autokarowe <ul> <li>po Polsce</li> <li>do Niemiec i Czech</li> </ul> </li> <li>samolotem <ul> <li>Grecja</li> <li>Barcelona</li> <li>Wenecja</li> </ul> </li> </ol> <h2>Pobierz dokumenty</h2> <p><ahref="regulamin.txt">Regulamin biura podróży</a></p> <p><ahref="http://galeria.pl/"target="_blank"rel="noopener">Zdjęcia z naszych wycieczek</a></p> </main> <asideid="right"> <table> <tr> <td><imgsrc="polska.jpg"alt="Zwiedzanie Krakowa"></td> <td><imgsrc="wlochy.jpg"alt="Wenecja i nie tylko"></td> </tr> <tr> <td><imgsrc="grecja.jpg"alt="Gorące greckie wyspy"></td> <td><imgsrc="hiszpania.jpg"alt="Słoneczna Barcelona"></td> </tr> </table> </aside> <footer> Stronę przygotował: Bartosz Bryniarski </footer></body></html>
Podgląd strony po tym kroku (biuro.php)
Etap 5: Porównanie z wersją podstawową
Kroki 33-34 · po tym etapie masz 34 z 34 kryteriów (pkt)
Krok 33: HTML i CSS: co się zmieniło
ok. 2 min
Polecenie z arkusza
Podział strony na bloki: baner, poniżej blok ciasteczek, poniżej dwa bloki: lewy i prawy oraz na dole stopka. Podział zrealizowany za pomocą znaczników sekcji, tak, aby układ bloków strony po uruchomieniu w przeglądarce, był zgodny z Obrazem 2.
znaczniki: <header>, <main>, <aside>, <footer> zamiast pięciu <section> - przeglądarka i czytnik ekranu wiedzą, gdzie jest nagłówek, treść główna i stopka,
układ: jeden display: flex z flex-wrap na <body> zamiast float w dwóch blokach i clear w stopce,
kolory ze zmiennych CSS, box-sizing: border-box, ramka :focus-visible dla klawiatury,
odnośnik w nowym oknie z rel="noopener" od pierwszej wersji.
Klucz ocenia efekt (układ zgodny z obrazem 2, cechy stylu) - obie wersje dostają te same punkty.
Skrypt w przypadku, gdy witryna jest wyświetlona po raz pierwszy: tworzy ciasteczko o nazwie „ciastko” i zawartości „1”, pozostałe parametry funkcji przyjmują wartości domyślne.
wersja podstawowa sprawdza isset($_COOKIE['ciastko']) dwa razy - na początku pliku i w bloku ciasteczek; zmiana nazwy ciasteczka wymaga poprawki w dwóch miejscach,
tu odpowiedź jest liczona raz i zapisana w $firstVisit, a w HTML-u stoi tylko <?= ... ?> z operatorem warunkowym - kod PHP w treści strony jest krótszy niż sam akapit,
parametry ciasteczka zostają domyślne w obu wersjach, bo tak każe arkusz; wersja podstawowa w etapie dobrych praktyk pokazuje opcje httponly i samesite, których używa się w prawdziwych serwisach.
Krok 35 · po tym etapie masz 34 z 34 kryteriów (pkt)
Krok 35: Plik przeglądarka.txt i nagranie płyty
ok. 3 min
Polecenie z arkusza
Po zakończeniu pracy utwórz w folderze z numerem, którym został podpisany arkusz, plik tekstowy o nazwie przeglądarka.txt. Zapisz w nim nazwę przeglądarki internetowej, w której weryfikowałeś poprawność działania witryny. Nagraj płytę z rezultatami pracy. W folderze powinny się znajdować pliki: biuro.php, grecja.jpg, hiszpania.jpg, polska.jpg, przeglądarka.txt, regulamin.txt, rozmycie.png, styl.css, wlochy.jpg, ewentualnie inne przygotowane pliki.
W przeglądarka.txt nazwa przeglądarki, w której sprawdzasz stronę. W folderze zdającego: biuro.php, grecja.jpg, hiszpania.jpg, polska.jpg, przeglądarka.txt, regulamin.txt, rozmycie.png, styl.css i wlochy.jpg. Stronę sprawdzasz przez serwer (XAMPP, adres http://localhost/...), nie przez otwarcie pliku - plik .php otwarty z dysku pokaże kod zamiast wyniku. Nagraj płytę, sprawdź jej odczyt i opisz ją numerem zdającego.
Symulacja ekranu w przeglądarce - w Android Studio / Visual Studio wygląd może się nieco różnić.
To jedno z możliwych rozwiązań. Egzaminator ocenia spełnienie kryteriów z klucza odpowiedzi, a nie zgodność z tym kodem - inna, poprawna droga też daje punkty.
Autor rozwiązania: Bartosz Bryniarski. Licencja CC BY-NC 4.0 - kopiowanie i przeróbki do celów niekomercyjnych, z podaniem autora i źródła (link do tej strony) (zasady wykorzystania). Treść arkusza i klucza oceniania pochodzi z CKE.