问题:如何将数据库表(#__mytable)中的值插入到已从XML呈现的表单文本字段(motitle
和modescription
)中在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()我可以看到我有数据,但我需要将数据插入到显示的字段中。
答案 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()
返回(前面提到的JRegistry
)JForm::$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