it-swarm-ko.tech

URL을 기준으로 테마를 변경하려면 어떻게합니까?

테마 X가 설치되어 활성화 된 example.org에서 Drupal 인스턴스를 실행 중입니다. 이제 제한된 기간 동안 특별 섹션이있는 사이트에서 이벤트가 개최됩니다 해당 이벤트와 관련된 모든 것은 example.org/event2011로 이동합니다.

이 섹션 아래의 페이지를 볼 때마다 다른 테마를 표시하고 싶습니다 (예 : http://example.org/event2011/about , http://example.org/event2011/node/12 ). 어떻게합니까?

많은 모듈을 겪었지만 모듈 중 어느 것도 Drupal 7. 지원하지 않습니다. 모듈을 사용하여 수행하고 싶습니다. 코드 레벨에서 내 자신을 변경하고 싶지 않습니다. .

38
Samyak Bhuta

변경이 제한된 기간 동안 이루어지고 그러한 코드를 구현하는 것이 어렵지 않다는 것을 고려하여 특정 페이지에 사용되는 테마를 변경하는 사용자 정의 모듈을 구현하는 것이 좋습니다.

다음과 같이 hook_custom_theme() 을 구현하면 충분합니다.

function mymodule_custom_theme() {
  if (arg(0) == 'event2011') {
    return 'the theme to use for that page';
  }
}

http://example.com/event2011 에 대해서만 테마를 변경해야하지만 http://example.com/event2011/node/12 에 대해서는 테마를 변경하지 않는 경우 코드를 다음으로 변경해야합니다.

function mymodule_custom_theme() {
  if (arg(0) == 'event2011' && !arg(1)) {
    return 'the theme to use for that page';
  }
}

메뉴 콜백 정의에서 테마 콜백을 사용하는 경우 설명서 는 다음과 같이 말합니다.

일반적으로 테마 콜백 함수의 사용은 기능이 특정 테마와 밀접한 관련이있는 페이지로 제한되어야합니다. hook_menu_alter()에서 해당 페이지를 특별히 대상으로하는 모듈에 의해서만 재정의 될 수 있기 때문입니다. 보다 일반적인 테마 전환 기능을 구현하는 모듈 (예 : 현재 사용자 역할에 따라 테마를 동적으로 설정할 수있는 모듈)은 hook_custom_theme()을 대신 사용해야합니다.

33
kiamlaluno

다른 의견과 같이 맞춤형 솔루션이 가장 좋을 수도 있지만 실제로 모듈을 사용하려는 경우 가장 좋은 방법은 ThemeKey 입니다. 5/23/11 기준으로 안정된 릴리스가 있습니다.

22
tim.plunkett

또는 아래에 설명 된대로 메뉴 시스템 hook_menu_alter()의 새로운 theme callback 옵션을 사용할 수 있습니다. p.s Checkout hook_menu ()theme callback에 대한 자세한 내용

<?php
/**
* Implements hook_menu_alter().
*/
function mymodule_menu_alter(&$items) {
  // Set the theme callback function for all node pages. As per the
  // standard behavior for hook_menu() properties, this will be
  // inherited by all paths underneath node/%node as well, unless
  // they define their own theme callback.
  $items['node/%node']['theme callback'] = 'mymodule_default_node_theme';

  // Set a different theme callback for node edit pages, and pass
  // along the node object to this function so we can make decisions
  // based on it.
  $items['node/%node/edit']['theme callback'] = 'mymodule_edit_node_theme';
  $items['node/%node/edit']['theme arguments'] = array(1);
}
/**
* Defaults to using the 'some_theme' theme for node pages.
*/
function mymodule_default_node_theme() {
  return 'some_theme';
}

/**
* For editing page nodes, uses the 'some_other_theme' theme.
*/
function mymodule_edit_node_theme($node) {
  return $node->type == 'page' ? 'some_other_theme' : mymodule_default_node_theme();
}
?>

또한 더 전통적인 hook_custom_theme()을 사용하는 예도 있습니다

<?php 
/**
* Implements hook_custom_theme().
*/
function mymodule_custom_theme() {
  // check path using arg(0)
  // check $user
  // do whatever special checking you want and simply return theme key (name of theme folder most of the time)
    return 'special_theme';
  }
}
?>

에서 가져옴 : http://drupal.org/node/224333#custom_theme

8
electblake

ThemeKey를 사용하는 것은 간단하며 테마 전환을 위해 가장 인기 있고 강력한 모듈입니다 (8.x 지원). 현재 경로, 분류 용어, 언어, 노드 유형 및 기타 여러 가지 속성에 따라 테마를 자동으로 선택할 수있는 규칙. 또한 다른 모듈에 의해 노출되는 추가 속성을 지원하도록 쉽게 확장 할 수 있습니다. 표준 기능 외에도 ThemeKey는 많은 contrib 모듈의 기능을 자동으로 확장하고 확장하는 모듈을 가지고 있습니다.

사용법 (7.x)

모듈을 활성화 한 후 admin/config/user-interface/themekey로 이동하십시오. 테마를 전환하는 데는 여러 가지 옵션이 있지만 path:node_alias에 관심이 있으실 것이므로/my_url과 같이 원하는대로 값을 설정 한 다음이 URL에서 활성화하려는 테마를 선택하십시오. web/* 또는 /^web/.*와 같은 와일드 카드를 사용할 수도 있습니다.

확인 : 경로에 테마를로드하는 방법

고급 사용법

ThemeKey 7.x에는 개발자에게 ThemeKey를 확장하는 방법을 보여주는 ThemeKey Example이라는 선택적 모듈이 포함되어 있습니다.

도움말 (7.x)

Mustardseed의 비디오 자습서 (7.x)를 확인하십시오.

이 주제에 대한 추가 도움말은 /admin/help/themekey에서 찾을 수 있습니다.

themekey 와 관련된 다른 SE 질문도 확인하십시오.


또는 Switchtheme (7.x)도있어 사용자가 활성화 된 테마를 전환 할 수 있도록 블록을 추가합니다.

6
kenorb

단순히 Context 을 사용하고 경로가/event2011/일 때 테마를 사용하여 적용 할 수 있습니다. cotext 상태에서 경로를 간단하게 설정하고 내용 작업에서 테마를 변경할 수 있습니다. URL을 기반으로 사이트의 테마를 매우 쉽게 전환 할 수있었습니다. 휴대폰에서도 작동합니다.)

6
Amitav Roy

RL 별칭 또는 Pathauto 모듈 을 사용하는 경우 현재 Drupal 경로의 구성 요소를 사용할 때의 미묘함과 차이점에 유의하십시오.

arg () 를 사용하고 싶지 않은 상황이 있습니다. 실제로 Drupal API 설명서는 결과 코드를 읽기가 어렵 기 때문에 가능한 경우이 함수를 사용하지 않는 것이 좋습니다.

kiamlaluno 에서 제안한대로 다음 예제를 고려하십시오.

function mymodule_custom_theme() {
  if (arg(0) == 'event2011') {
    return 'custom_theme_machine_name';
  }
}

Drupal 7에서 노드의 별칭이 event2011 인 경우 arg(0)을 사용하면 node을 첫 번째로 반환합니다. 별명과 달리 URL 구성 요소.

print_r(arg(0));

Array
(
    [0] => node
    [1] => 150
)

대신 별명으로 작업해야하는 경우 Drupal에서 현재 URL을 가져 오는 여러 가지 방법 이 있으며 menu_get_object(), current_path(), request_path() 다른 사람.

테마를 전환하기위한 트리거로 별칭을 사용하는 재 작업 된 예제는 다음과 같습니다.

function mymodule_custom_theme() {
  $current_page_path = explode('/', request_path());      

  if ($current_page_path[0] == 'event2011') {
    return 'custom_theme_machine_name';
  }
}
5
rjb

사용자 역할에 따라 테마를 전환하는 방법 :

사용자 정의 모듈을 만들고 다음을 복사하여 붙여 넣습니다.

<?php
/**
 * Implementation of hook_init().
 */
function mymodule_init() {
  global $custom_theme, $user;
  if (in_array('my special role', $user->roles)) {
    $custom_theme = 'mytheme';
  }
}
?>

다음을 교체해야합니다.

mymodule => 모듈 이름

내 특수 역할 => 사용자가 다른 테마를 볼 수 있도록해야 할 역할 이름이 있습니다.

전환하려는 테마의 이름이있는 mytheme =>

3
drupalfever

Page Theme 모듈을 사용하여 정확하게 달성 할 수 있습니다

페이지 테마 모듈은 사용하기 간단하고 쉬운 모듈로 특정 페이지에서 사이트 기본값과 다른 테마를 사용할 수 있습니다.

풍모

  • 단일 페이지 또는 페이지 목록에 테마를 지정하십시오. (페이지를 Drupal 경로)로 설정하십시오.)
  • Drupal 경로에서 '*'문자를 와일드 카드로 사용하도록 허용하십시오.
  • 테마를 정렬 할 수 있습니다. (페이지가 여러 개 정의 된 경우 목록의 첫 번째 테마가 사용됩니다)
  • 테마를 활성화/비활성화 할 수 있습니다.
  • Drupal 초보자에게 친숙합니다.
1
IT Pro Manager

Page Theme 모듈 을 사용하여 정확하게 달성 할 수 있습니다. Page Theme 모듈은 사용하기 간단하고 쉬운 모듈로 다른 테마를 사용할 수 있습니다. 특정 페이지의 사이트 기본값.

특징 :

단일 페이지 또는 페이지 목록에 테마를 지정하십시오. (페이지를 Drupal path)로 설정하십시오) Drupal paths에서 '*'문자를 와일드 카드로 사용할 수 있습니다. 테마를 정렬 할 수 있습니다. 여러 개의 정의 된 목록의 첫 번째 테마가 사용됩니다.) 테마를 활성화/비활성화합니다 Drupal 초보자 친화적).

사용할 수있는대로 : 페이지 테마와 대부분 동일한 기능을 가지고 있지만 테마를 선택하기 위해 역할 기반 선택 및 "php 스 니펫"영역을 추가하는 섹션.

그러나 컨텐츠 작성, 편집 및 페이지보기에서 사이트 기본값과 다른 테마를 사용하려는 경우 다른 테마를 사용할 수있는 콘텐츠 테마 를 사용할 수 있습니다. 콘텐츠 작성, 편집 및보기 페이지에서 사이트 기본값보다.

0
onlink