У меня проблема с сохранением данных в базу данных с использованием JTable. Я следую стандартной документации Joomla для создания компонента. У меня есть таблица базы данных tests
с id
, title
, description
а также created_by
колонны. Мне удалось создать форму с заголовком, описанием и с помощью стандартной функции сохранения (не редактируется) сохранить эти значения в базе данных. Но я хочу вставить идентификатор пользователя в created_by
колонка, но не знаю, как это сделать.
Не знаю, смогу ли я определить <input type="hidden">
в edit.php вид tmpl, или я должен как-то редактировать контроллер или файл таблицы?
Не могу понять, как Joomla анализирует данные формы, чтобы сохранить их в базе данных с помощью JTable.
Вот мой tmpl edit.php для тестового просмотра:
<?php
// No direct access
defined('_JEXEC') or die('Restricted access');
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_etesty&layout=edit&id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="adminForm">
<div class="form-horizontal">
<fieldset class="adminform">
<legend><?php echo JText::_( 'COM_ETESTY_TEST_DETAILS' ); ?></legend>
<div class="row-fluid">
<div class="span6">
<?php foreach ($this->form->getFieldset() as $field): ?>
<div class="control-group">
<div class="control-label"><?php echo $field->label; ?></div>
<div class="controls"><?php echo $field->input; ?></div>
</div>
<?php endforeach; ?>
</div>
</div>
</fieldset>
</div>
<div>
<?php$user = JFactory::getUser();
$user_id = $user->id;
echo '<input type="text" name="jform[created_by]" value="' . $user_id . '" />';
?><input type="hidden" name="task" value="test.edit" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
А вот моя модель test.php:
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import Joomla modelform library
jimport('joomla.application.component.modeladmin');
/**
* Test Model
*/
class ETestyModelTest extends JModelAdmin
{
/**
* Returns a reference to the a Table object, always creating it.
*
* @param type The table type to instantiate
* @param string A prefix for the table class name. Optional.
* @param array Configuration array for model. Optional.
* @return JTable A database object
* @since 1.6
*/
public function getTable($type = 'Test', $prefix = 'ETestyTable', $config = array())
{
$table = JTable::getInstance($type, $prefix, $config);
return $table;
}
/**
* Method to get the record form.
*
* @param array $data Data for the form.
* @param boolean $loadData True if the form is to load its own data (default case), false if not.
* @return mixed A JForm object on success, false on failure
* @since 1.6
*/
public function getForm($data = array(), $loadData = true)
{
// Get the form.
$form = $this->loadForm('com_etesty.test', 'test', array('control' => 'jform', 'load_data' => $loadData));
if (empty($form))
{
return false;
}
return $form;
}
/**
* Method to get the data that should be injected in the form.
*
* @return mixed The data for the form.
* @since 1.6
*/
protected function loadFormData()
{
// Check the session for previously entered form data.
$data = JFactory::getApplication()->getUserState('com_etesty.edit.test.data', array());
if (empty($data))
{
$data = $this->getItem();
}
return $data;
}
}
А вот таблица в компоненте / tables / test.php
<?php
// No direct access
defined('_JEXEC') or die('Restricted access');
// import Joomla table library
jimport('joomla.database.table');
/**
* Test Table class
*/
class ETestyTableTest extends JTable
{
/**
* Constructor
*
* @param object Database connector object
*/
function __construct(&$db)
{
parent::__construct('#__etesty_test', 'id', $db);
}
}
И моя форма в компоненте / models / forms / test.xml
<?xml version="1.0" encoding="utf-8"?>
<form>
<fieldset>
<field
name="id"type="hidden"/>
<field
name="nazev"type="textarea"label="COM_ETESTY_TEST_NAZEV_LABEL"description="COM_ETESTY_TEST_NAZEV_DESC"class="text_area"default=""/>
<field
name="popis"type="text"label="COM_ETESTY_TEST_POPIS_LABEL"description="COM_ETESTY_TEST_POPIS_DESC"size="255"class="inputbox"default=""/>
<field
name="tema"type="modal_temata"label="COM_ETESTY_TEMA_LABEL"description="COM_ETESTY_TEMA_DESC"/>
</fieldset>
</form>
На чешском языке nazev = название, popis = описание. И мне нужно получить там идентификатор пользователя, чтобы сохранить его в моей базе данных, где я создал столбец создал_бай.
В вашем файле контроллера добавьте эти коды. Не добавляйте созданный_ в вашей форме.
$user = JFactory::getUser();
$data['created_by'] = $user->id;
$model = $this->getModel('yourmodel');
$model->store($data);