2013-01-08 41 views
1

問題:如何插入從數據庫表(#__mytable)值成已從是Joomla 3.0平臺中的一個XML文件中呈現形式的文本字段(motitlemodescription)?插入dB值到表單域

-

我一直在嘗試了幾天解決這個 「簡單」 的Joomla!基於無證件的挑戰。 我遵循Joomla!'s guide for Developing an MVC,閱讀了大部分已過時的文檔,並拆除了com_content組件,但仍然不知道如何填充我的字段。我一直在玩$this->form->bind($this->item);

下面我已經包含了一些我的代碼來顯示我正在使用的結構。請隨時指出您發現的任何問題。

模型\ \形式item.xml

<?xml version="1.0" encoding="UTF-8"?> 
<form> 
    <fields name="groupOPTIONS"> 
     <fieldset name="Options"> 
      <field 
       type="text" 
       name="motitle" 
       id="motitle" 
       label="Title" 
       description="MY TEXT FIELD DESCRIPTION" 
       maxLength="255" /> 
      <field 
       type="textarea" 
       name="modescription" 
       id="modescription" 
       label="Description" 
       description="MY TEXT FIELD DESCRIPTION" 
       rows="15" 
       cols="5" 
       maxLength="255" /> 
     </fieldset> 
    </fields> 
</form> 

型號\ item.php

jimport('joomla.application.component.modelitem'); 
class MagicObjectsModelItem extends JModelForm { 

public function getForm($data = array(), $loadData = true) { 
    // Get the form 'items' 
    $form = $this->loadForm('com_magicobjects.item', 'item', 
     array('control' => 'jform', 'load_data' => $loadData)); 

if (empty($form)) { 
    return false; 
} 

      return $form; 
} 

protected function loadFormData() { 
    // Check the session for previously entered form data. 
    $data = JFactory::getApplication()->getUserState('com_magicobjects.item.edit.data', array()); 

    if (empty($data)) { 
      $data = $this->getDBItem(1); 
    } 

    return $data; 
} 

public function getDBItem($pk) { 
    //Obtain JDatabase static connection 
    $oDb = JFactory::getDbo(); 
    $oQuery = $oDb->getQuery(true); 
    $sValueToMatch = $pk; 
    $oQuery 
     ->select(array('mid', 'name', 'keyword', 'description')) 
     ->from('#__mytable') 
     ->where('mid = "' . $sValueToMatch . '"') 
     ->order('mid ASC'); 

    $oDb->setQuery($oQuery); 
    return $oDb->loadObjectList(); 
} 

意見\項目\ view.html.php

jimport('joomla.application.component.view'); 

function display($tpl = null) { 

    // Initialise variables. 
    $this->form = $this->get('Form'); 
    $this->item = $this->get('Item'); 

//Display the view 
    parent::display($tpl); 
} 

查看\項目\ TMPL \如default.php

foreach ($this->form->getFieldset('Options') as $field) { 
    echo $field->label; 
    echo $field->input; 
} 

通過對項目執行的print_r()我可以看到我有數據,但我需要將數據插入到顯示的字段。在getDBItem()功能

Data Available in Array but not within fields

+1

你用'loadFormData'功能到您的模型? – Toretto

+0

@Tornado謝謝,我已經將loadFormData添加到了我的模型中,之前我刪除了它,因爲它似乎沒有多大作用。我還將它包含在上面的代碼示例中(以及db獲取函數)。 –

+0

現在工作嗎? – Toretto

回答

0

代替$oDb->loadObjectList();使用$oDb->loadAssoc();

入住這一點 - http://docs.joomla.org/Accessing_the_database_using_JDatabase/1.5

入住這也 - joomla loadformdata

希望這會工作。

+0

感謝您的提醒,但不幸的是,這並不能解決我沒有把價值觀帶入現場的問題。我現在刪除了函數getDBItems()並在文件夾Tables中創建了一個擴展的JTable類。 –

+0

@MatthewBaker:我已經更新了答案,你可以嘗試如果你喜歡。:) – Irfan

+0

謝謝Irfan。它似乎沒有解決問題。我正在檢索數據,這只是分配給導致問題的文本框。 –

4

在這種情況下,它仍然是一個問題,因爲形式定義定義<fields />組。

這意味着,表單字段將輸出如下:根據你給上述的例子

input type="text" name="[groupOPTIONS][motitle]" 

。如果你刪除字段分組它可能會工作。這很煩人,但某些JForm方法只適用於組...

如果您想保留字段分組(例如通過重載getItem),您可能需要更改數據傳遞方式, 。

希望有道理...

0

我發現這篇文章: http://docs.joomla.org/Adding_custom_fields_to_the_article_component

但是,我不知道如何更新它。它引用J!2.5,我們都需要J!3

+1

歡迎來到Stack Overflow。請總結你答案中的鏈接;這樣,如果鏈接失效,答案不會完全無用。 – michaelb958

+0

我已經嘗試過這篇文章/教程,並且它無助於將字段添加到文章組件,但它確實將字段添加到用戶管理器。 –

+1

馬修 - 我能找到的最佳解決方案是K2的Extra Fields。 它能夠構建你需要的任何附加字段,並且通過itemform.php文件的一個非常簡單的編輯,我還可以使用選項卡順序和字段順序進行播放。 –

1

在Joomla 3中,JForm::bind()方法似乎接受一個對象或關聯數組作爲參數。然後將所有對象/數組字段存儲在名爲JForm::$data的受保護JRegistry類型數據成員中。

當你想顯示錶單字段(通過調用JForm::getInput()),調用堆棧是如下

JForm::getInput() -> JForm::getField() -> JForm::loadField() -> JForm::getValue() 

JForm::getValue()返回從(前述JRegistryJForm::$data數據成員的值。如果JForm::$data變量中的值不存在,則JForm::loadField()方法也會將默認值(由表單定義)傳遞給JForm::getValue()方法。

在模型內部,您可能希望從數據庫查詢或表中生成對象或關聯數組(確保字段名與xml形式中定義的字段名相對應),然後傳遞給它以JForm::bind()作爲參數。但是,如果您使用的是JModelForm,我認爲您應該只覆蓋JModelForm::loadFormData()以將對象/關聯數組傳遞給加載的表單。

參見:libraries/joomla/form/form.php

希望幫助:)