Drupal 7中的theme_hook_suggestions //无法让我的主题使用我的建议

时间:2012-05-06 17:42:14

标签: drupal drupal-7 drupal-theming

一般说明

我在主题预处理函数中向$variables['theme_hook_suggestions']添加值,但我的主题却没有采纳这个建议。我正在做一个健康的完全缓存清除剂量,所以缓存不是问题。

我希望我的主题能够选择我的建议,但无论我尝试什么,它都无法运作。

以上是我的问题的抽象版本,这个解决方案可能对大多数人有用。下面是我具体设置的详细说明,以及我的问题的更具体说明,以及我尝试过的解决方案" (这不起作用)。

你可以给我的任何帮助都是巨大的,非常感谢。谢谢!

设置

在我的template.php文件中,我有以下代码:

function MYTHEME_preprocess_user_profile(&$variables) {  
  $variables['profile'] = array(
    'top_section' => array(
      '#theme'  => 'profile_section',
      '#type' => 'top_section',
      'profile_section' => /* [several renderable elements] */,
    ),
    'bottom_section' => array(
      '#theme'  => 'profile_section',
      '#type' => 'bottom_section',
      'profile_section' => /* [several renderable elements] */,
    ),
  );
}

因此,实质上,MYTHEME_preprocess_user_profile()函数会创建多个配置文件部分,分配给$variables['profile']

然后我在主题中设置了user-profile.tpl.php模板文件。由于我正在使用Zen子主题,因此该文件将放入我的模板"我的主题目录中的目录。它看起来像这样:

<h1 class="title">user-profile.tpl.php</h1>
<?php foreach(element_children($profile) as $section) {
  print render($profile[$section]);  
}
?>

然后我按如下方式设置MYTHEME_theme()函数:

function MYTHEME_theme($existing, $type, $theme, $path) {
  return array(
    'profile_section' => array(
      'render element' => 'profile_section',
      'template' => 'templates/profile-section',
    ),
  );
}

最后,我在模板目录中设置了profile-section.tpl.php文件,如下所示:

<h2>profile-section.tpl.php</h2>
<p>Theming the profile section <strong><php print $profile_section['#type'] ?></strong> with the <strong>standard</strong> profile section template.</strong></p>

有了这个,我得到了所有想要的行为,以便在大多数情况下我希望主题对我的用户配置文件的各个部分做出反应。也就是说,对于我的每个个人资料部分,我都可以将其设为&#34; profile_section。&#34;

问题

我还希望能够设置模板文件来处理特定配置文件部分的主题,这是基于我放入模板目录的新模板文件。因此,特定于此示例,虽然我希望profile-section.tpl.php处理大多数配置文件部分,但我还希望能够放入profile-section--top-section.tpl.php文件,清除缓存,并让主题使用该文件&#34; top_section&#34;个人资料部分。

我的&#34;解决方案&#34;,它不起作用

我已经读过在相应的主题预处理函数中使用theme_hook_suggestions可以解决我的问题。所以,就我而言,我写了一个MYTHEME_preprocess_profile_section()函数,如下所示:

function MYTHEME_preprocess_profile_section(&$variables) {
  $variables['theme_hook_suggestions'][] = 'profile_section__' . $variables['profile_section']['#type'];
}

然后我写了一个profile-section--top-section.tpl.php文件,如下所示:

<h2>profile-section--top-section.tpl.php</h2>
<p>Theming the profile section <strong><php print $profile_section['#type'] ?></strong> with the <strong>top-sectoin</strong> profile section template.</strong></p>

完成了我的设置。我刷新缓存,但是......

主题仍然为我的top_section profile_section选择profile-section.tpl.php模板,而不是我写的更具体的profile_section__top_section.tpl.php模板。

我需要从这里做些什么,或者我应该做些什么来使这个设置从MYTHEME_preprocess_profile_section()获取我的主题建议?

0 个答案:

没有答案