2011-06-21 1 views
4

私は基本的に、新しいDrupal 7 Field APIを使用して最初のフィールドタイプモジュールを作成しようとしています。 「編集」ビューで正しく表示することができました。
しかし、いくつかのデータを保存しようとすると、最初の文字だけが保存されます。ここでカスタムDrupal 7フィールドは最初の文字のみを保存します

は、モジュールです:

<?php 

function youtubefield_field_schema($field) { 
    return array(
    'columns' => array(
     'value' => array(
     'type' => 'varchar', 
     'length' => 11, 
     'not null' => true, 
    ), 
    ), 
    'indexes' => array(), 
); 
} 

EDIT:それはプログラムでデータを取得するときに、それが正常に動作として問題は、ウィジェットに関連すると思わ

<?php 

function youtubefield_field_info() { 
    return array(
    'youtubefield_video' => array(
     'label' => t('Youtube video'), 
     'description' => t('This field stores a youtube video ID and displays the video associated with it'), 
     'settings' => array(
     'max_length' => 11, 
    ), 
     'instance_settings' => array(
     'text_processing' => false, 
    ), 
     'default_widget' => 'youtubefield_video_widget', 
     'default_formatter' => 'youtubefield_video_formatter', 
    ), 
); 
} 

function youtubefield_field_widget_info() { 
    return array(
    'youtubefield_video_widget' => array(
     'label' => t('Default'), 
     'field types' => array('youtubefield_video'), 
    ), 
); 
} 

function youtubefield_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { 
    $element['#type'] = 'textfield'; 
    $element['#default_value'] = isset($items[$delta]) ? $items[$delta] : ''; 
    return $element; 
} 

function youtubefield_field_is_empty($item, $field) { 
    return !$item; 
} 

function youtubefield_field_formatter_info() { 
    return array(
    'youtubefield_video_formatter' => array(
     'label' => t('Youtube video'), 
     'field types' => array('youtubefield_video'), 
    ), 
); 
} 

そして、ここでは、インストーラです。

+0

@ Laxman13の場合、' field-api'タグの前に 'drupal-'を付ける方がよいでしょうか? –

+0

はい、感謝していなかった、ありがとう。 – Laxman13

答えて

6

このウィジェットフォームが私の仕事:

私は同じ問題とdiscoverdのhook_field_widget_form()が返す必要がありました
function youtubefield_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta,\ 
$element) { 
    $main_widget = array(); 
    switch ($instance['widget']['type']) { 
    case 'youtubefield_video_widget': 
    $main_widget = $element + array(
     '#type' => 'textfield', 
     '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : NULL, 
    ); 
    break; 
    } 
    $element['value'] = $main_widget; 
    return $element; 
} 
+0

ありがとう、これも私のために働いた –

+0

+1ありがとう、これを把握するために私をしばらく持ち込んだ。 – iLLin

+0

ありがとう!いくつかのデバッグの後、私はこの答えからの解決策が 'value 'をキー値として' $ element'配列を返すレンダリング配列であることを発見しました –

0

にウィジェット形式の変更:

function youtubefield_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { 
    switch ($instance['widget']['type']) { 
     case 'youtubefield_video_widget': 
     $element['youtubefield_video'] = array(
      '#type' => 'textfield', 
      '#title' => $element['#title'], 
      '#description' => $element['#description'], 
      '#default_value' => isset($items[$delta]['youtubefield_video']) ? $items[$delta]['youtubefield_video'] : NULL, 
      '#required' => $element['#required'], 
      '#weight' => isset($element['#weight']) ? $element['#weight'] : 0, 
      '#delta' => $delta, 
     ); 

     break; 
    } 
    return $element; 
} 
+0

お返事ありがとうございます。あなたは説明をしてくれますか? :) – Rimian

1

:「$要素[」 'value'] "

function field_youtube_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { 

    $element['value'] = array(
     '#type' => 'textfield', 
     '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : NULL, 
    ); 

    return $element; 
} 
関連する問題