質問: フィールドタイプチェックボックス(チェックボックスではない)の操作方法 私のコンポーネントは複数のオプションを保存する必要があり、その方法に頭を悩ませているようには見えません。 チェックボックスフォームフィールドタイプ を参照すると、joomlaがユーザーが選択したオプションをどのように保存することを期待しているかはわかりません。更新:明確にするために、checkboxesではなく、複数のcheckboxフィールドタイプを参照しています。これが私が使用しているxmlです:<field name="content_subrating" label="content subrating" type="checkboxes" > <option value="d">suggestive dialog</option> <option value="l">course language</option> <option value="s">sexual content</option> <option value="v">violence</option> </field> 結果のhtml<fieldset class="checkboxes" id="jform_content_subrating"> <ul> <li> <input type="checkbox" checked="" value="d" name="jform[content_subrating][]" id="jform_content_subrating0"> <label for="jform_content_subrating0" aria-invalid="false">suggestive dialog</label> </li> <li> <input type="checkbox" value="l" name="jform[content_subrating][]" id="jform_content_subrating1"> <label for="jform_content_subrating1">course language</label> </li> <li> <input type="checkbox" value="s" name="jform[content_subrating][]" id="jform_content_subrating2"> <label for="jform_content_subrating2">sexual content</label> </li> <li> <input type="checkbox" value="v" name="jform[content_subrating][]" id="jform_content_subrating3"> <label for="jform_content_subrating3">violence</label> </li> </ul> </fieldset> そして結果の入力:jrequest::getvar('jform')['content_subrating']) => array ( [0] => l [1] => v ) 私の完璧な世界では、すべての値が連結されて1つの列に格納されますが、joomlaがデフォルトでそれを実行するとは思いません。そうでない場合、joomlaが後で値を取得する方法を理解できるように、どの値をどこに移動するかをどのように指定しますか。明らかな何かが欠けていると確信していますが、行き詰まっています。誰かがjoomlaがこれをどのように処理するかを説明できますか?結論:このフィールドタイプは、複数のチェックボックスを簡単に作成する簡単な方法にすぎないようです。チェックしないと何も提出しないという固有の問題があります。これらは配列として送信されるため、送信される値に基づいて処理するだけであれば十分に便利ですが、取得する必要がある場合は不要な作業のように見えます。 (ちょうど私の意見、私は間違っている可能性があります)さらなる実現(ドキュメントの最上部で!): チェックボックスフォームフィールドタイプは、チェックボックスのセットを提供します。注:テキストフィールドやチェックボックスなど、ほとんどの標準フォームフィールドタイプとは異なり、このフィールドは「すぐに使える」ソリューションではありません。チェックボックスが作成され、その値が配列の形式で送信されますが、データベースに保存されません。
回答: 私の最初の供物なので、私を撃たないでください。私はこれとしばらく戦っていましたが、最終的にはうまくいく解決策を見つけました。他の人がこの悪夢を回避できるように願っています。私が欠けていた重要な部分は、jformがチェックボックスフィールドを配列(duh)として送信していたため、jform['whatever']にアクセスしても予期した結果が得られなかったことです。opは言った: 私の完璧な世界では、すべての値を連結して1つの列に格納します はい!チェックボックスでこれを行うことができます。それは素晴らしい働きをします。これが私がしたことです。admin/models/forms/myform.xmlには、チェックボックスフィールドがあります。<field type="checkboxes" label="myfield" name="myfield" default="none" multiple="true"> <option value="something">something</option> ... <option value="something else">something else</option> </field> admin/views/myview/edit.phpフォームフィールドでは、次のように使用します:<?php echo $field->label; echo $field->input;?> admin/models/myview.phpに関数を追加しました:protected function preparetable($table) { // fix the checkboxes data $form = jfactory::getapplication()->input->get('jform', array(), 'array'); $myfield = $form['myfield'][0]; if (!isset($myfield)) { $myfield = ""; $table->myfield= $myfield; } else { $checkbox_options = $table->myfield; $table->myfield = implode(",", $checkbox_options); } } 列にカンマ区切り値としてデータを保存します。チェックボックスがオフの場合は、空白が格納されます。うん!フォームもフロントエンドで編集されるため、フロントエンドでもほぼ同じことを行いました。フォームフィールドとフォームは同じです。コントローラーの保存機能を既にオーバーライドしているので、これを(他のコードも含めて)追加しました:public function save() { $data = jfactory::getapplication()->input->get('jform', array(), 'array'); $myfield = $data['myfield'][0]; if (!isset($myfield)) { $myfield = ""; $data['myfield'] = $myfield; } else { $checkbox_options = $data['myfield']; $data['myfield'] = implode(",", $checkbox_options); } } そのコードをさらに標準化できたはずです。しかし、今、私はこれがうまくいくことを嬉しく思っています。関連ドキュメント: https://docs.joomla.org/checkboxes_form_field_type