2010-04-12 67 views
1

我創建了一個具有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中這樣做並顯示它。這一切都很混亂。

任何幫助將不勝感激

回答

1

這是CCK調用主題功能。

當你創建一個CCK字段時,你選擇一個小部件。小部件對應於被調用的主題函數。這是簡短的解釋。

要理解整個機制將會有點困難,因爲創建一個cck字段是一個缺乏良好文檔的複雜主題。

爲了真正理解CCK模塊如何在內部工作,需要了解什麼,如何以及爲什麼。可能到您可以爲其編寫補丁的地步。很少有人可以幫助你。

編輯:
我不知道深入CCK模塊,我只創建了自己的領域格式化。無論如何,我看了雖然分貝,發現表content_node_field_instance持有有關每個CCK字段的信息,其中一列是widget它看起來,是CCK存儲哪些主題函數來調用。它知道要調用哪個函數,因爲如果命名約定被使用並且通過實現hook_field_formatter_info,這是其他模塊在他們想告訴CCK關於如何主題字段時使用的。

+0

嗨Googletorp。我對Drupal的印象很少,你不知道,因爲你已經回答了我幾乎所有的Drupal問題。 我明白你說了什麼,我沒有太多好的文檔,但如果可以的話,我只想再問一個問題(這張貼在下面)。 – screenm0nkey 2010-04-13 09:13:45

+0

我仍然不確定爲什麼找不到調用函數。使用Eclipse我在Drupal項目(包括模塊)中搜索了字符串「text_formatter_default」中的每個文件,但它只返回了text.module中的兩個地方,它們是在theme_hook和實現中註冊的。沒有任何調用函數?那是因爲'text_formatter_default'的函數名是在被調用之前在CCK模塊的某處動態創建的,所以它不會存在嗎? – screenm0nkey 2010-04-13 09:14:05

+0

感謝Googletorp。一如既往,我非常感謝您的幫助。 – screenm0nkey 2010-04-13 10:07:34

0

該功能在text.module中定義。主題函數匹配從執行hook_theme()is theme_text_formatter_default()`返回的條目text_formatter_default`。

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