Optimierung des Nutzererlebnisses: Anpassung von Drupal's Fehlerseiten
401, 403 und 404 - wir sind alle mindestens einmal in unserem Leben auf diese HTTP-Statuscodes gestoßen, während wir das World Wide Web erkundet haben. Wie fühlen Sie sich, wenn diese Fehlerseiten auftauchen, anstatt das, wonach Sie suchen?
Nicht zu finden, wonach Sie suchen, ist mehr als frustrierend. Daher müssen diese Seiten so wenig frustrierend wie möglich gestaltet werden, um die anfängliche Enttäuschung auszugleichen und die Benutzer zum weiteren Durchsuchen der Website zu ermutigen.
Während Fehlerseiten standardmäßig beim Erstellen einer Website enthalten sind, lautet die eigentliche Frage: Sollten wir sie einfach und ungestaltet lassen, oder sollten wir versuchen, die Benutzererfahrung mit ihnen interessanter zu gestalten?
Während des DrupalCamp London habe ich festgestellt, dass viele Entwickler vor der Herausforderung stehen, diese Seiten zu erstellen und anzupassen. Alles beginnt damit, dass Designer versuchen, alles ansprechend und stressfrei zu gestalten. Dann arbeiten die Entwickler daran, diese Designs zu individualisieren und zum Leben zu erwecken.
Nach meiner Erfahrung sollten Sie sie nicht einfach "sein lassen". Diese Seiten können kleine, skurrile Elemente enthalten, die den Benutzern helfen, zu vergessen, dass sie nicht das erwartete Ergebnis erhalten haben - um den Fehler zu vergessen und zu verzeihen.
Fast alle meine bisherigen Projekte hatten gestaltete Fehlerseiten. Ich fühle mich dafür verantwortlich, Designs für diese Seiten anzufordern, wann immer sie übersehen werden könnten.
So passen Sie Fehlerseiten in Drupal an
Betrachten wir die verschiedenen verfügbaren Methoden:
Vorgehensweise bei Drupal 7
In Drupal 7 haben Sie zwei Hauptansätze:
Verwendung der generischen Fehler-Vorlage:
// page--error.tpl.php
<div class="error-page">
<?php if ($messages): ?>
<div class="messages">
<?php print $messages; ?>
</div>
<?php endif; ?>
<div class="error-content">
<?php print render($page['content']); ?>
</div>
</div>
2. Erstellen spezifischer Vorlagen für jeden Fehlertyp mit einem Hook in Ihrem Theme:
// template.php
function YOURTHEME_preprocess_page(&$variables) {
// Get the current HTTP status code
$status = drupal_get_http_header("status");
if ($status == "404 Not Found") {
// Create template suggestion for 404
$variables['theme_hook_suggestions'][] = 'page__404';
}
elseif ($status == "403 Forbidden") {
// Create template suggestion for 403
$variables['theme_hook_suggestions'][] = 'page__403';
}
elseif ($status == "401 Unauthorized") {
// Create template suggestion for 401
$variables['theme_hook_suggestions'][] = 'page__401';
}
}
Dann erstellen Sie spezifische Vorlagendateien:
// page--404.tpl.php
<div class="error-404">
<h1>Seite nicht gefunden</h1>
<p>Leider konnte die Seite, nach der Sie gesucht haben, nicht gefunden werden.</p>
<?php print theme('search_block_form'); // Optional: Add a search form ?>
</div>
// page--403.tpl.php
<div class="error-403">
<h1>Zugriff verweigert</h1>
<p>Sie haben keine Berechtigung, auf diese Seite zuzugreifen.</p>
<?php if (!$logged_in): ?>
<?php print drupal_render(drupal_get_form('user_login_block')); ?>
<?php endif; ?>
</div>
Dann können Sie diese Vorlagen mit dem CSS Ihres Themes gestalten:
.error-404, .error-403 {
text-align: center;
padding: 50px 20px;
max-width: 600px;
margin: 0 auto;
}
.error-404 h1, .error-403 h1 {
font-size: 48px;
color: #e74c3c;
margin-bottom: 20px;
}
.error-404 p, .error-403 p {
font-size: 18px;
line-height: 1.6;
color: #555;
}
Durch die Implementierung dieser Anpassungen können Sie Fehlerseiten erstellen, die den Benutzern nicht nur mitteilen, was schief gelaufen ist, sondern auch eine bessere Benutzererfahrung mit hilfreichen Optionen wie Suchfunktionen oder Anmeldeformularen bieten, wenn dies angebracht ist.
Vergessen Sie nicht, den Cache Ihres Theme-Registers zu löschen, nachdem Sie neue Vorlagendateien hinzugefügt haben, damit Drupal sie in der Bash erkennt
drush cc all

Drupal 8+ Ansatz
Für Drupal 8 und höher ist die Implementierung anders und strukturierter. So geht's:
1. Erstellen Sie zuerst einen Theme-Vorschlag in Ihrer THEMENAME.theme-Datei:
/**
* Implementiert hook_theme_suggestions_page_alter().
*/
function THEMENAME_theme_suggestions_page_alter(array &$suggestions, array $variables) {
$route_name = \Drupal::routeMatch()->getRouteName();
if ($route_name == 'system.403') {
$suggestions[] = 'page__403';
}
if ($route_name == 'system.404') {
$suggestions[] = 'page__404';
}
}
2. Erstellen Sie Ihre Twig-Templates für die Fehlerseiten:
{# page--404.html.twig #}
{% extends "page.html.twig" %}
{% block content %}
<div class="error-page error-404">
<h1>{{ 'Seite nicht gefunden'|t }}</h1>
<div class="error-message">
<p>{{ 'Die angeforderte Seite konnte nicht gefunden werden.'|t }}</p>
</div>
{% if search_form %}
<div class="search-block">
{{ search_form }}
</div>
{% endif %}
</div>
{% endblock %}
{# page--403.html.twig #}
{% extends "page.html.twig" %}
{% block content %}
<div class="error-page error-403">
<h1>{{ 'Zugriff verweigert'|t }}</h1>
<div class="error-message">
<p>{{ 'Sie haben keine Berechtigung, auf diese Seite zuzugreifen.'|t }}</p>
</div>
{% if not logged_in %}
<div class="login-block">
{{ drupal_block('user_login_block') }}
</div>
{% endif %}
</div>
{% endblock %}
Fügen Sie Ihre CSS-Styling hinzu:
/* error-pages.css */
.error-page {
text-align: center;
padding: 4rem 2rem;
max-width: 800px;
margin: 0 auto;
}
.error-page h1 {
font-size: 3rem;
color: #e74c3c;
margin-bottom: 1.5rem;
}
.error-message {
font-size: 1.2rem;
line-height: 1.6;
color: #555;
margin-bottom: 2rem;
}
.search-block,
.login-block {
max-width: 400px;
margin: 2rem auto;
padding: 1rem;
background: #f8f9fa;
border-radius: 4px;
}
Für eine erweiterte Anpassung können Sie auch einen benutzerdefinierten Controller erstellen:
// src/Controller/CustomErrorController.php
namespace Drupal\your_module\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Response;
class CustomErrorController extends ControllerBase {
public function error404() {
$build = [
'#theme' => 'error_404',
'#search_form' => \Drupal::formBuilder()->getForm('Drupal\search\Form\SearchBlockForm'),
];
return $build;
}
public function error403() {
$build = [
'#theme' => 'error_403',
'#login_form' => \Drupal::formBuilder()->getForm('Drupal\user\Form\UserLoginForm'),
];
return $build;
}
}
Vergessen Sie nicht, den Cache zu löschen, nachdem Sie diese Änderungen vorgenommen haben:
drush cr
Denken Sie an diese wichtigen Punkte:
- Testen Sie Ihre Fehlerseiten immer zuerst in einer Entwicklungsumgebung
- Stellen Sie sicher, dass Ihre Fehlerseiten Ihr Markenimage beibehalten
- Fügen Sie hilfreiche Navigationsmöglichkeiten hinzu
- Überlegen Sie, eine Suchfunktion hinzuzufügen
- Machen Sie die Fehlermeldung klar, aber freundlich
- Geben Sie klare nächste Schritte für die Benutzer an
Diese Anpassungen helfen dabei, eine bessere Benutzererfahrung zu schaffen, auch wenn etwas schief geht. Der Schlüssel besteht darin, einen potenziellen Frustrationspunkt in eine Gelegenheit zu verwandeln, den Benutzern zu helfen, das zu finden, was sie suchen, oder etwas Neues auf Ihrer Website zu entdecken.
Ich bin sicher, es gibt auch andere Möglichkeiten, dies zu tun, aber das sind die Methoden, die ich normalerweise verwende und bisher haben sie mich nie im Stich gelassen.
Was ist also Ihre bevorzugte Methode zur Anpassung einer Fehlerseite?