Drupal'da belirli bir sayfada görüntülenecek bloklar nasıl görüntülenir?


10

Bir modül çölü düşünün:

  • Sayfa 1:- deserts/*
  • sayfa 2:- deserts/*/*
  • sayfa3: - deserts/*/*/*

Dinamik bir içerik ...

Üç blok var, a, b ve c:

  • A bloğu yalnızca sayfa1'de görüntülenmelidir
  • Blok b yalnızca sayfa 2'de gösterilmelidir
  • A bloğu yalnızca sayfa 3'te görüntülenmelidir

Bu kısıtlamayı nasıl yapmalı?


Drupal 6 veya 7? 6, blok görünürlüğü için PHP kodunun tanımlanmasını kolaylaştırır.
Mołot

It's drupal7 molot
Ajmal

2
@Ajmal Verilen cevaplar hakkında yorum yapabilmeniz ve neden yardımcı olmadıklarını açıklamanız yararlı olacaktır. İnsanlar (doğal olarak) yüksek oylanan cevabın doğru olduğunu varsayar ve bu cevabın sizin için neden işe yaramadığını açıklamadıysanız bir alternatif sunmaya devam etmezler.
Clive

desert/*/*/ desert/*/editBenim bloğum için desert/*/*değil görüntülenmesi için sayfa var desert/*/edit Bu durumda benim için çalışmıyor ..
Ajmal

1
Belki de sadece benim, ama bu kafa karıştırıcı görünüyor. *joker anlamına gelir. Blok görünür bir çözüm talep Yani desert/*/*o ima gerektiği için ortaya desert/*/edit, bu konuda ya desert/*/whatever.
cdmo

Yanıtlar:


18

Bağlam modülünü kullanın . Genellikle bu modülün hayranı değilim, bu kullanışlı olduğu durumlardan biridir.

Yol için bir koşul ekleyin. Bu yüzden, sayfa 1'de bir blok istiyorsanız, ancak sayfa 2 veya 3'te değil, her blok için bir tane gibi yollar yazarım:

Durum 1 - A Blok

çöller / *
~ Çöller / * / *
~ Çöller / * / * / *

Durum 2 - B Blok

~ Çöller / *
çöller / * / *
~ Çöller / * / * / *

Durum 3- Blok C

~ Çöller / *
~ Çöller / * / *
çöller / * / * / *

~ Bu durumda hariç tutmak anlamına gelir. Bundan sonra, bloğun görünmesini istediğiniz bölgeye ekleyin. Aksi halde hariç tutulabilecek belirli yolları da geri ekleyebilirsiniz.


Bu dava için iyi durumda. Ancak bunu tüm olası senaryolar için düzeltmek istiyoruz, yani orijinal çözüm, iyi olmadığı bir durum var. Ben bu davayı yukarıda açıkladım. lütfen nazikçe bakın
Ajmal

Cevabımı güncelledim, umarım bu daha iyi açıklar. Her blok için bir kural koyarsınız.
kyletaylored

4

"Bu PHP kodunun DOĞRU (yalnızca uzman) döndürdüğü sayfalar" görünürlük seçeneğini kullanabilirsiniz. Ama veritabanına PHP kodu koymak, IMHO, kötü bir uygulamadır. Bunun yerine, böyle bir şey kullanmayı düşünün Genişletilmiş blok görünürlüğü modülün veya uygulanması hook_block_list_alter()gibi

function MODULE_block_list_alter(&$blocks) {
  global $theme_key;
  foreach ($blocks as $key => $block) {
    if (!isset($block->theme) || !isset($block->status) || $block->theme != $theme_key || $block->status != 1) {
      // This block was added by a contrib module, leave it in the list.
      continue;
    }
    switch ("{$block->module}_{$block->delta}") {
      case "moduleA_deltaA":
        if (arg(0) != 'deserts' || !arg(1) || arg(2)) {
          unset($blocks[$key]);
        }
        break;
      case "moduleB_deltaB":
        if (arg(0) != 'deserts' || !arg(1) || !arg(2) || arg(3)) {
          unset($blocks[$key]);
        }
        break;
      case "moduleC_deltaC":
        if (arg(0) != 'deserts' || !arg(1) || !arg(2) || !arg(3)) {
          unset($blocks[$key]);
        }
        break;
    }
  }
}

Not: Görünürlük kuralınızı uygulamak için muhtemelen daha akıllı bir yol vardır.


0

Kural bloğu görünürlük modülünü kullanarak bunu çalıştırabilmeniz gerekir . Proje sayfasından bir alıntı:

Kural bloğu görünürlük modülü, Kural bileşenlerinin blok görünürlüğünü kontrol etmek için kullanılmasına izin verir . Bu, Drupal yöneticileri ve geliştiricilerine, Drupal tarafından sağlanan varsayılan görünürlük seçeneklerine ek olarak, web sitelerinde blokların ne zaman görüntülenmesi gerektiğini kontrol etme konusunda aşırı esneklik sağlar.

Genel fikir, bunu Kurallar ile yapabiliyorsanız, blok görünürlüğünü kontrol etmek için kullanabilirsiniz, böylece olasılıklar sınırsızdır:

  • Yalnızca bir aydan daha önce kayıtlı kullanıcılar için bir blok göstermeniz mi gerekiyor?

  • Belki hafta içi sadece sabah 8 ile akşam 5 arasında gösterilmesi gereken bir blok var mı?

  • Mevcut hava koşullarına bağlı olarak bir bloğu görüntülemeye veya gizlemeye ne dersiniz?

Bütün bunlar Kural bloğu görünürlüğü kullanılarak yapılabilir.

Bununla ve yukarıdaki " Kurallar ile yapabiliyorsanız, bunu blok görünürlüğünü kontrol etmek için kullanabilirsiniz " ifadesine göre, Kuralların sayfa1, sayfa2 ve sayfa3'e karşılık gelen çeşitli URL'leri engellemesine yönelik sorunuzu azalttınız.

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.