Làm thế nào để bạn đặt hàng thẻ meta được thêm bởi drupal_add_html_head ()?


12

Tôi đang thêm hỗ trợ Open Graph vào trang web Drupal và tôi có một loạt các cuộc gọi drupal_add_html_head (), như:

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

Tổng cộng, tôi có 10 trong số này. Chúng dường như không xuất ra theo thứ tự giống như chúng được gọi (tất cả trong một hàm duy nhất).

Có một số loại trọng số tôi có thể sử dụng để đặt hàng?

Câu trả lời:


15

Sử dụng thuộc tính # weight. Vì drupal_get_html_head () sử dụng drupal numnder () để hiển thị các thẻ meta, # weight được sử dụng khi kết xuất chúng.

Tôi sử dụng mã sau đây để thực hiện kiểm tra trên trang web địa phương của mình; đó là cùng một mã bạn đang sử dụng, ngoại trừ nó không có bất kỳ tham chiếu nào đến đối tượng nút.

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

Đầu ra tôi nhận được là cái sau.

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

Như bạn thấy, thẻ được thêm vào cuối cùng là thẻ đầu tiên xuất hiện.

Tôi sau đó chạy mã sau đây.

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

Đầu ra tôi nhận được là cái sau.

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

Như bạn thấy, thứ tự của các thẻ meta đã được thay đổi; các thẻ meta được thêm từ mã xuất hiện sau khi các thẻ meta mặc định được thêm từ Drupal.

_drupal_default_html_head () (hàm trả về các thẻ meta mặc định) sử dụng # weight cho thẻ meta "Kiểu nội dung".

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

Thật sự cảm ơn! Điều này đã làm việc. Có vẻ như tôi đã bỏ lỡ một cái gì đó rất rõ ràng ở đâu đó. Đối với giáo dục của riêng tôi, bạn đã tìm thấy tài liệu này ở đâu?
Justin

1
Khi tôi nhận thấy các thẻ meta được hiển thị cùng drupal_render(), tôi đã thử xem liệu # weight đã được sử dụng chưa, vì nó được sử dụng cho các phần tử biểu mẫu được kết xuất thông qua cùng chức năng. Tài liệu cho drupal_render()biết: "Các phần tử được sắp xếp bên trong bằng uasort ()."
kiamlaluno
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.