(Drupal 6) $ theme_key не возвращает значение - PullRequest
0 голосов
/ 06 сентября 2011

Я пытаюсь настроить узел Drupal 6 для динамической загрузки блоков в зависимости от выбранной темы.Я подумал, что мог бы использовать $ theme_key, чтобы определить название темы, и работать оттуда.Странно то, что если у меня есть несколько проверок на странице, первая из них возвратит пустое значение для $ theme_key, но последующие проверки будут работать как положено.

Например:

<?php
print "Theme: ". $theme_key;
if($theme_key =="foo"){
 $viewName = 'theView';
 $display_id = 'block_1';
 print views_embed_view($viewName, $display_id);
}
else {
 $viewName = 'theOtherView';
 $display_id = 'block_1';
 print views_embed_view($viewName, $display_id);
}
?>

Если в узле несколько раз было указано выше с активной темой "foo" (для целей тестирования) - первый раз вернётся пустое значение для $ theme_key и отобразит theOtherView, но во второй раз будет отображаться тема: fooи отобразит вид.Все последующие вызовы $ theme_key также будут правильными.

Любые вызовы $ theme_key до первого блока будут возвращать пустые значения.

Я объявляю

<?php global $theme_key; ?> 

в начале содержимого узла.(До всех условных блоков ...)

Что я делаю не так?Есть ли лучший способ проверить текущую тему?

1 Ответ

0 голосов
/ 06 сентября 2011

Просто взглянув на функцию init_theme () , глобальные переменные $theme и $theme_key содержат абсолютно одинаковые значения, поэтому вы можете попробовать использовать $theme (как предложил yvan), но, поскольку они содержатодни и те же данные и установлены ли глобальные переменные в одной и той же функции, я не уверен, что это будет иметь какое-либо значение.

Этот код находится в файле шаблона?Если это так, вы можете страдать от давней проблемы с темой Drupal, из-за которой некоторые переменные недоступны при сборке шаблона.Вы можете попробовать добавить функцию hook_preprocess_node() в модуль / тему, чтобы настроить переменную и передать ее в файл шаблона.Примерно так:

function MYMODULE_preprocess_node(&$vars) {
  global $theme_key;
  $vars['current_theme_key'] = $theme_key;
}

И тогда в вашем файле шаблона вы получите доступ к переменной $current_theme_key, в которой должна быть указана правильная переменная.

Надеюсь, что это поможетЯ сталкивался с подобными проблемами с Drupal и раньше, и это кошмар для отладки.

Редактировать, чтобы добавить более полезную функцию:

function MYMODULE_preprocess_node(&$vars) {
  $node = $vars['node'];

  if ($node->type == 'my_type') {
    global $theme_key;

    $view_name = $theme_key == 'foo' ? 'theView' : 'theOtherView';
    $display_id = 'block_1';

    $vars['my_custom_view'] = views_embed_view($view_name, $display_id);
  }
}

Затем в вашем файле node.tpl.php или node-type.tpl.php вы можете использовать такой код:

if (isset($my_custom_view)): 
  echo $my_custom_view; 
endif;

При построении переменных в функции предварительной обработки у вас не должно возникнуть проблем сglobal $theme_key больше не доступен.

Имейте в виду, что вы можете также реализовать это в своей теме (в файле template.php), изменив имя функции на MYTHEME_preprocess_node.

Убедитесь, что вы очистили кеш Drupal после того, как внедрили функцию (где бы вы ни решили ее разместить), чтобы система восприняла изменения.

Надеюсь, это поможет!

...