it-swarm-eu.dev

Jak změním motiv na základě adresy URL?

Mám instanci Drupal instanci spuštěnou na example.org., Která má nainstalované a aktivované téma X. Nyní se na omezenou dobu má na místě konat událost, pro kterou má speciální sekce byly „vyřezány“. Všechny věci související s touto událostí půjdou na adresu example.org/event2011.

Chci, aby se při každém zobrazení stránky v této sekci zobrazilo jiné téma (např. http://example.org/event2011/about , http://example.org)/event2011/uzel/12 ). Jak to udělám?

Prošel jsem mnoha moduly, ale žádný z nich nepodporuje Drupal 7.) Nejraději bych chtěl, aby se to provádělo pomocí modulů a nechtěl bych nic změnit na své vlastní úrovni na úrovni kódu .

38
Samyak Bhuta

Vzhledem k tomu, že změna je na omezenou dobu a že implementace takového kódu není obtížná, navrhl bych implementovat vlastní modul, který mění téma používané pro konkrétní stránky.

Stačí implementovat hook_custom_theme() takto:

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

Pokud byste potřebovali změnit motiv pouze pro http://example.com/event2011 , ale ne pro http://example.com/event2011/node/12 , pak by měl být kód změněn na

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

Pokud jde o použití zpětného volání motivu v definici zpětného volání nabídky, dokumentace říká:

Obecně platí, že použití funkcí zpětného volání témat by mělo být omezeno na stránky, jejichž funkčnost je velmi úzce spjata s konkrétním tématem, protože je lze přepsat pouze moduly, které konkrétně cílí na tyto stránky v hook_menu_alter(). Moduly implementující obecnější funkce přepínání motivů (například modul, který umožňuje dynamické nastavení motivu na základě role aktuálního uživatele), by místo toho měly použít hook_custom_theme().

33
kiamlaluno

Vlastní řešení, jako navrhuje další komentář, je pravděpodobně nejlepší, ale pokud opravdu chcete použít modul, vaše nejlepší sázka je ThemeKey . Od 5. května 2011 má stabilní verzi.

22
tim.plunkett

Alternativně můžete použít novou možnost theme callback V systému menu hook_menu_alter(), jak je uvedeno níže. p.s Pokladna hook_menu () pro více informací o 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();
}
?>

Kromě toho existuje také příklad použití tradičnějšího 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';
  }
}
?>

Převzato z: http://drupal.org/node/224333#custom_theme

8
electblake

Použití ThemeKey je jednoduché a je to zatím nejpopulárnější a nejvýkonnější modul (s podporou 8.x) pro přepínání motivů pravidla, která umožňují automatický výběr tématu v závislosti na aktuální cestě, pojmech taxonomie, jazyce, typu uzlu a mnoha dalších vlastnostech. Lze jej také snadno rozšířit, aby podporoval další vlastnosti vystavené jinými moduly. Kromě standardních funkcí ThemeKey automaticky rozšiřuje i funkce mnoha přispívajících modulů a rozšiřuje jej moduly.

Použití (7.x)

Po aktivaci modulu přejděte na admin/config/user-interface/themekey. Existuje mnoho možností přepínání tématu, ale pravděpodobně by vás zajímalo path:node_alias, proto nastavte hodnotu podle svého přání/my_url a poté vyberte téma, které chcete na této adrese URL povolit. Můžete také použít zástupné znaky, například web/* nebo /^web/.*.

Zkontrolujte: Jak načíst motiv pro cest

Pokročilé použití

ThemeKey 7.x obsahuje volitelný modul s názvem ThemeKey Example, který demonstruje vývojářům, jak rozšířit ThemeKey.

Nápověda (7.x)

Podívejte se video tutoriál od Mustardseed (7.x).

Další nápovědu k tomuto tématu naleznete na adrese /admin/help/themekey.

Zkontrolujte také další otázky týkající se SE související s themekey .


Alternativně existuje také Switchtheme (7.x), který přidává blok, který umožňuje uživatelům přepínat mezi povolenými tématy.

6
kenorb

Můžete jednoduše použít Context a použít téma, aby se aplikovalo, když je cesta/event2011 /, můžete jednoduše nastavit cestu do stavu cotext a změnit téma v akci obsahu. To bylo, že můžete velmi snadno přepínat mezi tématy na webu na základě adresy URL. Dokonce funguje i pro mobily;)

6
Amitav Roy

Pokud používáte aliasy URL nebo modul Pathauto , uvědomte si jemnost a rozdíly při použití komponent aktuální Drupal cesta).

Existují situace, kdy nebudete chtít použít arg () . Dokumentace API Drupal API) ve skutečnosti navrhuje vyhnout se použití této funkce tam, kde je to možné, protože výsledný kód je obtížně čitelný.

Zvažte následující příklad, jak navrhuje kiamlaluno :

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

V Drupal 7, pokud má uzel alias event2011, pomocí arg(0) vrátí node jako první Komponenta URL, na rozdíl od aliasu.

print_r(arg(0));

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

Místo toho, pokud potřebujete pracovat s aliasem, existuje několik způsobů, jak získat aktuální URL v Drupal , včetně menu_get_object(), current_path(), request_path() a další.

Zde je přepracovaný příklad, který používá alias jako spouštěč pro přepínání tématu:

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

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

Jak přepnout téma v závislosti na roli uživatele:

Vytvořte vlastní modul a zkopírujte a vložte následující:

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

Musíte nahradit:

mymodule => s názvem vašeho modulu

my special role => s názvem role, kterou vaši uživatelé budou muset mít, aby mohli vidět jiné téma.

mytheme => s názvem motivu, na který chcete přepnout

3
drupalfever

K dosažení tohoto cíle byste mohli použít modul Téma stránky

Modul Téma stránky je jednoduchý a snadno použitelný modul, který umožňuje používat na určitých stránkách jiná témata, než je výchozí web.

Funkce

  • Přiřaďte téma jedné stránce nebo seznamu stránek. (Nastavit stránku jako cestu Drupal cesta)
  • Povolit použití znaku „*“ jako zástupného znaku v Drupal paths).
  • Nechte uspořádat témata. (Jsou-li stránky definovány více, použije se první motiv v seznamu)
  • Povolit/zakázat téma.
  • Drupal nováček přátelský.
1
IT Pro Manager

K dosažení tohoto cíle byste mohli použít modul Téma stránky : Modul Téma stránky je jednoduchý a snadný modul, který umožňuje používat jiná témata, než je výchozí stránka na konkrétních stránkách.

Funkce :

Přiřaďte téma jedné stránce nebo seznamu stránek. (Nastavit stránku jako Drupal cesta) Povolit použití znaku '*' jako zástupného znaku v Drupal cest. Povolit uspořádání motivů. (Pokud jsou stránky několik definovaných, bude použit první motiv v seznamu) Povolit povolit/zakázat téma. Drupal nováček přátelský).

jak budete moci použít: Sekce, které mají většinu stejných funkcí jako Téma stránky, ale přidávají výběr založený na rolích a oblast „php snippet“, aby vybraly motiv.

ale pokud chcete při vytváření, úpravách a prohlížení stránek použít jiná témata, než je výchozí, můžete použít Téma obsah , které umožňuje při vytváření, úpravách a úpravách obsahu používat jiná témata než výchozí web prohlížení stránek.

0
onlink