it-swarm.com.de

$ is_front ist nicht in allen Vorlagen verfügbar

Soweit ich weiß, ist $ is_front eine globale Vorlagenvariable in Drupal 7) und daher ist die Variable in allen Vorlagen verfügbar.

Nun zu Drupal 8) scheint dies nicht mehr zu stimmen. Ich habe versucht, $is_front In page-title.html.twig aufzurufen und festgestellt, dass $is_front war hier nicht verfügbar.

Mit template_preprocess_page_title(&$variables) konnte ich der Vorlage $is_front Hinzufügen.

* Warum bietet Drupal 8 nicht $is_front Im gleichen Stil wie Drupal 7?) Und wie kann nach der Startseite gesucht werden? eine Vorlage, in der $is_front nicht verfügbar ist? **

Es scheint auch, dass drupal_is_front_page () nicht mehr verfügbar ist.

Soll ich gehen wie:

  try {
$variables['is_front'] = \Drupal::service('path.matcher')->isFrontPage();


 }

      catch (Exception $e) {
        // If the database is not yet available, set default values for these
        // variables.
        $variables['is_front'] = FALSE;
        $variables['db_is_active'] = FALSE;
      }

(entnommen aus template_preprocess_page )

4
Stefan Korn

Sie haben die Frage fast selbst beantwortet. Mit diesem Code können Sie die Variable allen Vorlagen hinzufügen:

function theme_preprocess(&$variables, $hook) {
  try {
    $variables['is_front'] = \Drupal::service('path.matcher')->isFrontPage();
  }
  catch (Exception $e) {
    $variables['is_front'] = FALSE;
  }
  // Ensure the cache varies correctly (new in Drupal 8.3).
  $variables['#cache']['contexts'][] = 'url.path.is_front';
}

Aus Leistungsgründen können Sie eine Bedingung für $ hook festlegen, um die Variable nur zu den Vorlagen hinzuzufügen, die Sie benötigen, und um zu vermeiden, dass der Code zweimal für die Seite ausgeführt wird.

Bearbeiten:

Neu in Drupal 8.3: Cache-Kontext zum Bestimmen der Startseite

10
4k4