Функции переопределения функций и функции препроцесса - для не-программиста

Я пытаюсь понять, что это такое. Я прочитал несколько статей и сообщений, в которых рассказывается о Drupal theming, где они упомянуты, но я изо всех сил пытаюсь понять, что они представляют и что они делают - каждое объяснение, которое я видел до сих пор (в том числе на Drupal.org), делает предположение что я знаю PHP или имею опыт программирования.

Может кто-нибудь объяснить в терминах непрофессионала или указать на хорошее, простое в понимании объяснение, пожалуйста?

6 голосов | спросил James 11 J000000Monday11 2011, 00:22:31

1 ответ


10

Ну, тематический слой - это 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 или путем сохранения формы конфигурации темы).

ответил Berdir 11 J000000Monday11 2011, 15:36:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132