在我的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在保存后编辑条目时为我预选这些值。它适用于其他所有类型的领域,为什么不在这里呢?我有什么遗忘吗?
先谢谢!
编辑:答案中的绑定功能,我稍微调整了一下。
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”:)
祝你好运!答案 0 :(得分:5)
如果您遵循Joomla的标准,您的模型中应该有一个名为“loadFormData”的方法。在那里,您可以确保从数据库中获取字段时将其转换为数组,例如:
<?php
protected function loadFormData()
{
// Check the session for previously entered form data.
$data = JFactory::getApplication()->getUserState('com_yourcomponent.edit.item.data', array());
if (empty($data)) {
$data = $this->getItem();
}
// THIS IS WHAT YOU MUST BE MISSING
if (is_array($data) && !is_array($data['colors'])){
$data['colors'] = explode(',',$data['colors']);
} elseif (is_object($data) && !is_array($data->colors)) {
$data->colors = explode(',',$data->colors);
}
return $data;
}
?>
您还需要覆盖表类中的bind方法:
<?php
public function bind($src, $ignore = array())
{
if (parent::bind($src, $ignore) && is_array($this->colors)){
$this->colors = implode(',', $this->colors);
}
}
答案 1 :(得分:0)
我的数据存储不同,如{“0”:“3841”,“1”:“3889”}所以转换的正确代码是
$ data-&gt; postcode =(array)json_decode($ data-&gt; postcode);
谢谢你的解决方案,非常有帮助。