HOOKS
HOOKS
Vad är hooks?
Hooks är ett sätt för oss att modifiera beteende i Drupal core eller Moduler utan att ändra i originalfilerna.
Drupal själva definierar det kort såhär
Specially-named functions that a module defines, which are discovered and called at specific times, usually to alter behavior or data.
Så vad låter då hooks oss att göra?
Reagera på en händelse
-
En användare loggar in/ut
-
Innehåll sparas
Modifiera befintliga strukturer
-
Lägga till nya element till ett formulär innan det visas
-
Ändra värdet för ett tema innan det renderas
Registrera ny funktionalitet
-
Registrera template filer
-
Registrera hjälptext
Hur ser en hook ut?
function hook_user_login(Drupal\user\UserInterface $account) {}
Startar alltid med hook
Har oftast med modulens namn
Hur använder jag en hook i min .module fil?
function hook_user_login(Drupal\user\UserInterface $account) {}
function min_modul_user_login(Drupal\user\UserInterface $account) {}
Hook ersätts med namnet på våran modul
Va hittar jag information om hooks?
-
Drupals API dokumentation
-
*.api.php filer i moduler
-
Google!
Hooks vi kommer att titta lite närmre på idag
hook_node_presave
Anropas innan en nod sparas. En nod är innehåll på sajten som t.ex en Artikel.
hook_user_login
Anropas när en användare loggar in.
hook_form_FORM_ID_alter
Anropas när ett formulär byggs och låter oss modifiera strukturen.
hook_theme
Används för att registrera nya templates.
hook_node_presave()
/**
* Implements hook_node_presave().
*/
function example_hooks_node_presave(Drupal\Core\Entity\EntityInterface $node) {
$node->setTitle('I change all the titles before save!');
}
hook_user_login()
/**
* Implements hook_user_login().
*/
function example_hooks_user_login(Drupal\user\UserInterface $account) {
$message = 'Welcome back @username, nice to see you again!';
drupal_set_message(new TranslatableMarkup($message, [
'@username' => $account->getUsername(),
]));
}
hook_form_FORM_ID_alter()
/**
* Implements hook_form_FORM_ID_alter().
*/
function example_hooks_form_user_login_form_alter(&$form, $form_state, $form_id) {
$title = new TranslatableMarkup('Remember me');
$description = new TranslatableMarkup('Please remember me for two weeks.');
$form['remember_me'] = [
'#type' => 'checkbox',
'#title' => $title,
'#description' => $description,
];
}
FORM_ID Ersätts med maskin-namnet på formuläret, i detta fallet "form_user_login".
hook_theme()
/**
* Implements hook_theme().
*/
function example_templates_theme() {
return [
'example_theme_test' => [
'variables' => [
'text' => null,
],
];
};
Maskin-namn på vår template
Variabler som finns tillgängliga i vår template och som kan skickas in utifrån via en render array.
Från hook_theme() till template
/**
* Implements hook_theme().
*/
function example_templates_theme() {
return [
'example_theme_test' => [
'variables' => [
'text' => null,
],
];
};
I hook_theme() definierar vi våran templates maskin-namn med understreck men vår template-fil ska ha bindestreck. Alla template filer i Drupal ska ha .html.twig på slutet.
Hur ser template filen ut?
{% if text %}
<div class="text-wrapper">
{{ text }}
</div>
{% endif %}
Variabeln vi definierade i vår hook_theme() tidigare.
/**
* Implements hook_theme().
*/
function example_templates_theme() {
return [
'example_theme_test' => [
'variables' => [
'text' => null,
],
];
};
Snabb repetition av TWIG
{% if text %}
<div class="text-wrapper">
{{ text }}
</div>
{% endif %}
{% if colors %}
<ul class="colors">
{% for color in colors %}
<li class="color color-{{ color|lower }}">
{{ color }}
</li>
{% endfor %}
</ul>
{% endif %}
{{ text }}
Skriva ut en variabel
Statements
Loopar
Läs mer om TWIG på
http://twig.sensiolabs.org/documentation
Live kod!
Dagens övningar
Drupal 8 Hooks
By Christoffer Palm
Drupal 8 Hooks
- 4,343