Drupal 7主题切换和内容相关性

时间:2012-03-23 17:28:06

标签: drupal themes

我正在构建一个Drupal站点,它有4个不同的主题和不同的主题模板。

我需要使用相同的Drupal数据库来控制所有4个主题的所有内容。

我为每个主题设置了分类,因此当我创建内容时,我可以将其应用于四个不同主题中的一个。

网址需要看起来像

mysite.com/theme1/node/21

并且

mysite.com/theme2/node/2

另外我需要确保

mysite.com/theme1需要根据网址调出该主题的page-front.tpl.php

我尝试过使用的themekey,但我不知道如何只提取具有该网站应用的分类术语的内容。

我不能让它与这样的东西一起工作

mysite.com/theme2/node/1

仅适用于

mysite.com/node/1/theme2

任何想法,或任何你可以提供给我指出正确方向的东西都将不胜感激。

1 个答案:

答案 0 :(得分:1)

可能有很多方法可以做到这一点,但我就是这样做的。

  • 创建一个视图显示,其中的参数按照从名称转换为tid的taxnonomy术语进行过滤。该视图将作为首页。
  • 还创建一个视图显示,它带有两个参数,检查第二个参数是否是用第一个参数分类术语名称标记的节点。如果没有找不回来。
  • 请注意,我们只会在代码中访问这些视图,因此无论它们是页面还是块都无关紧要。如果它们是页面,请确保不要将它们命名为主题,然后它们将覆盖我们的菜单条目。

您也可以像在node.module中一样查询内容,但我个人更喜欢使用视图进行过滤。如果你不熟悉在example_menu()函数中传递给views_embed_view()的参数,你可以找到它的documentation here

在这个片段中可能存在拼写错误,但我现在看不到任何内容。 一个很好的资源:http://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7

/**
 * Implements hook_menu().
 *
 * Here we define the new frontpages as well as a node view page for all them custom themes.
 */
function example_menu() {
  $items = array();
  foreach (example_custom_themes() as $theme) {
    // Define the front page
    $items[$theme] = array(
      'page callback' => 'views_embed_view',
      'page arguments' => array('VIEW', 'DISPLAY', $theme), // The front page view
      'access arguments' => array('access content'),
      'type' => MENU_CALLBACK,
      'theme callback' => 'example_theme_callback',
      'theme arguments' => array($theme),
    );
    // Define the node views
    $items[$theme . '/node/%node'] = array(
      'title callback' => 'node_page_title', 
      'title arguments' => array(1),
      'page callback' => 'views_embed_view',
      'page arguments' => array('VIEW', 'DISPLAY', $theme, 1), // The node view display
      'access callback' => 'node_access', 
      'access arguments' => array('view', 1),
      'theme callback' => 'example_theme_callback',
      'theme arguments' => array($theme),
    );
  }
  return $items;
}

/**
 * Returns an array of the machine named custom themes.
 */
function example_custom_themes() {
  return array('theme1', 'theme2');
}

/**
 * Does nothing but return the theme name
 */
function example_theme_callback($theme) {
  return $theme;
}

/**
 * Check if the url matches the front page of a theme. If so, suggest front template.
 */
function example_preprocess_page(&$variables) {
  if (in_array(arg(0), example_custom_themes()) && is_null(arg(1))) {
    $variables['theme_hook_suggestions'] = 'page__front';
  }
}