drupal_add_html_head()によって追加されたメタタグはどのように注文しますか?


12

DrupalサイトにOpen Graphのサポートを追加していますが、次のようなdrupal_add_html_head()呼び出しがたくさんあります。

  $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');

全部で10個あります。それらは、呼び出されたのと同じ順序で出力されないようです(すべて単一の関数で)。

順序を設定するために使用できる重みの種類はありますか?

回答:


15

#weightプロパティを使用します。通り)(drupal_get_html_head使用しています)(drupal_renderをメタタグをレンダリングするためにそれらをレンダリングする際に、#weightが使用されています。

次のコードを使用して、ローカルサイトでテストを行います。ノードオブジェクトへの参照がないことを除いて、使用しているコードと同じです。

  $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());

私が得た出力は次のとおりです。

<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" />

ご覧のとおり、最後に追加されたタグが最初に表示されます。

その後、次のコードを実行します。

  $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());

私が得た出力は次のとおりです。

<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" />

ご覧のとおり、メタタグの順序が変更されています。コードから追加されたメタタグは、Drupalから追加されたデフォルトのメタタグの後に表示されます。

_drupal_default_html_head()(デフォルトのメタタグを返す関数)は、「Content-Type」メタタグに#weightを使用します。

  $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,
  );

素晴らしいです、ありがとう!うまくいきました。どこかで非常に明白な何かを見逃したようです。私自身の教育のために、これはどこで文書化されていますか?
ジャスティン

1
メタタグがでレンダリングされていることに気付いdrupal_render()たら、#weightが使用されているかどうかを確認しようとしました。これは、同じ関数でレンダリングされるフォーム要素に使用されるためです。ドキュメントにdrupal_render()は、「要素はuasort()を使用して内部的にソートされます」とあります。
キアムルノ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.