Template_preprocess_page () kullanarak düğüm türüne göre sayfa başlığı nasıl gizlenir


10

Geçerli sayfanın başlığını gizlemeye çalışıyorum (yazdırıldığı gibi page.tpl.php), geçerli sayfa 1 ise (teaser moduna zıt olarak) tam ekranda bir düğüm ise, VE 2) düğüm tipi konser veya biyo . Bu içerik türleri için düğüm başlığını doğrudan düğüm içeriğine yazdırıyorum, bu nedenle page.tpl.php tarafından yazdırılan kopyayı gizlemek istiyorum. Bunu doğrudan page.tpl.php içinde çalışmak için elde edemiyorum ve benim okuma en iyi uygulama ön işleme ve işlem işlevlerini kullanarak template.php şablon mantığı işlemek olduğunu göstermektedir. Yani, geçerli sayfa başlığını (yukarıdaki 2 koşul ile) kullanarak gizlemeye çalışıyorum template_preprocess_page(). Bu benim kodum.

<?php
    function MYTHEME_preprocess_page(&$variables) {
        if (!empty($variables['node']) && $variables['node']->type == 'concert') {
            hide($variables['title']);
        }
    }
?>

Okuduğum düğüm türü için ben testi template.php gelen bir değişken yazdırmak nasıl? ve template_preprocess_page()diğer çeşitli sitelerin dokümantasyon sayfasını ziyaret ettim, ancak bunun işe yaramasını sağlayamıyorum. Ben aramak zorunda önerileri gördüm isset()üzerinde $variables['node']düğüm türü için test etmeden önce, ama bu da işe yaramadı. Hiçbir yerde net bir çözüm görmedim ve zekamın sonundayım.

Yanıtlar:


9

ve benim okumam en iyi uygulama ön işleme ve süreç fonksiyonları kullanarak template.php şablon mantığı işlemek olduğunu göstermektedir.

Mantığın oluşturma kodundan ayrılması, template.php içindeki kodun şablon dosyasında kontrol edilen bir değişkeni ayarladığı anlamına gelir. Bu şekilde, mantığın tümü template.php dosyasında bulunurken, oluşturma kodu şablon dosyalarında bulunur.

template.php

function mytheme_preprocess_page(&$variables) {
  if (!empty($variables['node']) && $variables['node']->type == 'concert') {
    $variables['show_title'] = FALSE;
  }
}

page.tpl.php

<?php if ($show_title && $title): ?><h1 class="title" id="page-title"><?php print $title; ?></h1><?php endif; ?>

hide()çalışmıyor çünkü $variables['title']bir dize, oluşturma dizisi değil. hide()her zaman bir oluşturma dizisi ile kullanılır ve dize iletildiğinde bile dize ile herhangi bir etkisi yoktur render().
Aslında, hide()işlev bu kodu kullandığından , bir dizenin (veya dizi içeren bir değişkene başvuru olmayan herhangi bir değerin) geçirilmesi PHP hatasına neden olur.

function hide(&$element) {
  $element['#printed'] = TRUE;
  return $element;
}

Unsetting $variables['title']ile unset($variables['title'])olduğu gibi, çok çalışmaz template_process_page()gelen sayfa başlığını alacağı drupal_get_title().

if (!isset($variables['title'])) {
  $variables['title'] = drupal_get_title();
}

Tabii ki gerçek $titledeğişkeni ile de değiştirebilirsiniz mytheme_process_page(&$variables) { $title = false; }.
Rob

4
@RobW olurdu mytheme_process_page(&$variables) { $variables['title'] = false; }ve BTW çalışır.
2013

Bununla ilgili bir not daha; sürece tema sarar olarak <?php print $title; ?>yer <?php if (!$title_hidden): ?>size basitçe ayarlayabilirsiniz$variables['title_hidden'] = TRUE;
Duncanmoo

2

Bunu drupal_set_title () kullanarak yönetebilirsiniz.

function mytheme_preprocess_page(&$vars){
    if (isset($vars['node']) && $vars['node']->type == 'news'){
        drupal_set_title('');
    }
}

Bu benim için işe yaramadı. Başka bir şey geçersiz olabilir template_preprocess_page()mi? Yinelenen sayfa başlığını incelemek için Tema Geliştirici modülünü kullandım ve çağrıldığını onayladım page.tpl.php. Başlığı silmek page.tpl.phpve sonra kullanmak istediğim yere geri EKLEMEK düşünmeli miyim template_preprocess_page()? Örneğin, sayfa düğümlerin bir görünümünü içerdiğinde, ancak sayfa belirli bir tür / türün tek bir düğümü olduğunda başlığın oluşturulmasını istiyorum.
diekunstderfuge

1
Bu, ekran okuyucu kullanan ziyaretçilerden önemli bilgileri de çıkarabilir. Ayrıca, kullanıcılar sekmesinde sayfanın başlığını da kaldırır. Erişilebilirliği en baştan düşünün.
Rick

1

Eğer durumunuzun doğru olduğunu varsayarak bunu deneyin :)

 function MYTHEME_preprocess_page(&$variables) {
        if (!empty($variables['node']) && $variables['node']->type == 'concert') {
            unset($variables['title']);
        }
    }

Çalışmıyor: template_process_page () , $variables['title']döndürülen değerle ayarlanacaktır drupal_get_title().
kiamlaluno

0

Daha az karmaşık bir yol, bunu sayfanıza yazdırmaktır. Tpl.php

<?php hide($title); ?>

Ancak dinamik olmasını istiyorsanız, preprocess_pagebaşkalarının önerdiği şekilde kullanılmasını öneririm .


1
Çalışmıyor. hide(), dizelerle değil, oluşturma dizileriyle kullanılır.
kiamlaluno

0

CSS'de bunu temam için yaptım

/*    Front Page - hide title  */
body.front header h1 {
 position: absolute; 
 left: -999em;    
}

Http://www.alistapart.com/articles/now-you-see-me/ tarafından önerildiği gibi

Neden? Çünkü hala üstbilgi ve h1'in erişilebilirlik için ekran okuyucularına 'görünür' olmasını istiyorsunuz. Sadece H1'in değerini kaldırırsanız, görme engelli ve az gören ziyaretçilerinizi potansiyel olarak önemli bazı bilgilerle soyarsınız.


Bu işe yaramayacak. Neden? Çünkü programlama sitesi n'den yardım almadan koşullu CSS ekleyemezsiniz
AyeshK

Drupal, yukarıda kullanılan 'ön' gibi öğelere sınıflar ekler. Kendim için, başlığı ön sayfada gizlemem gerekiyor, ancak ekran okuyucuları için 'görünür' bırakıyorum. Bu nedenle, görüşlü kullanıcılardan gizlendiğinde ve gerekmediğinde açıkça tanımlamak için basamaklı kuralların mantığını kullanabilirim.
Rick

0

mytheme_preprocess_page önerisi benim için çalışıyor ancak kullanılıyorsa$vars['title_hidden'] = TRUE;

function mytheme_preprocess_page(&$vars) {
  if (isset($vars['node']->type) && $vars['node']->type == 'type') {
    $vars['title_hidden'] = TRUE;
  }
}

0

Doğru fonksiyon

function mytheme_preprocess_node(&$vars) {
}

onun yerine

function mytheme_preprocess_page(&$vars) {
}
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.