Làm cách nào để hiển thị các khối để hiển thị trong trang nhất định trong Drupal?


10

Hãy xem xét một sa mạc mô-đun:

  • trang 1: - deserts/*
  • trang 2:- deserts/*/*
  • trang 3: - deserts/*/*/*

Nội dung động ...

Tôi có ba khối, cụ thể là a, b và c:

  • Chặn a chỉ được hiển thị trong trang1
  • Khối b chỉ được hiển thị trong trang2
  • Chặn a chỉ được hiển thị trong trang3

Làm thế nào để hạn chế đó?


Drupal 6 hay 7? 6 làm cho nó dễ dàng hơn để xác định mã PHP cho khả năng hiển thị khối.
Mołot

Đó là drupal7 molot
Ajmal

2
@Ajmal Sẽ rất hữu ích nếu bạn có thể nhận xét về các câu trả lời đã cho và giải thích lý do tại sao họ không giúp đỡ. Mọi người sẽ (tự nhiên) cho rằng câu trả lời được bình chọn cao là câu trả lời đúng và không tiếp tục đưa ra giải pháp thay thế, nếu bạn không giải thích được tại sao câu trả lời đó không phù hợp với bạn.
Clive

Tôi có trang desert/*/*/ desert/*/editmà khối của tôi sẽ hiển thị cho tất cả desert/*/*không phải trong desert/*/edit trường hợp như vậy, nó không hoạt động với tôi ..
Ajmal

1
Có lẽ đó chỉ là tôi, nhưng điều này có vẻ khó hiểu. *có nghĩa là ký tự đại diện. Vì vậy, yêu cầu một giải pháp trong đó khối xuất hiện cho desert/*/*ngụ ý rằng nó sẽ hiển thị cho desert/*/edithoặc, cho vấn đề đó , desert/*/whatever.
cdmo

Câu trả lời:


18

Sử dụng mô-đun bối cảnh . Mặc dù tôi thường không phải là một fan hâm mộ của mô-đun này, đây là một trong những trường hợp có ích.

Thêm một điều kiện cho một đường dẫn. Vì vậy, nếu tôi muốn một khối ở trang 1, nhưng không phải trang 2 hoặc 3, tôi sẽ viết các đường dẫn như vậy, mỗi đường dẫn cho mỗi khối:

Trường hợp 1 - Khối A

sa mạc / *
~ sa mạc / * / *
~ sa mạc / * / * / *

Trường hợp 2 - Khối B

~ sa mạc / *
sa mạc / * / *
~ sa mạc / * / * / *

Trường hợp 3- Khối C

~ sa mạc / *
~ sa mạc / * / *
sa mạc / * / * / *

~ Có nghĩa là loại trừ trong trường hợp này. Sau đó, thêm khối vào khu vực bạn muốn cho nó hiển thị. Bạn cũng có thể thêm lại vào các đường dẫn cụ thể có thể bị loại trừ và ngược lại.


Nó giữ tốt cho trường hợp này. Nhưng chúng tôi muốn khắc phục điều này cho tất cả các tình huống có thể xảy ra, đó là giải pháp ban đầu, có một trường hợp không ổn. tôi đã giải thích trường hợp trên. vì vậy xin vui lòng giới thiệu rằng
Ajmal

Tôi đã cập nhật câu trả lời của mình, vì vậy hy vọng điều này sẽ giải thích nó tốt hơn. Bạn sẽ thực hiện một quy tắc cho mỗi khối.
kyletaylored

4

Bạn có thể sử dụng tùy chọn hiển thị "Trang mà mã PHP này trả về tùy chọn hiển thị TRUE (chỉ dành cho chuyên gia)". Nhưng việc đưa mã PHP vào cơ sở dữ liệu là IMHO, một cách làm không tốt. Thay vào đó, hãy cân nhắc sử dụng một cái gì đó như mô-đun hiển thị khối Mở rộng hoặc triển khai hook_block_list_alter()như

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

Lưu ý: Có lẽ có một cách thông minh hơn để thực hiện quy tắc hiển thị của bạn.


0

Bạn sẽ có thể làm cho điều này hoạt động bằng cách sử dụng mô-đun hiển thị khối Quy tắc . Đây là một trích dẫn từ trang dự án của nó:

Mô-đun hiển thị khối Quy tắc cho phép các thành phần Quy tắc được sử dụng để kiểm soát mức độ hiển thị của khối. Điều này cung cấp cho các quản trị viên và nhà phát triển Drupal tính linh hoạt cao trong việc kiểm soát khi các khối nên được hiển thị trên trang web của họ, ngoài các tùy chọn hiển thị mặc định do Drupal cung cấp.

Ý tưởng chung là nếu bạn có thể làm điều đó với Quy tắc, bạn có thể sử dụng nó để kiểm soát mức độ hiển thị của khối, vì vậy khả năng là vô hạn:

  • Cần hiển thị một khối chỉ cho người dùng đã đăng ký hơn một tháng trước?

  • Có lẽ bạn có một khối chỉ được hiển thị trong khoảng từ 8 giờ sáng đến 5 giờ chiều vào các ngày trong tuần?

  • Còn việc hiển thị hoặc ẩn một khối dựa trên điều kiện thời tiết hiện tại thì sao?

Tất cả điều này có thể được thực hiện bằng cách sử dụng khả năng hiển thị khối Quy tắc.

Với điều đó, và theo " nếu bạn có thể làm điều đó với Quy tắc, bạn có thể sử dụng nó để kiểm soát mức độ hiển thị của khối " ở trên, bạn đã giảm câu hỏi của mình để làm cho Quy tắc chặn các URL khác nhau tương ứng với trang1, trang2 và trang3.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.