Bagaimana cara menampilkan blok untuk ditampilkan di halaman tertentu di Drupal?

10

Pertimbangkan gurun modul:

  • Halaman 1:- deserts/*
  • halaman 2:- deserts/*/*
  • halaman3: - deserts/*/*/*

Konten dinamis ...

Saya memiliki tiga blok, yaitu a, b dan c:

  • Blok a harus ditampilkan hanya di halaman1
  • Blok b harus ditampilkan hanya di halaman2
  • Blok a harus ditampilkan hanya di halaman3

Bagaimana seharusnya pembatasan itu dilakukan?

Ajmal
sumber
Drupal 6 atau 7? 6 membuatnya lebih mudah untuk mendefinisikan kode PHP untuk visibilitas blok.
Mołot
Itu drupal7 molot
Ajmal
2
@Ajmal Akan bermanfaat jika Anda bisa mengomentari jawaban yang diberikan dan menjelaskan mengapa mereka tidak membantu. Orang-orang akan (secara alami) menganggap bahwa jawaban dengan suara tinggi adalah yang benar, dan tidak melanjutkan untuk memberikan alternatif, jika Anda belum menjelaskan mengapa jawaban itu tidak bekerja untuk Anda.
Clive
Saya memiliki halaman yang desert/*/*/ desert/*/editharus ditampilkan oleh blok saya untuk semua yang desert/*/*tidak untuk. desert/*/edit Dalam kasus seperti itu tidak berfungsi untuk saya ..
Ajmal
1
Mungkin hanya saya, tetapi ini tampaknya membingungkan. *berarti wildcard. Jadi meminta solusi di mana blok muncul untuk desert/*/*menyiratkan bahwa itu harus muncul desert/*/editatau, dalam hal ini desert/*/whatever,.
cdmo

Jawaban:

18

Gunakan modul konteks . Meskipun saya biasanya bukan penggemar modul ini, ini adalah salah satu kasus yang berguna.

Tambahkan kondisi untuk jalur. Jadi jika saya ingin blok pada halaman 1, tetapi bukan halaman 2 atau 3, saya akan menulis path seperti itu, satu untuk setiap blok:

Kasus 1 - Blok A

gurun / *
~ gurun / * / *
~ gurun / * / * / *

Kasus 2 - Blok B

~ gurun / *
gurun / * / *
~ gurun / * / * / *

Kasus 3- Blok C

~ gurun / *
~ gurun / * / *
gurun / * / * / *

~ Berarti untuk mengecualikan dalam kasus ini. Setelah itu, tambahkan blok ke wilayah yang Anda inginkan untuk muncul. Anda juga dapat menambahkan kembali di jalur tertentu yang mungkin dikecualikan, dan sebaliknya.

Kyletaylored
sumber
Ini berlaku untuk kasus ini. Tapi kami ingin memperbaiki ini untuk semua skenario yang mungkin, yaitu solusi asli, ada kasus di mana itu tidak berlaku. Saya sudah menjelaskan kasus itu di atas. jadi mohon merujuknya
Ajmal
Saya memperbarui jawaban saya, jadi mudah-mudahan ini akan menjelaskannya dengan lebih baik. Anda akan membuat satu aturan untuk setiap blok.
kyletaylored
4

Anda dapat menggunakan opsi visibilitas "Halaman tempat kode PHP ini mengembalikan BENAR (khusus pakar)". Tetapi memasukkan kode PHP ke dalam basis data, IMHO, adalah praktik yang buruk. Sebagai gantinya, pertimbangkan untuk menggunakan sesuatu seperti modul visibilitas blok Extended atau implementasi hook_block_list_alter()seperti

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;
    }
  }
}

Catatan: Mungkin ada cara yang lebih cerdas untuk menerapkan aturan visibilitas Anda.

Pierre Buyle
sumber
0

Anda harus dapat membuatnya berfungsi menggunakan modul visibilitas blok Aturan . Berikut ini kutipan dari halaman proyeknya:

Modul visibilitas blok Aturan memungkinkan komponen Aturan yang akan digunakan untuk mengontrol visibilitas blok. Ini memberikan administrator dan pengembang Drupal fleksibilitas ekstrim dalam mengontrol kapan blok harus ditampilkan di situs web mereka, di samping opsi visibilitas default yang disediakan oleh Drupal.

Gagasan umum adalah bahwa jika Anda dapat melakukannya dengan Aturan, Anda dapat menggunakannya untuk mengontrol visibilitas blok, sehingga kemungkinan tidak terbatas:

  • Perlu menunjukkan blok hanya untuk pengguna yang terdaftar lebih dari sebulan yang lalu?

  • Mungkin Anda memiliki blok yang harus ditampilkan hanya antara jam 8 pagi - 5 sore pada hari kerja?

  • Bagaimana dengan menampilkan atau menyembunyikan blok berdasarkan kondisi cuaca saat ini?

Semua ini dapat dilakukan dengan menggunakan visibilitas blok Aturan.

Dengan itu, dan sesuai " jika Anda dapat melakukannya dengan Aturan, Anda dapat menggunakannya untuk mengontrol visibilitas blok " di atas, Anda telah mengurangi pertanyaan Anda untuk membuat Aturan mencegat berbagai URL yang sesuai dengan halaman Anda1, halaman2 dan halaman3.

Pierre
sumber