web-dev-qa-db-ja.com

カスタムフォームリストフィールドで定義済みオプションを選択するにはどうすればよいですか?

カスタムフォームフィールドでいくつかのオプションを事前に選択しようとしています。 JFormFieldListを拡張し、データベースから値を取得する新しいJFormFieldを作成しました。これは私の現在のコードです:

protected function getOptions()
{
    $app   = JFactory::getApplication();
    $cid   = $app->input->get('cid' , null);
    $db    = JFactory::getDBO();
    $query = $db->getQuery(true);
    $query->select('cs.id, cs.name');
    $query->from($db->quoteName('#__asdasd', 'cs'));
    $db->setQuery((string) $query);
    $results = $db->loadObjectList();

    $options  = array();
    if ($results)
    {
        foreach ($results as $result)
        {
            $options[] = JHtmlSelect::Option($result->id, $result->name);
        }
    }

    // Merge any additional options in the XML definition.
    $options = array_merge(parent::getOptions(), $options);

    return $options;
}

これは完全に機能しますが、一部のエントリを事前選択する方法がわかりません。基本的に、オプションの一部に「selected = selected」を追加したいだけです。

これを機能させるための手がかりはありますか?私はすでにAPIドキュメントを読みましたが、混乱します( https://api.joomla.org/cms-3/classes/JHtmlSelect.html#method_option )。 $optKey探している引数は?これが事実である場合、それが機能するためにどの属性を渡す必要がありますか?

3
Johannes K.

私も同じことをしなければなりませんでした。リストフォームのフィールドコードをコピーして変更したので、2つの関数があります。

  • getInput()
  • あなたが持っているgetOptions()

GetInput関数では、それが実際にリストを作成するものです。次のような行が表示されます(genericlistは、リンク先のページにも記載されています)。

$html[] = JHtml::_('select.genericlist', $options, $this->name, trim($attr), 'value', 'text', $selected, $this->id);

ここでの重要な議論は$ selectedです。 $ selectedは、選択した項目に応じて選択したすべての値を検索するために実行するクエリから入力された配列です。

したがって、$ selectedは、genericlist生成に渡す配列であり、どの値を選択するかを伝える必要があります。

2
Alex Mehan