Wie bestellen Sie Meta-Tags, die von drupal_add_html_head () hinzugefügt wurden?


12

Ich füge einer Drupal-Site Open Graph-Unterstützung hinzu und habe eine Reihe von drupal_add_html_head () -Aufrufen, wie:

  $og_title = array(
    '#tag' => 'meta',
    '#attributes' => array(
      'property' => 'og:title', 
      'content' => $node->title,
    ),
  );
  drupal_add_html_head($og_title, 'zujava_og_title');

 $og_url = array(
    '#tag' => 'meta',
    '#attributes' => array(
      'property' => 'og:url', 
      'content' => url('node/' . $node->nid, array('absolute' => TRUE)),
    ),
  );
  drupal_add_html_head($og_url, 'zujava_og_url');

Insgesamt habe ich 10 davon. Sie scheinen nicht in derselben Reihenfolge ausgegeben zu werden, in der sie aufgerufen wurden (alle in einer einzigen Funktion).

Gibt es eine Art Gewichtung, mit der ich die Reihenfolge festlegen kann?

Antworten:


15

Verwenden Sie die Eigenschaft #weight. Als drupal_get_html_head () verwendet drupal_render () die Meta - Tags zu machen, #weight verwendet wird , wenn sie zu machen.

Ich verwende den folgenden Code, um einen Test auf meiner lokalen Site durchzuführen. Es ist derselbe Code, den Sie verwenden, außer dass er keinen Verweis auf das Knotenobjekt enthält.

  $og_title = array(
    '#tag' => 'meta',
    '#attributes' => array(
      'property' => 'og:title', 
      'content' => "This is the title",
    ),
  );
  drupal_add_html_head($og_title, 'zujava_og_title');

 $og_url = array(
    '#tag' => 'meta',
    '#attributes' => array(
      'property' => 'og:url', 
      'content' => url('node/1', array('absolute' => TRUE)),
    ),
  );
  drupal_add_html_head($og_url, 'zujava_og_url');

  dsm(drupal_get_html_head());

Die Ausgabe, die ich bekam, ist die folgende.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta property="og:url" content="http://tero.local/dr72/node/1" />
<meta name="Generator" content="Drupal 7 (http://drupal.org)" />
<meta property="og:title" content="This is the title" />

Wie Sie sehen, wird das zuletzt hinzugefügte Tag zuerst angezeigt.

Ich führe dann den folgenden Code aus.

  $og_title = array(
    '#tag' => 'meta',
    '#attributes' => array(
      'property' => 'og:title', 
      'content' => "This is the title",
    ),
    '#weight' => 10,
  );
  drupal_add_html_head($og_title, 'zujava_og_title');

 $og_url = array(
    '#tag' => 'meta',
    '#attributes' => array(
      'property' => 'og:url', 
      'content' => url('node/1', array('absolute' => TRUE)),
    ),
    '#weight' => 200,
  );
  drupal_add_html_head($og_url, 'zujava_og_url');

  dsm(drupal_get_html_head());

Die Ausgabe, die ich bekam, ist die folgende.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="Generator" content="Drupal 7 (http://drupal.org)" />
<meta property="og:title" content="This is the title" />
<meta property="og:url" content="http://tero.local/dr72/node/1" />

Wie Sie sehen, wurde die Reihenfolge der Meta-Tags geändert. Die aus dem Code hinzugefügten Meta-Tags werden nach den aus Drupal hinzugefügten Standard-Meta-Tags angezeigt.

_drupal_default_html_head () (die Funktion, die die Standard-Metatags zurückgibt) verwendet #weight für das Metatag "Content-Type".

  $elements['system_meta_content_type'] = array(
    '#type' => 'html_tag', 
    '#tag' => 'meta', 
    '#attributes' => array(
      'http-equiv' => 'Content-Type', 
      'content' => 'text/html; charset=utf-8',
    ),
    // Security: This always has to be output first. 
    '#weight' => -1000,
  );

Super, danke! Das hat funktioniert. Es scheint, als hätte ich irgendwo etwas sehr offensichtliches verpasst. Wo haben Sie das für meine eigene Ausbildung dokumentiert?
Justin

1
Als ich bemerkte, dass die Meta-Tags mit gerendert werden drupal_render(), habe ich versucht festzustellen, ob #weight verwendet wurde, da es für Formularelemente verwendet wird, die über dieselbe Funktion gerendert werden. In der Dokumentation zu drupal_render()heißt es: "Elemente werden mit uasort () intern sortiert."
kiamlaluno
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.