Drupal의 특정 페이지에 표시 할 블록을 표시하는 방법은 무엇입니까?


10

모듈 사막을 생각해보십시오.

  • 페이지 1:- deserts/*
  • 2 쪽:- deserts/*/*
  • page3 :- deserts/*/*/*

역동적 인 콘텐츠 ...

세 개의 블록, 즉 a, b 및 c가 있습니다.

  • a 블록은 1 페이지 에만 표시되어야합니다.
  • 블록 b 는 2 페이지에만 표시되어야합니다.
  • a 블록은 3 페이지 에만 표시되어야합니다.

그 제한은 어떻게해야합니까?


드루팔 6 또는 7? 6을 사용하면 블록 가시성을 위해 PHP 코드를 쉽게 정의 할 수 있습니다.
Mołot

drupal7 화염병
Ajmal

2
@Ajmal 주어진 답변에 댓글을 달고 왜 도움이되지 않은지 설명 할 수 있다면 도움이 될 것입니다. 사람들은 자연스럽게 높은 투표 응답이 정답이라고 가정 할 것이며, 그 답변이 왜 효과가 없는지 설명하지 않았다면 대안을 제공하지 않을 것입니다.
Clive

나는 페이지가 desert/*/*/ desert/*/edit내 블록이 모두 표시해야 desert/*/*하지 위해 desert/*/edit 같은 경우는 나를 위해 작동하지 않습니다 ..
아즈

1
어쩌면 그것은 나지만 혼란 스럽습니다. *와일드 카드를 의미합니다. 따라서 블록이 나타나는 솔루션을 요구 desert/*/*한다는 것은 블록이 해당 문제에 대해 나타나야 한다는 것을 의미합니다 . desert/*/editdesert/*/whatever
cdmo

답변:


18

컨텍스트 모듈을 사용하십시오 . 나는 일반적으로이 모듈의 팬이 아니지만, 이것이 유용한 경우 중 하나입니다.

경로 조건을 추가하십시오. 따라서 1 페이지에는 블록을 원하지만 2 또는 3 페이지에는 블록을 원하지 않으면 각 블록마다 하나씩 경로를 작성합니다.

사례 1-블록 A

당연한 응보/*
~ 사막 / * / *
~ 사막 / * / * / *

사례 2-블록 B

~ 사막 / *
당연한 응보/*/*
~ 사막 / * / * / *

사례 3-블록 C

~ 사막 / *
~ 사막 / * / *
당연한 응보/*/*/*

이 경우 ~는 제외됩니다. 그런 다음 표시하려는 영역에 블록을 추가하십시오. 제외 될 수있는 특정 경로를 다시 추가 할 수도 있고 그 반대도 가능합니다.


이 경우에 적합합니다. 그러나 우리는 가능한 모든 시나리오에 대해이 문제를 해결하려고합니다. 원래 솔루션입니다. 잘 유지되지 않는 경우가 있습니다. 위의 경우에 대해 설명했습니다. 친절하게 참조하시기 바랍니다
Ajmal

내 답변을 업데이트 했으므로 더 잘 설명 할 수 있기를 바랍니다. 각 블록마다 하나의 규칙을 만듭니다.
kyletaylored 님이

4

"이 PHP 코드가 TRUE를 반환하는 페이지 (전문가 전용)"가시성 옵션을 사용할 수 있습니다. 그러나 데이터베이스에 PHP 코드를 넣는 것은 나쁜 습관입니다. 대신 확장 블록 가시성 모듈 또는 다음과 hook_block_list_alter()같은 구현을 사용하는 것이 좋습니다.

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

참고 : 가시성 규칙을보다 스마트하게 구현할 수 있습니다.


0

규칙 블록 표시 모듈을 사용하여이 작업을 수행 할 수 있어야합니다 . 프로젝트 페이지의 인용문은 다음과 같습니다.

규칙 블록 가시성 모듈을 사용하면 규칙 구성 요소를 사용하여 블록 가시성을 제어 할 수 있습니다. 이를 통해 Drupal 관리자와 개발자는 Drupal에서 제공하는 기본 가시성 옵션 외에도 웹 사이트에 블록을 표시 할시기를 제어 할 수있는 유연성을 제공합니다.

일반적인 아이디어는 규칙을 사용하여 수행 할 수있는 경우이를 사용하여 블록 가시성을 제어 할 수 있으므로 가능성은 무한합니다.

  • 한 달 이상 전에 등록한 사용자에게만 차단을 표시해야합니까?

  • 평일 오전 8시에서 오후 5시 사이에만 표시되어야하는 블록이 있습니까?

  • 현재 날씨 조건에 따라 블록을 표시하거나 숨기는 방법은 무엇입니까?

이 모든 것은 규칙 블록 가시성을 사용하여 수행 할 수 있습니다.

이를 통해 위의 " 규칙으로 수행 할 수있는 경우이를 사용하여 블록 가시성을 제어 할 수 있습니다 "에 따라 규칙이 page1, page2 및 page3에 해당하는 다양한 URL을 가로채는 문제가 줄어 듭니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.