2012-01-05 21 views
2

预选在我的Joomla自定义组件我用SQL字段类型(item.xml):的Joomla 1.7多个SQL名单上没有编辑

<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> 

当我保存此颜色的场,AF例如选择蓝色和红色,例如它会在我的数据库中保存为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); 
} 

而且不使用过滤器= “safehtml” :)

运气好一切!

+0

你可以显示php代码,你在哪里得到表单? – Gaurav 2012-01-09 15:49:33

+0

嗯,是的,其中大部分是<?php echo $ this-> form-> getInput('colors'); ?>

您还需要重写你的绑定方法在你的表类:

<?php 
public function bind($src, $ignore = array()) 
{ 
    if (parent::bind($src, $ignore) && is_array($this->colors)){ 
     $this->colors = implode(',', $this->colors); 
    } 
} 
+0

Guilleva !!我的英雄..我居然这样摆弄,但那是在我使用SQL数据字段之前。只需一次编辑:getItem()获取对象:不是数组!所以用'$ data-> colors'替换'$ data ['colors']'。赏金是你的方式! – 2012-01-11 09:49:50

+0

感谢Hans,我认为$ data是从数据库中检索时的一个对象,例如当项目打开进行编辑时,但它是和数组,当用户提交表单并且数据和表单存在错误时再次显示提交的数据。所以我已经更新了处理这两种情况的答案。 – guilleva 2012-01-11 14:29:34

+0

啊...有趣...虐待测试! thx的更新 – 2012-01-12 06:20:24

0

我的数据像{“0”:“3841”,“1”:“3889”}存储一点点不同,所以正确的转换代码是

$ data-> postcode =(array)json_decode($ data-> postcode );

谢谢你的解决方案,非常有帮助。

+0

那么这只是因为你的数据在你的特定组件中被存储为JSON。这在这种情况下并不真正相关,但感谢增加:) – 2012-01-18 08:30:40