2012-01-05 17 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