Drupal 如何调用特定字段的主题预处理函数?

Drupal 如何调用特定字段的主题预处理函数?,drupal,drupal-7,task-parallel-library,Drupal,Drupal 7,Task Parallel Library,我在Drupal7上,有一个特定的tpl.php文件,用于内容字段\图像:“field--field\ image.tpl.php”。我需要为这个字段和我的主题创建一个预处理函数 假设我的主题名为“我的主题” 应该是这样的 function my_theme_preprocess_field(&$variables, $hook) { $variables['classes_array'][] = 'aClassName'; } 但它不起作用。我错了。但是在哪里呢 谢谢您可以使用(

我在Drupal7上,有一个特定的tpl.php文件,用于内容字段\图像:“field--field\ image.tpl.php”。我需要为这个字段和我的主题创建一个预处理函数

假设我的主题名为“我的主题”

应该是这样的

function my_theme_preprocess_field(&$variables, $hook) {
  $variables['classes_array'][] = 'aClassName';
}
但它不起作用。我错了。但是在哪里呢

谢谢

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

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中,因此在清除缓存之前不会被提取。

在Drupal 7中,您可以通过更改字段的“#标记”值来重写模板_preprocess_node()中字段的输出


您还可以使用regexp更改页面内容中的任何内容:)

您可以在主题的template.php中声明一个
myteme\u preprocess\u字段(&$variables,$hook)
,在这里您可以检查字段并对其标签或标记进行操作,添加类,等等。所以你不需要特定领域的TPL例如

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

希望这对某人有所帮助。

谢谢。清除所有缓存后,我看不到应有的任何更改。我在字段\u图像中找不到任何“aClassName”类。。。问题是打印项目时使用了?调用
drupal\u set\u消息('TEST')并刷新页面几次-如果您没有看到“TEST”消息,则不会调用钩子。如果是这样的话,那么最好禁用主题并重新启用它,看看Drupal是否接上了钩子。出于兴趣,在
template.php
文件中是否还有其他预处理/钩子函数与此函数一起使用?最后!在禁用并重新启用主题之后,我得到了要调用的钩子。非常感谢。顺便说一句,是的,我有很多预处理功能!我花了很长时间让Drupal通过自定义表单识别此函数。这如何改进Clive在您之前发布的答案,并提供更多细节?