我创建了一个具有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中所做的那样显示它。这一切都让人很困惑。
非常感谢任何帮助
答案 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'];
}