J'ai créé un type de champ de formulaire personnalisé
class JFormFieldCategories extends JFormFieldList
{
protected $type = 'categories';
public function getOptions()
{
$db = JFactory::getDBO();
$categories=array();
$sql = "select * from #__table";
$db->setQuery( $sql );
$results = $db->loadObjectList();
if(count($results)>0)
{
foreach($results as $resc){
$options[$resc->id] = $resc->description;
}
}
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}
J'ai ajouté le champ au formulaire
<field name="discount_on_categories" type="categories" multiple="true" size="40" />
C'est une valeur de sélection multiple. Que dois-je faire pour enregistrer les valeurs sélectionnées dans la base de données et les afficher lorsque je modifie l'élément?
J'ai trouvé la solution à ce sujet, alors je le partage au cas où quelqu'un d'autre en aurait besoin. J'ai ajouté une partie de code à 2 endroits. Premier sur le fichier de table, en fonction bind:
if (isset($array['discount_on_categories']) && is_array($array['discount_on_categories'])) {
$registry = new JRegistry;
$registry->loadArray($array['discount_on_categories']);
$array['discount_on_categories'] = (string) $registry;
}
puis dans le fichier de modèle:
$registry = new JRegistry;
$registry->loadString($item->discount_on_categories);
$item->discount_on_categories = $registry->toArray();
La première partie convertit la valeur du champ en chaîne de manière à pouvoir l'enregistrer dans la base de données et la deuxième partie convertit la chaîne en tableau afin d'afficher les options sélectionnées du champ.
Je pense que vous recherchez la même chose que cette question - vérifiez ma réponse ici . J'avais besoin de la même chose et après de nombreuses heures, proposer cette solution