2011-06-05 4 views
2

私はdrupalでカスタムフィールドを作成しようとしています。7. wysiwygフィールド以外のevrythingはうまく動作します。 私はWYSIWYG要素を構築するために、次のコードを使用しています:drupalのカスタムフィールドのWYSIWYG 7

$element['my_body'] = array(
    '#title' => t('Editor'), 
    '#type' => 'text_format', 
    '#tree' => true, 
    '#rows' => 20, 
    '#format' => 'filtered_html', 
); 

その(通常のテキストエリア)をWYSIWYGていない場合は、すべての罰金行く救うが、私はTEXT_FORMATに変更した後、Drupalは配列としてフィールドの値を取得2つのキー(値とフォーマット)で、drupalがフィールドの値を保存している間はエラーになります。 私が理解している限り、drupalは2つの異なる値(body_filterとformat)を持ち、2つのキー(値とフォーマット)を持つbody_filter配列ではありません。

誰でも私にこの問題を解決するヒントを与えることができます(googleとdrupal.orgに関連するものは見つかりません)。

ありがとうございました。

答えて

0

はい、text_formatフィールドの値は、それがどのようになっているかの配列です。

Drupalは自動的に何かを保存しません。どこに保存しますか?配列を操作するには、そのコードを修正するだけです。

+0

私がそれを理解する限り、Drupalは実際にデータを自動的に保存します。 Drupalは、フォーム内のフィールド名に対してdbフィールド名(module.installファイルで作成されたもの)をチェックすることによって、「魔法」を実行します。 これはfield_sql_storage_field_storage_write()で発生しています –

+1

ああ、フィールドを作成しています。はい、これらの値はスキーマに従って自動的に保存されます。 *しかし*、あなたはhttp://api.drupal.org/api/drupal/modules--field--field.api.php/function/hook_field_presave/7を実装してそれを変更し、配列を2つの別々の値に分割することができます。あなたのスキーマに従って。また、text.moduleがどのように同じ "問題"を持っているかを見ることができますが、私はそれを理解することができませんでした。 – Berdir

1

text_formatタイプフィールドの値は、$form_state['values']['my_body']['value']となります。

4

私は同じ問題にぶつかり、Berdirのヒントのおかげで解決策を見つけました。

あなたは「TEXT_FORMAT」を述べたようにのように二つの値を持つ配列を返します。hook_field_presaveを使用して

$items[0]['MY_WYSIWYG_FIELD'] = array(
    'value' => 'some text.', 
    'format' => 'filtered_html' 
); 

()私は私のデシベルにそれを保存するための値を準備することができました。

私はフォーマット値を保存したくないので、 私は単に[「MY_WYSIWYG_FIELD」]配列からテキスト値を抽出し、抽出した値で配列を置き換える:

$items[0]['MY_WYSIWYG_FIELD'] = 'some text.'; 

私のフックルックスをこのように:

function MY_FIELD_MODULE_field_presave($entity_type, $entity, $field, $instance, $langcode, &$items) { 
    if ($field['type'] == 'MY_FIELD_TYPE') { 
    foreach ($items as $delta => $item) { 
    if (isset($item['MY_WYSIWYG_FIELD'])) { 
     $value = $item['MY_WYSIWYG_FIELD']['value']; 
     $items[$delta]['MY_WYSIWYG_FIELD'] = $value; 
     } 
     } 
    } 
} 

この情報がお役に立てば幸い!

+0

このソリューションを投稿していただきありがとうございます。私はすべての修正を探しています! – ToraRTC