Утверждается, что в Drupal можно темизировать всё. Вернее то, что проходит обработку функциями темизации. А это практически все, что мы видим на сайте.
Сказанное относится и к любым полям CCK. Очень часто готовый модуль поля все-таки несколько не подходит вашим требованиям, поскольку отображает информацию не так, как вам хотелось бы, в тоже время предоставляя необходимый функционал для ее редактирования. Данную ситуацию легко исправить не только правкой кода соответствующего модуля, но и просто написанием одной функции, которую вы можете разместить в своей теме, не затрагивая кода ядра или дополнительных модулей.
Принципы работы
То, как выглядит информации из поля обычно задается на вкладке Display fields в настройках типа материала. У каждого поля мы видим выпадающий список, который дает возможность выбрать несколько форматов вывода информации из поля. Список этот определяется в модуле поля CCK хуком hook_field_formatter_info(). Обычно каждому формату соответствует одна функция темизации. Иногда используется одна функция для всех форматов. Все эти варианты описываются в хуке модуля hook_theme().
Итак, для того чтобы перехватить выполнения кода функции темизации поля надо выяснить ее название. А уже зная название, мы можем перехватить управление выводом в свою функцию.
Для этого смотрим код хука модуля hook_theme(). Отдельные функции являются ключами возвращаемого хуком массива. Имена этих ключей обычно выглядят так: MODULENAME_formatter_FORMATNAME. Хук возвращает массив индексированный строками ключи которого являются системными именами форматов. Если массив, соотнесенный с ключом, не содержит в себе элемента "function", то это означает, что при выборе на странице Display fields для поля MODULENAME формата с системным именем FORMATNAME будет вызвана функция темизации с именем по умолчанию theme_MODULENAME_formatter_FORMATNAME, которая должна присутствовать в коде модуля. В случае если в массиве у данного ключа определен элемент "function", то вызываться будет именно указанная в нем функция, и она обычно находится в том же модуле.
Это и есть те функции которые отвечают за внешний вид поля при отображении его в материал.
Дальнейшее просто.
В папке темы открываем файл template.php (если отсутствует, то создаем его). Определяем в нем функцию с именем phptemplate_MODULEDNAME_formatter_FORMATNAME. Имя функции должно быть именно таким, даже если в параметре "function" хука hook_theme() находится другое имя. В этом случае при показе поля в материале и установленном формате вместо функции описаной в модуле будет вызываться пользовательская.
Теперь осталось немного. Список аргументов и код копируем из соответствующей функции темизации исходного модуля. Далее изменяем его. Каким образом? Это зависит только от исходного модуля и от ваших пожеланий.
Использовать такую темизацию можно для устранения ошибок форматирования в модулях, не затрагивая их кода, а также для пользовательского форматирования полей CCK.
Примеры
Чтобы было понятно, приведу пару практических примеров. Рабочий код всегда понятнее голой теории. Особенно, когда терминология еще не перевелась и не устоялась, а автор заметки совсем не Достоевский или Толстой.
Устранение ошибок в модуле Imce CCK Image
Выводим десятичные величины как градусы, минуты и секунды дуги
Комментарии
Хотелось бы услышать замечания по терминологии...
Все ли я правильно объясняю.
В принципе четыре с плюсом поставить можно.
В некоторых местах для меня осталось загадкой значение слова "модуль".
Например тут:
Все эти варианты описываются в хуке модуля hook_theme()
hook_theme() - это такой модуль?
PS. В пятерке было как то по проще. В коде модулей ищите функции, которые начинаются так: "theme_". Целиком копируете эту функцию в файл template.php, изменяете имя функции таким макаром: "theme_xxx" -> "имя_темы_xxx". Ну и меняете вывод этой функции по своему усмотрению.
В этом каталоге cck\theme\ есть ридми, по нему все просто получается, без хуков, хотя особо в это не вникал
Вы зациклились на CCK.
А ведь с помощью функций начинающихся с "theme_" можно темизировать много всякого.
Я вот, например, уже писал про темизацию форм: http://drupal.ru/node/14060