web-dev-qa-db-fra.com

Comment sélectionner des options prédéfinies dans un champ de liste de formulaire personnalisé?

J'essaie de présélectionner plusieurs options dans un champ de formulaire personnalisé. J'ai créé un nouveau JFormField qui étend JFormFieldList et tire ses valeurs de ma base de données. Ceci est mon code actuel:

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;
}

Cela fonctionne parfaitement, mais je ne vois pas comment présélectionner certaines entrées. Fondamentalement, je veux juste ajouter "sélectionné = sélectionné" à certaines des options.

Y a-t-il un indice sur la façon dont je peux obtenir que cela fonctionne? J'ai déjà lu la documentation de l'API, mais je trouve que cela crée de la confusion ( https://api.joomla.org/cms-3/classes/JHtmlSelect.html#method_option ). Est $optKey l'argument que je cherche? Si tel est le cas, quels attributs dois-je transmettre pour que cela fonctionne?

3
Johannes K.

J'ai dû faire la même chose. J'ai copié le code de champ du formulaire de liste et l'ai modifié en conséquence. J'ai donc 2 fonctions:

  • getInput ()
  • getOptions () que vous avez

Dans la fonction getInput, c'est ce qui crée la liste. Vous verrez une ligne comme celle-ci (la liste générique est également indiquée dans la page à laquelle vous avez accédé):

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

L'argument important ici est $ sélectionné. $ selected est un tableau rempli à partir d'une requête que j'effectue en recherchant toutes les valeurs sélectionnées en fonction de l'élément sélectionné.

Ainsi, $ selected devrait être un tableau que vous transmettez à la génération de la liste générique pour lui indiquer les valeurs à sélectionner.

2
Alex Mehan