В моя потребителски компонент на joomla използвах типа 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" />
Според мен наричам полето така:
<?php echo $this->form->getInput('colors'); ?>
Което ми дава хубаво и гладко поле за избор като това:
<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>
Когато запазя това поле за цветове, след като избера например синьо и червено, то се записва като 1,3 в моята база данни. Joomla върши цялата работа вместо мен... (БЛАГОДАРЯ Joomla)
Сега може би ставам алчен, но по някакъв начин очаквам Joomla да избере предварително тези стойности за мен, когато редактирам запис след запазване. Той прави това с всеки друг тип поле, така че защо не и тук? Има ли нещо, което забравям?
Благодаря в adv!
редактиране: функцията за свързване в отговора, промених я малко.
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);
}
И НЕ използвайте filter="safehtml" :)
Успех на всички!