Drupal_add_html_head () tarafından eklenen meta etiketleri nasıl sipariş edersiniz?


12

Ben bir Drupal sitesine Açık Grafik desteği ekliyorum ve drupal_add_html_head () çağrıları gibi bir demet var:

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

Toplamda bunlardan 10 tane var. Çıktıkları sırayla çıktı gibi görünmüyorlar (hepsi tek bir işlevde).

Siparişi ayarlamak için kullanabileceğim bir çeşit ağırlık var mı?

Yanıtlar:


15

#Weight özelliğini kullanın. As drupal_get_html_head () kullanır drupal_render () onları işlerken #weight kullanılır, meta etiketleri işlemek için.

Yerel sitemde bir test yapmak için aşağıdaki kodu kullanır; düğüm nesnesine herhangi bir başvurusu olmaması dışında, kullandığınız kodla aynıdır.

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

Aldığım çıktı şu.

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

Gördüğünüz gibi, ilk eklenen etiket ilk görünür.

Sonra aşağıdaki kodu çalıştırın.

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

Aldığım çıktı şu.

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

Gördüğünüz gibi meta etiketlerin sırası değişti; koddan eklenen meta etiketler Drupal'dan eklenen varsayılan meta etiketlerden sonra görünür.

_drupal_default_html_head () (varsayılan meta etiketleri döndüren işlev) "Content-Type" meta etiketi için #weight kullanır.

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

Harika, teşekkürler! Bu işe yaradı. Bir yerde çok bariz bir şeyi kaçırmışım gibi görünüyor. Kendi eğitimim için, bunu nerede belgelediniz?
Justin

1
Meta etiketlerle oluşturulduğunu fark ettikten sonra drupal_render(), #weight'in kullanılıp kullanılmadığını görmeye çalıştım, çünkü aynı işlevle oluşturulan form öğeleri için kullanıldı. İçin belgeler drupal_render(): "Öğeler dahili olarak uasort () kullanılarak sıralanır."
kiamlaluno
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.