对主题函数调用感到困惑

时间:2010-04-12 21:20:14

标签: drupal drupal-6

我创建了一个具有CCK文本字段的内容类型。

当我使用 Drupal Themer小部件选择文本字段时,它告诉我最后一个调用的函数是 theme_text_formatter_default(),我在CCK text.module

中找到了

它还告诉我,这是父母;

content-field.tpl.php < theme_markup < theme_markup < node.tpl.php < page.tpl.php

所以我假设content-field.tpl.php中的某个地方是对theme('text_formatter_default',$element)的函数调用,但它不在那里。只有print $item['view']用于显示内容。

我搜索了theme('text_formatter_default',$element)的所有项目文件,但它不存在。我知道它被theme函数调用,因为我在我的template.php中覆盖它并且它使用了我的重写函数,这只有在使用theme_hook $时才会发生。不是吗?

那怎么被称呼?这不是我需要覆盖它。我只是在学习drupal是如何工作的,并且在此之前我一直怀疑它。有些东西必须要叫它。

此外,函数theme_text_formatter_default存在于主题注册表中,并且它是可覆盖的(如果这是一个单词),就像我在template.php中所做的那样显示它。这一切都让人很困惑。

非常感谢任何帮助

2 个答案:

答案 0 :(得分:1)

调用主题函数的是CCK。

创建CCK字段时,选择一个小部件。小部件对应于调用的主题函数。这是简短的解释。

要理解整个机制会有点困难,因为创建一个cck字段是一个缺乏良好文档的复杂主题。

要真正了解什么,如何以及为什么,您需要了解CCK模块如何在内部工作。可能到了可以为它编写补丁的程度。很少有人可以帮助你。

修改
我不深入了解CCK模块,我只创建了自己的字段格式化程序。无论如何,我查看了db并发现表content_node_field_instance包含有关每个CCK字段的信息,其中一列似乎是widget,CCK存储哪些主题函数可以调用。它知道要调用什么函数,因为如果使用的命名约定和hook_field_formatter_info的实现,这是其他模块在他们想要告诉CCK如何主题字段时使用的。

答案 1 :(得分:0)

该功能在text.module中定义。与hook_theme()text_formatter_default theme_text_formatter_default()`的实现返回的条目is匹配的主题函数。

/**
 * Theme function for 'default' text field formatter.
 */
function theme_text_formatter_default($element) {
  return ($allowed =_text_allowed_values($element)) ? $allowed : $element['#item']['safe'];
}