Функции переопределения функций и функции препроцесса - для не-программиста
Я пытаюсь понять, что это такое. Я прочитал несколько статей и сообщений, в которых рассказывается о Drupal theming, где они упомянуты, но я изо всех сил пытаюсь понять, что они представляют и что они делают - каждое объяснение, которое я видел до сих пор (в том числе на Drupal.org), делает предположение что я знаю PHP или имею опыт программирования.
Может кто-нибудь объяснить в терминах непрофессионала или указать на хорошее, простое в понимании объяснение, пожалуйста?
1 ответ
Ну, тематический слой - это PHP, поэтому вам потребуется минимальное понимание некоторых концепций программирования (например, что a функция ). Тем более, что вам придется писать в них базовый PHP. Таким образом, следующее может быть не совсем подходящим для не-программиста, но я попытался связать все, чтобы вы могли больше узнать об этом. Кроме того, добавьте комментарии, если что-то неясно.
Тематический слой основывается на соглашениях об именах на то, как назвать свои функции так, чтобы они вызывались автоматически. Подобно так называемому крючки . По крайней мере, функции предварительной обработки - это особый вариант крючков. Я вернусь к этому позже.
Любой модуль может регистрировать функции темы (или шаблоны) с помощью hook_theme () (вам не нужно понимать, как это работает прямо сейчас). ) Например, он может в основном сказать Drupal, что у него есть функция темы, называемая mymodule_fancything
. Этот модуль также отвечает за предоставление функции темы по умолчанию, которая имеет префикс theme_
. В предыдущем примере этому модулю необходимо определить функцию theme_mymodule_fancything
.
В дальнейшем этот или любой другой модуль может вызвать эту функцию темы с помощью функции theme () следующим образом: theme('mymodule_fancything', $arg1, $arg2);
(D6) или theme('mymodule_fancything
, array ('arg1' => $ arg1, 'arg2' => $ arg2)); `(D7).
Затем эта функция будет определять, какую функцию вызывать. Во-первых, он проверяет, есть ли переопределение темы для активной темы. Это означает, что функция с префиксом themename_
вместо theme_
. Итак, в нашем примере themename_mymodule_fancything
. Если он найдет эту функцию, она вызовет это, а если нет, она вернется к theme_mymodule_fancything
.
Как вы видели в примере кода, вы обычно передаете несколько аргументов функции темы или шаблону, который содержит данные, которые должны отображаться. Иногда вы хотите продолжить обработку /изменение этой информации до того, как она будет передана функции темы или шаблону. Или модуль хочет что-то изменить из другого модуля. Кроме того, поскольку функции темы /шаблоны не должны содержать сложную обработку PHP. В отличие от упомянутых крючков (которые могут быть реализованы всеми модулями, и все они называются), функция темы может быть только переопределена один раз.
Именно здесь вступают в действие функции препроцесса. Они вызываются темой () и получают все аргументы, переданные этой функции темы (только в D7) или шаблоне. Тогда они могут быть изменены /расширены каким-либо образом. Существует множество правил, которые вызывают функции препроцесса, но в основном вы обычно используете только те, которые являются специфическими для данной функции темы /шаблона. Это выглядит так: name_preprocess_hook(&$vars)
. name
может быть именем модуля или темы и hook
- это имя функции template /theme. Существует множество примеров для функций препроцесса в ядре, поиск preprocess .
Не забудьте перестроить реестр тем (например, с помощью devel.module или путем сохранения формы конфигурации темы).