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가 동일한 기능을 통해 렌더링되는 양식 요소에 사용되므로 #weight가 사용되었는지 확인하려고했습니다. 에 대한 문서는 drupal_render()말한다 : "요소가 내부적으로 () uasort를 사용하여 분류되어 있습니다."
kiamlaluno
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.