我正面临Joomla表单字段的奇怪问题我已将字段集类型添加为列表并将属性设置为multiple="true"
。代码如下:
<field name="optional"
type="list"
label="Optional"
description="Optional endorsements"
class="inputbox"
size="5"
multiple="true"
>
<option value="Water">
Water</option>
<option value="Foundation">
Foundation</option>
</field>
现在,当我保存表单时,选择多个值时只保存一个值。我不知道是什么问题,如果有人有任何解决方案,请帮助我。
答案 0 :(得分:4)
你没有得到价值,因为你没有得到并保存它。这是你需要做的:
在您的jTable bind()
方法中,您需要添加以下行:
if (isset($array['optional']) && is_array($array['optional'])) {
$registry = new JRegistry;
$registry->loadArray($array['optional']);
$array['optional'] = (string) $registry;
}
这会将您的多选数组转换为字符串,该字符串将保存在数据库中。
然后在模型的方法getItem
中,您需要添加以下行:
if ($item = parent::getItem($pk)) {
$registry = new JRegistry;
$registry->loadString($item->optional);
$item->optional = $registry->toArray();
}
这会将数据库字符串转换回数组并将其传递给jForm。
答案 1 :(得分:0)
首先,@ di3sel是完全正确的。我只是添加了一些不适合评论的内容。
如果您将第二个代码添加到jTable:load
方法而不是jModel::getItem
,也可以。但是代码会稍微改变一下。请注意,在这种情况下,我们必须使用$this
代替$item
。
parent::load($pk);
$registry = new JRegistry;
$registry->loadString($this->optional);
$this->optional = $registry->toArray();
这也很好,因为只需要修改一个类文件。希望这对至少有人有帮助。