我的模塊實現了一系列字段api函數,以提供由文本字段和textarea組成的自定義字段類型。 hook_field_validate函數被所有正確的鍵調用,但從來沒有任何值 - 真的很感激,如果有人會看看所有的代碼,並告訴我是否有任何問題。Drupal 7字段API hook_field_validate沒有接收數據?
function brooklands_field_info() {
return array(
'brooklands_heading_text' => array(
'label' => t('Heading with text'),
'description' => t('Heading with text - says it all.'),
'default_widget' => 'brooklands_heading_text_widget',
'default_formatter' => 'brooklands_heading_text_formatter',
),
);
}
function brooklands_field_validate($entity_type, $entity, $field,
$instance, $langcode, $items, &$errors) {
/*foreach ($items as $delta => $item) {
// $item never contains any data!!!!!
$heading = check_plain($item['brooklandsheading']);
$text = check_markup($item['value'], $item['format']);
if(!empty($heading) || !empty($text) && empty($heading) || empty($text)) {
$errors[$field['field_name']][$langcode][$delta][] = array(
'error' => 'brooklands_invalid',
'message' => t('Must have both heading and text'),
);
}
}*/
}
function brooklands_field_widget_error($element, $error, $form, &$form_state) {
switch ($error['error']) {
case 'brooklands_invalid':
form_error($element, $error['message']);
break;
}
}
function brooklands_field_is_empty($item, $field) {
return empty($item['brooklandsheading']) || empty($item['value']);
}
function brooklands_field_formatter_info() {
return array(
'brooklands_heading_text_formatter' => array(
'label' => t('Heading text formatter'),
'field types' => array('brooklands_heading_text'),
),
);
}
function brooklands_field_formatter_view($entity_type, $entity, $field,
$instance, $langcode, $items, $display) {
$element = array();
foreach ($items as $delta => $item) {
$element[$delta]['#markup'] = '<div class="brooklands-heading-text"><h3>'
.check_plain($item['brooklandsheading']).'</h3>'
.check_markup($item['value'], $item['format']).'</div>';
}
return $element;
}
function brooklands_field_widget_info() {
return array(
'brooklands_heading_text_widget' => array(
'label' => 'Heading/text widget',
'field types' => array('brooklands_heading_text'),
),
);
}
function brooklands_field_widget_form(&$form, &$form_state, $field,
$instance, $langcode, $items, $delta, $element) {
$element['brooklandsheading'] = array(
'#delta' => $delta,
'#default_value' => isset($items[$delta]['brooklandsheading']) ?
$items[$delta]['brooklandsheading'] : '',
'#type' => 'textfield',
'#size' => 64,
'#maxlength' => 256,
'#title' => t('Heading')
);
$text = array(
'#type' => 'textarea',
'#default_value' => isset($items[$delta]['value']) ?
$items[$delta]['value'] : '',
);
$element += $text;
$element['#format'] = isset($items[$delta]['format']) ?
$items[$delta]['format'] : NULL;
$element['#base_type'] = $element['#type'];
$element['#type'] = 'text_format';
$element['#title'] = t('Text');
return $element;
}
編輯:這是從我模塊的hook_field_schema執行文件級安裝
function brooklands_field_schema($field) {
$columns = array(
'brooklandsheading' => array(
'type' => 'varchar',
'length' => 256,
'not null' => FALSE
),
'value' => array(
'type' => 'text',
'not null' => FALSE
),
'format' => array(
'type' => 'varchar',
'length' => 255,
'not null' => FALSE,
),
);
return array(
'columns' => $columns,
'indexes' => array(
'format' => array('format'),
),
'foreign keys' => array(
'format' => array(
'table' => 'filter_format',
'columns' => array('format' => 'format'),
),
),
);
}