将DB值插入表单域

时间:2013-01-08 12:36:17

标签: php html xml joomla joomla3.0

问题:如何将数据库表(#__mytable)中的值插入到已从XML呈现的表单文本字段(motitlemodescription)中在Joomla 3.0平台中的文件?

-

我一直在努力解决这个“简单”的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()我可以看到我有数据,但我需要将数据插入到显示的字段中。

Data Available in Array but not within fields

4 个答案:

答案 0 :(得分:4)

如果这仍然是一个问题,因为表单定义定义了<fields />组。

这意味着表单字段将按如下方式输出:

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

基于您在上面提供的示例。如果删除字段分组,它可能会起作用。虽然某些JForm方法仅适用于群组,但这很烦人。

如果要保持字段分组(例如,通过重载getItem),您可能需要更改将数据传递到表单的方式。

希望有道理......

答案 1 :(得分:1)

在Joomla 3中,JForm::bind()方法似乎接受对象或关联数组作为参数。然后,所有对象/数组字段都存储在名为JRegistry的受保护JForm::$data类型数据成员中。

当您尝试显示表单字段(通过调用JForm::getInput())时,调用堆栈如下所示

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

JForm::getValue()返回(前面提到的JRegistryJForm::$data数据成员中的值。如果JForm::loadField()变量中的值不存在,JForm::getValue()方法也会将默认值(由表单定义)传递给JForm::$data方法。

就在模型中执行此操作而言,您可能希望从数据库查询或表生成对象或关联数组(确保字段名称与xml形式中定义的字段名称对应),然后将其传递给JForm::bind()作为参数。但是,如果您使用JModelForm,我认为您应该只覆盖JModelForm::loadFormData()以将对象/关联数组传递给加载的表单。

请参阅:libraries/joomla/form/form.php

希望有所帮助:)

答案 2 :(得分:0)

而不是$oDb->loadObjectList();$oDb->loadAssoc();函数中使用getDBItem()

检查一下 - http://docs.joomla.org/Accessing_the_database_using_JDatabase/1.5

同时检查 - joomla loadformdata

希望这会奏效。

答案 3 :(得分:0)

我找到了这篇文章: http://docs.joomla.org/Adding_custom_fields_to_the_article_component

然而,我不确定它是如何更新的。它引用了J!2.5,我们都需要J!3