hook_field_extra_fields()
được gọi bởi _field_extra_fields_pre numnder () , đây là một hàm kết xuất trước được sử dụng bởi field_attach_form () và field_attach_view () .
/**
* Pre-render callback to adjust weights and visibility of non-field elements.
*/
function _field_extra_fields_pre_render($elements) {
$entity_type = $elements['#entity_type'];
$bundle = $elements['#bundle'];
if (isset($elements['#type']) && $elements['#type'] == 'form') {
$extra_fields = field_info_extra_fields($entity_type, $bundle, 'form');
foreach ($extra_fields as $name => $settings) {
if (isset($elements[$name])) {
$elements[$name]['#weight'] = $settings['weight'];
}
}
}
elseif (isset($elements['#view_mode'])) {
$view_mode = $elements['#view_mode'];
$extra_fields = field_extra_fields_get_display($entity_type, $bundle, $view_mode);
foreach ($extra_fields as $name => $settings) {
if (isset($elements[$name])) {
$elements[$name]['#weight'] = $settings['weight'];
// Visibility: make sure we do not accidentally show a hidden element.
$elements[$name]['#access'] = isset($elements[$name]['#access']) ? ($elements[$name]['#access'] && $settings['visible']) : $settings['visible'];
}
}
}
return $elements;
}
Sử dụng các chức năng đó, bạn không nên gọi hook trực tiếp. Những chức năng này đã được sử dụng cho các thực thể mà Drupal biết; nếu bạn đang triển khai một trường cho các nút, tất cả những gì bạn cần làm là thực hiện hook.
Một ví dụ về hook_field_extra_fields()
việc thực hiện là mollom_field_extra_fields () .
function mollom_field_extra_fields() {
$extras = array();
$forms = array_flip(db_query('SELECT form_id FROM {mollom_form}')->fetchCol());
foreach (mollom_form_list() as $form_id => $info) {
// @todo Technically, an 'entity' does not need to be a Entity/Field API
// kind of entity. Ideally of course, developers should use fieldable
// entities, but contributed/custom code may not. It is not clear whether
// registering extra fields for non-existing entities/bundles can break
// anything, so leaving it this way for now.
if (isset($info['entity']) && isset($forms[$form_id])) {
// If the entity type does not implement bundles, then entity_get_info()
// assumes a single bundle named after the entity.
$entity_type = $info['entity'];
$bundle = (isset($info['bundle']) ? $info['bundle'] : $entity_type);
$extras[$entity_type][$bundle]['form']['mollom'] = array(
'label' => t('Mollom'),
'description' => t('Mollom CAPTCHA or privacy policy link'),
'weight' => 99,
);
}
}
return $extras;
}
Tác dụng của mã đó là cho phép người dùng quản trị viên thay đổi thứ tự các trường được hiển thị khi thực thể được hiển thị hoặc hiển thị trong biểu mẫu chỉnh sửa, khi thực thể được chỉnh sửa. Các UI Dòng mô-đun tiếp xúc với một giao diện người dùng cho phép người sử dụng với sự cho phép đúng (thường là người quản trị) để sắp xếp những sai lĩnh vực.