Вставить значение БД в поле формы

52
1

Вопрос: Как вставить значения из таблицы базы данных (#__mytable) в текстовые поля формы (motitle и modescription), которые были отображены из XML файла на платформе Joomla 3.0?

-

Я пытался в течение нескольких дней решить эту "легкую" Joomla! на основе недокументированной задачи. Я следовал за Joomla! руководство по разработке MVC, прочитайте большую часть своей устаревшей документации и com_content компонент com_content но до сих пор не знаете, как заполнить мои поля.

Я играл с $this->form->bind($this->item); ,

Ниже я включил некоторые из моего кода, чтобы показать структуру, которую я использую. Пожалуйста, не стесняйтесь указывать на любые проблемы, которые вы видите на этом пути.

Модели\Forms\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

спросил(а) 2013-01-08T15:36:00+04:00 7 лет, 4 месяца назад
1
Решение
85

В случае, если это все еще проблема, поскольку определение формы определяет группу <fields/>.

Это означает, что поля формы будут выводиться следующим образом:

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

на основе приведенного выше примера. Если вы удалите группировку полей, это, вероятно, будет работать. Это раздражает, хотя определенные методы JForm работают только с группами...

Вероятно, вам нужно будет изменить способ передачи данных в форму, если вы хотите сохранить группировку полей (например, путем перегрузки getItem).

Надеюсь, это имеет смысл...

ответил(а) 2013-04-24T15:32:00+04:00 7 лет, 1 месяц назад
55

В Joomla 3 метод JForm::bind() видимому, принимает как объект, так и ассоциативный массив в качестве параметра. Все поля объекта/массива затем сохраняются в защищенном JRegistry данных типа JForm::$data называемом 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

Надеюсь, это поможет :)

ответил(а) 2014-02-04T07:26:00+04:00 6 лет, 3 месяца назад
38

Я нашел эту статью: http://docs.joomla.org/Adding_custom_fields_to_the_article_component

однако, я не уверен, насколько он обновлен. он ссылается на J! 2.5, и нам обоим нужно J! 3

ответил(а) 2013-07-07T16:58:00+04:00 6 лет, 10 месяцев назад
38

Вместо $oDb->loadObjectList(); использовать $oDb->loadAssoc(); в вашей функции getDBItem().

Проверьте это - http://docs.joomla.org/Accessing_the_database_using_JDatabase/1.5

Проверьте это также - joomla loadformdata

Надеюсь, это сработает.

ответил(а) 2013-01-08T17:50:00+04:00 7 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема