Как вы заказываете метатеги, добавленные drupal_add_html_head ()?

Я добавляю поддержку Open Graph на сайт Drupal, и у меня есть куча вызовов 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. Кажется, что они не выводятся в том же порядке, который они вызывают (все в одной функции).

Есть ли какой-то весовой коэффициент, который я могу использовать для установки порядка?

10 голосов | спросил Justin 17 Maypm12 2012, 21:37:25

1 ответ


14

Используйте свойство #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 () (функция, возвращающая метаданные по умолчанию теги) использует # weight для метатега «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,
  );
ответил kiamlaluno 18 Mayam12 2012, 05:21:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132