Drupal 7 Тема переключения и контент-релевантности - PullRequest
0 голосов
/ 23 марта 2012

Я создаю сайт Drupal, который имеет 4 разные темы с различными шаблонами тем.

Мне нужно использовать одну и ту же базу данных Drupal, чтобы контролировать весь контент для всех 4 тем.

Я устанавливаю таксономию для каждой темы, поэтому при создании контента я могу применить его к одной из четырех разных тем.

URL должны выглядеть примерно так:

mysite.com / theme1 / node / 21

и

mysite.com / theme2 / node / 2

Также мне нужно убедиться, что

mysite.com / theme1 должен вызвать файл page-front.tpl.php для этой темы на основе URL

I 'Я пытался использовать themekey, который работает нормально, за исключением того, что я не знаю, как получить только тот контент, для которого применяется термин таксономии для этого сайта.

и я не могу заставить его работать с чем-то вроде этого

mysite.com / theme2 / node / 1

Только для

mysite.com / node / 1 / theme2

Любые идеи или что-либо, что вы можете предоставить, чтобы указать мне правильное направление, будут с благодарностью.

1 Ответ

1 голос
/ 24 марта 2012

Вероятно, есть множество способов сделать это, но я бы так и сделал.

  • Создание представления представления с аргументом, который фильтрует по таксономическому термину, переведенному из имени в tid. Этот вид будет работать как первая страница.
  • Также создайте представление представления, которое принимает два аргумента, проверяя, является ли второй аргумент узлом, помеченным именем термина таксономии первых аргументов. Если это не возврат не найден.
  • Обратите внимание, что мы будем обращаться к этим представлениям только в коде, поэтому не имеет значения, являются ли они страницами или блоками. Убедитесь, что они не названы так же, как темы, если они являются страницами, тогда они переопределят наши пункты меню.

Вы также можете запросить материал, как в node.module, но лично я предпочитаю использовать представления для фильтрации. Если вы не знакомы с аргументами, передаваемыми в views_embed_view () в функции example_menu (), вы можете найти документацию по здесь

В этом фрагменте могут быть опечатки и еще много чего, но сейчас я ничего не вижу. Хороший ресурс: 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';
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...