1

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

-

几天来,我一直在尝试解决这个“简单”的 Joomla!基于无证挑战。我遵循了 Joomla! 的开发 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() 可以看到我有数据,但我需要将数据插入显示的字段中。

数据在数组中可用,但在字段中不可用

4

3 回答 3

4

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

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

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

根据你上面给出的例子。如果您删除字段分组,它可能会起作用。这很烦人,因为某些 JForm 方法只适用于组......

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

希望这是有道理的...

于 2013-04-24T12:32:48.047 回答
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

希望有帮助:)

于 2014-02-04T04:26:52.423 回答
0

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

检查这个 - http://docs.joomla.org/Accessing_the_database_using_JDatabase/1.5

还要检查这个 - joomla loadformdata

希望这会奏效。

于 2013-01-08T14:50:04.567 回答