CTools Panels Content Type(つまり、ノードのタイプではなく、コンテンツを追加するときにパネルに挿入するもの)を構築していて、フォーム項目の#ajax
属性を使用していくつかのデフォルト値を設定しようとしています。以下のコードを参照してください。
my_module_content_type_edit_form($form, &$form_state)
ちなみに、これはすべてコンテンツタイプの呼び出しの内部です。
$form['link_type'] = array(
'#type' => 'radios',
'#title' => t('Link Type'),
'#ajax' => array(
'callback' => 'my_module_set_target'
),
'#default_value' => empty($conf['link_type']) ? '_blank' : $conf['link_type'],
'#options' => array('none'=>t('No Link'), 'internal'=>t('Internal Link'), 'external'=>t('External Link'), 'document'=>t('Document Link')),
);
私のコールバックは次のとおりです。
function my_module_set_target($form, $form_state) {
watchdog("Test", "Testing callback", array(), WATCHDOG_ALERT);
$form['link_target']['#default_value'] = '_parent';
return $form['link_target']['#default_value'];
}
私が提案しているリターンが実際に機能するかどうかに関係なく、watchdog()
機能しません。
CToolsがAJAXでいくつかの奇妙なことを行うことは知っていますが、それはそれほど奇妙なことではありません。私がやりたいことをどのように行うかについて何か考えはありますか?
ありがとう!
別の方法:以前のフォームオプションの値に基づいてデフォルト値を設定するにはどうすればよいですか?
私はこれを行う方法を理解しましたが、少し厄介です-各依存関係フォークに新しいフォームフィールドを作成します。次にhook_content_type_edit_form_submit()
、最初にすべてをフォークしたコンポーネントに選択された値に対応するものを使用して、で値をマージできます。
私(そして率直に言って、私が協力しているすべてのプログラマー)は、これらのPanelコンテンツタイプ編集フォーム内でAJAXを使用する良い方法を本当に望んでいるので、私は質問を開いたままにします。
更新: #attachedも使用できないようです。
$form['link'][$i] = array(
'#type' => 'fieldset',
'#title' => t('Link #@num', array('@num' => $i)),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#attached' => array(
'js' => array(
'alert("Yay.");', 'inline'
),
)
);
ctools_add_js();
またはdrupal_add_js();
の最後にJavascriptを正常に追加できたことは注目に値しhook_content_type_edit_form();
ます。単純なUI関連のことだけをしている場合は、それが最善の方法のようです(少なくとも誰かがこの質問に正しく答えるまで)。