如何为特定字段调用主题预处理功能?

时间:2011-09-28 10:53:08

标签: drupal drupal-7 task-parallel-library

我在Drupal 7上,我有一个内容field_image的非特定tpl.php文件:“field - field_image.tpl.php”。我需要为这个字段和我的主题创建一个预处理函数。

假设我的主题名称是“我的主题”

应该看起来像

function my_theme_preprocess_field(&$variables, $hook) {
  $variables['classes_array'][] = 'aClassName';
}

但它不起作用。我错了。但在哪里?

由于

3 个答案:

答案 0 :(得分:16)

您可以使用template_preprocess_field()(就像您在上面的代码中所做的那样),但只是测试特定字段是否适合您:

function my_theme_preprocess_field(&$variables, $hook) {
  $element = $variables['element'];
  if (isset($element['#field_name'])) {
    if ($element['#field_name'] == 'field_image') {
      $variables['classes_array'][] = 'aClassName';
    }
  }
}

一旦你实现了钩子,不要忘记清除你的缓存,钩子实现会在Drupal 7中缓存,所以在缓存被清除之前不会被拾取。

答案 1 :(得分:4)

您可以在主题的template.php中声明mytheme_preprocess_field(&$variables, $hook),您可以在其中检查字段并对其标签或标记执行操作,添加类,任何内容。所以你不需要特定领域的tpls。 - 例如。

function mytheme_preprocess_field(&$variables, $hook) {
  if ($variables['element']['#field_name'] == 'field_machine_name') {
        $variables['items'][0]['#markup'] = 'add custom markup';
  }
}

希望这有助于某人。

答案 2 :(得分:-3)

在drupal 7中,你可以通过改变字段的“#markup”值来重写template_preprocess_node()中字段的输出。

此外,您可以使用正则表达式在页面内容中更改所需内容:)