Drupal 8 Moduler Vecka 20, Uppgifter – Hooks och Templates

Nedan följer dagens övningar för hooks och templates. Om ni vill gå igenom min presentation jag gjorde under förmiddagen ännu en gång hittar ni den här .

Det finns även exempel-moduler på det vi gick igenom idag som ni kan hitta på Github, ta gärna en titt på dessa.

För mer information om hur referenser fungerar i PHP kan ni läsa följande sidor, referenser är när inparametern på funktionen har ett och-tecken & framför sig vilket är ganska vanligt i en del hooks.

Övning 1

Skapa en ny modul i eran modules mapp som heter example_hooks. Skapa sedan följande filer .info.yml, .routing.yml samt en .module fil i eran modul. Alla filer ska ha modulens namn som prefix.

Se sedan till så att modulen går att installera utan problem.

Övning 2

OBS! Denna övning har visat sig vara problematisk att genomföra. Om ni inte får det att fungera kan ni gå vidare till nästa övning.

Implementera en hook som istället för ett välkomstmeddelande när användaren loggar in visar ett farvälmeddelande när användaren loggar ut.

Denna hook kommer precis som den vi tidigare gick igenom under lektionen att registreras i vår .module fil där prefix på filen är modulens namn.

För att visa ett meddelande kan ni använda er av drupal_set_message precis som vi gjorde i gårdagens övning.

Övning 3

Registrera en ny template i din implementation av hook_theme med namnet example_variable där du även definierar en variabel vid namn message med standardvärdet null.

Skapa sedan en mapp i roten av din example_hooks modul som heter templates där du sedan skapa en ny fil vid namn example-variable.html.twig.

Skriv sedan följande för att se till att variabeln vi lade till i hook_theme skrivs ut i template filen:

<div class="message-wrapper">{{ message }}</div>

Skapa sedan en route i din .routes.yml samt lägg till en ny controller i src/Controllers vid namn ExampleHooksController.php. Se till så att den route du lägger till länkar till denna controllern, döp metoden (funktionen) i din controller till exampleVariable.

Lägg sedan till följande kod i din metod som renderar din template fil med ett specifikt värde, i detta fallet kommer meddelandet I am a example message visas.

return [
    '#theme' => 'example_variable',
    '#message' => $this->t('I am a example message!'),
];

Besök nu din route du registrerade och se så att allt fungerar. testa även att ändra värdet som setts för message några gånger och ladda om sidan.

Övning 4

Registrera ännu en template fil med hook_theme där du har minst två variabler varav en är en sträng och den andra variabeln är en array. Din sträng ska ha null som standard-värde och din array ska ha [] som standard. Maskin-namnet för din template fil bestämmer du själv.

Skapa sedan en template fil i din templates mapp där du ser till så att strängen visas och loopar över innehållet i dina array och visar dennes innehåll.

Använd sedan denna template fil i en controller och ange värden för dina variabler.

Övning 5

Implementera hook_form_FORM_ID_alter()  precis som vi gjorde i exemplet vi gick igenom under lektionen där vi la till en checkbox på inloggningsformuläret, men istället för att det är en checkbox ska ni lägga till ett textfält på inloggningsformuläret som ska representera en teroretisk captcha.

IOM att ni ännu inte gått igenom render arrays och formulär kan ni använda följande formulär-element för ert captcha fält.

$form['captcha'] = [
  '#type' => 'textfield',
  '#title' => new TranslatableMarkup('Captcha'),
  '#description' => new TranslatableMarkup('Please enter the captcha to login.'),
];

OBS! Glöm inte att importera TranslatableMarkup klassen i toppen av eran .module fil.

Om du blir klar

Läs på om formulär och render arrays inför morgondagens lektion eller fortsätt experimentera med hooks.

Bra referenser

0 votes