web-dev-qa-db-fra.com

Enregistrer le champ personnalisé de plusieurs listes pour le composant

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?

1
dip

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.

1
dip

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

0
Alex Mehan