функция предварительной обработки для типов узлов cck

(Примечание: я изначально разместил это на drupal.org, прежде чем вспомнить, что никогда не получаю оттуда ответа. Прошу прощения за перекрестную публикацию)

Здравствуйте, есть ли способ (встроенный или другой) добавить функции предварительной обработки для определенных типов узлов cck? Я хочу выполнить предварительную обработку поля в моем типе узла cck. В настоящее время я могу либо использовать theme_preprocess_node, а затем переключить тип $ node->, либо использовать функцию тематики для определенного имени поля (и все же сделать переключатель, чтобы убедиться, что текущее использование поля находится в типе узла, который я ищу за). Я предлагаю иметь такую ​​функцию ...

theme_preprocess_mynodetype(&$vars) {
    // Now I can preprocess a field without testing whether the field is within the target content type
}

... но я не могу понять, могу ли я предлагать функции предварительной обработки так же, как я могу предлагать файлы шаблонов

Спасибо! Роб


person rob5408    schedule 14.01.2010    source источник


Ответы (2)


Я думаю, что вы ищете этот пост. Нет никакого волшебного препроцесса для каждого узла, только для механизма темы / шаблона, но у вас есть доступ к типу узла в параметре $ vars, поэтому вы можете включить его там.

Надеюсь, это поможет!

person Chuck Vose    schedule 14.01.2010
comment
Привет, спасибо, я видел это, но эта функция использует препроцессор узла с переключателем, которого я пытался избежать (вроде), чтобы остановить рост этого препроцессора до больших размеров. Думаю, я мог бы использовать theme_preprocessor_node с переключателем, который на самом деле вызывает theme_preprocessor_cat (), theme_preprocessor_dog () и т.д. Но, может быть, нет автоматического способа или способа предложить функции предварительной обработки (способ, которым предлагаются файлы tpl)? - person rob5408; 14.01.2010
comment
Пометка этого как принятого, потому что нет никакого волшебного препроцесса для каждого узла, который я искал, но ответ Никита дает обходной путь. - person rob5408; 07.02.2011

См. Эту функцию в content.module cck:


/**
 * Theme preprocess function for field.tpl.php.
 *
 * The $variables array contains the following arguments:
 * - $node
 * - $field
 * - $items
 * - $teaser
 * - $page
 *
 * @see field.tpl.php
 *
 * TODO : this should live in theme/theme.inc, but then the preprocessor
 * doesn't get called when the theme overrides the template. Bug in theme layer ?
 */
function content_preprocess_content_field(&$variables) {
  $element = $variables['element'];
...

person Nikit    schedule 15.01.2010
comment
Спасибо, что заглянули. В этой функции CCK фактически устанавливает предложения для файлов tpl, но не функции предварительной обработки (насколько я могу судить), но это побудило меня глубже изучить content.module. Выложу то, что найду. - person rob5408; 15.01.2010