質問: urlに基づいてテーマを変更するにはどうすればよいですか? drupalインスタンスがexample.orgで実行されています。これにはテーマxがインストールされてアクティブ化されています。今、特別なセクションがあるサイトでイベントが開催される期間が限定されています。そのイベントに関連するすべてのものはexample.org/event2011に行きます。このセクションの下のページが表示されるたびに異なるテーマを表示したい(例 http://example.org/event2011/about 、 http://example.org/event2011/node/12 )。それ、どうやったら出来るの?私は多くのモジュールを試してみましたが、drupal 7.をサポートしているモジュールはありません。できれば、モジュールを使用してそれを行い、コードレベルで自分自身を変更したくない。
回答: または、以下に概説するように、メニューシステムhook_menu_alter()の新しい_theme callback_オプションを使用できます。 p.sチェックアウト 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