質問

使用するモジュールを作成しました hook_form_alter(). 。フォームがロードされたら(ノード/追加)、フィールドを非表示にすると、フックは正常に機能します。問題は、フォームのプレビューを行うときに表示されます。フォームが再び表示されると、隠されたフィールドが表示されます(フックは機能しません)。なんで?

私はラインを通してフィールドを隠します:

$form['field_versio']['und']['0']['value']['#type']="hidden";
役に立ちましたか?

解決 2

hook_node_validate()は答えです。

フォームにリンクする必要があるDrupal_Add_js関数を含む個人関数Xを構築しました。

フォーム(コンテンツタイプ)に応じて、fook_form_alter()(node/add first load)またはfook_node_validate()(node/add from preview、balidating、...)から関数xを呼び出します。

function my_javascripts($form_id) {
  $path = drupal_get_path('module', 'MYMODULE');
  switch ($form_id) {
    case "CONTENTTYPE-node-form":
        drupal_add_js($path.'/CONTENTTYPE.js','file');
    break;
  }
} 

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  my_javascripts($form['#id']);
}

function MYMODULE_node_validate($node, $form, &$form_state) {
  my_javascripts($form['#id']); 
}

他のヒント

まず、要素へのアクセスを許可する#Access = falseを使用する必要があります。 #Type Hiddenは安全ではありません。これは、ユーザーが簡単に変更できる隠し入力フィールドとして印刷されていることを意味します。

それを行うと、$ form ['field_versio'] ['#access']など、フィールド要素に#accessを直接設定すると、すべてのサブエレメントへのアクセスが許可されます(複数の場合)。

プレビューで機能しない理由がわからない場合は、Drupal_set_message( 'test')コールを追加して、フックが呼び出されているかどうかを確認してください。

ライセンス: CC-BY-SA帰属
所属していません drupal.stackexchange
scroll top