Wie kann ich in Drupal 8 einen benutzerdefinierten 404 page
erstellen?
Ich habe im Backoffice eine neue Seite (Content) mit dem Namen 404
(Knotennummer 100) erstellt. Ich habe es als 404-Standardseite unter Configuration
> Basic site
-Einstellungen festgelegt.
Es funktioniert mit den Inhalten, die ich im Backoffice eingestellt habe.
Aber jetzt möchte ich, dass es programmgesteuert bearbeitet werden kann und ich weiß nicht, wie ich die überschreibende Datei erstellen kann.
Ich habe versucht, mytheme/templates/html--node--100.html.twig
zu erstellen, und es funktioniert nur, wenn die Anforderung direkt mit dieser URL (node/100
) verknüpft ist. Es funktioniert jedoch nicht, wenn Sie einen zufälligen Fehler in der URL versuchen und Drupal ihn beheben muss. In diesem Fall stellt mir drupal den Inhalt zur Verfügung, den der 404 page
im Backoffice und nicht in der soeben erstellten Datei hat.
Ich habe verschiedene Dateien wie page--404-html.twig
, html--node--404.html.twig
, html--page--404.html.twig
ausprobiert, ... aber es funktioniert auch nicht
Kann mir jemand helfen?
page-system-404.html.twig (oder das Äquivalent für andere 4xx-Status) funktioniert in Drupal 8.3 nicht mehr, da sich die 4xx-Antwortbehandlung geändert hat. Sie benötigen jetzt den Kern-Patch von https://www.drupal.org/node/2363987 oder einen ähnlichen benutzerdefinierten Modul-Hook, der Vorlagenvorschläge für diese Seiten hinzufügt:
/**
* Implements hook_theme_suggestions_page() to set 40x template suggestions
*/
function MYMODULE_theme_suggestions_page(array $variables) {
$path_args = explode('/', trim(\Drupal::service('path.current')->getPath(), '/'));
$suggestions = theme_get_suggestions($path_args, 'page');
$http_error_suggestions = [
'system.401' => 'page__401',
'system.403' => 'page__403',
'system.404' => 'page__404',
];
$route_name = \Drupal::routeMatch()->getRouteName();
if (isset($http_error_suggestions[$route_name])) {
$suggestions[] = $http_error_suggestions[$route_name];
}
return $suggestions;
}
BEARBEITEN: Es ist wahrscheinlich besser, hook_theme_suggestions_page_alter
zu verwenden, um das Vorschläge-Array zu ändern. Eine aktualisierte Version dieses Codes finden Sie unter https://www.drupal.org/project/fourxx_templates (oder https://github.com/ahebrank/fourxx_templates/blob/8.x-1.x /fourxx_templates.module )
Die folgende Implementierung fügt einen Vorlagenvorschlag für die Seite hinzu. In diesem Fall können Sie die Seite anpassen, wenn Sie eine page - 404.html.twig - Datei in Ihrem Design erstellen und mit Drupal 8.5.1 arbeiten
MYTHEME.theme
/**
* Implements hook_theme_suggestions_HOOK_alter().
*/
function MYTHEME_theme_suggestions_page_alter(&$suggestions, $variables, $hook) {
/**
* 404 template suggestion.
*/
if (!is_null(Drupal::requestStack()->getCurrentRequest()->attributes->get('exception'))) {
$status_code = Drupal::requestStack()->getCurrentRequest()->attributes->get('exception')->getStatusCode();
switch ($status_code) {
case 404: {
$suggestions[] = 'page__' . (string) $status_code;
break;
}
default:
break;
}
}
}
und erstelle eine Vorlage namens page - 404.html.twig und überschreibe sie mit deinen Sachen
Versuchen Sie es mit page-system-404.html.twig