it-swarm.com.de

Benutzerdefinierte 404-Vorlagendatei in Drupal 8

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.

 Settings

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?

6
cadev

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 )

11
ahebrank

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

3
Israel Morales

Versuchen Sie es mit page-system-404.html.twig

2
n8tron