Dans mon composant personnalisé joomla j'ai utilisé le type de champ SQL (item.xml) :
<field name="colors" type="sql" query="SELECT id ,name FROM #__products_colors" multiple="multiple" key_field="id" value_field="name" class="inputbox"
label="colors" description="COM_PRODUCTS_FORM_DESC_ITEM_COLORS" />
De mon point de vue, j'appelle le champ comme ceci :
<?php echo $this->form->getInput('colors'); ?>
Ce qui me donne une jolie boîte de sélection comme celle-ci :
<select id="jform_colors" class="inputbox" multiple="multiple" name="jform[colors][]" aria-invalid="false">
<option value="1">blue</option>
<option value="2">yellow</option>
<option value="3">red</option>
<option value="4">green</option>
<option value="5">purple</option>
Lorsque j'enregistre ce champ de couleurs, après avoir sélectionné le bleu et le rouge par exemple, il est enregistré comme 1,3 dans ma base de données. Joomla fait tout le travail pour moi... (MERCI Joomla)
Je suis peut-être trop gourmand, mais je m'attends à ce que Joomla présélectionne ces valeurs pour moi lorsque je modifie une entrée après l'avoir enregistrée. Il le fait avec tous les autres types de champs, alors pourquoi pas ici ? Y a-t-il quelque chose que j'oublie ?
Merci en avance !
edit : la fonction bind dans la réponse, je l'ai un peu modifiée.
public function bind($array, $ignore = '') {
if (isset($array['params']) && is_array($array['params'])) {
$registry = new JRegistry();
$registry->loadArray($array['params']);
$array['params'] = (string) $registry;
}
//print_r($array);
if (key_exists('colors', $array) && is_array($array['colors'])) {
echo "pwn";
$array['colors'] = implode(',', $array['colors']);
}
if (isset($array['metadata']) && is_array($array['metadata'])) {
$registry = new JRegistry();
$registry->loadArray($array['metadata']);
$array['metadata'] = (string) $registry;
}
return parent::bind($array, $ignore);
}
Et N'UTILISEZ PAS de filtre="safehtml" :)
Bonne chance à tous !