如何将用户名存储到后端组件中的自定义db表中

时间:2013-06-17 20:44:07

标签: database joomla store backend username

我有一个为joomla后端管理开发的组件。

我有一个编辑视图和控制器,与之关联的模型。

每当我编辑或创建记录时,我想获取用户名并将其存储到我的表中,该表具有当前用户的字段,用于进行更新或创建记录。

我知道如何获取用户名:

$user = JFactory::getUser();
$uname = $user->name;

(成分/视图// TMPL / edit.php):

<?php 
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

$option = JRequest::getCmd('option');

JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
?>
<form action="<?php echo JRoute::_('index.php?option=com_reservation&view=tabletypes'); ?>" method="post" name="adminForm" id="tabletype-admin-form" class="form-validate">
    <input type="hidden" name="option" value="<?=$option?>" />
    <input type="hidden" name="task" value="" />
    <input type="hidden" name="id" value="<?=$this->item->id?>" />
    <input type="hidden" name="upd_user" value="Test-ere" />
    <?php echo JHtml::_('form.token'); ?>

    <fieldset class="adminform">
        <legend>DETAILS</legend>
        <ul class="adminformlist">
                <li><?php echo $this->form->getLabel('name'); ?>
                <?php echo $this->form->getInput('name'); ?></li>
        </ul>
    </fieldset>
</form>

/组件/控制器/ [controllername] .PHP:

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import Joomla controlleradmin library
jimport('joomla.application.component.controllerform');
class <ComponentName>Controller<ViewName> extends JControllerForm
{
    public function __construct($config = array())
    {
        $this->view_list = '<viewName>';
        parent::__construct($config);
    }
}

/组件/模型/ [视图名] .PHP

<?php
defined('_JEXEC') or die();
jimport( 'joomla.application.component.modeladmin' );
class <ComponentName>Model<ViewName> extends JModelAdmin
{    
    public function getForm($data = array(), $loadData = true)
    {
        // Get the form
        $form = $this->loadForm('com_<componentname>.<viewname>', '<viewname>', 
           array('control' => 'jform', 'load_data' => $loadData));
        if (!$form) {
            return false;
        }else{
            return $form;
        }
    }

    public function getTable($type = '<tableName>', $prefix = '<Prefix>', $config = array()) 
    {
        return JTable::getInstance($type, $prefix, $config);
    }

    public function loadFormData()
    {
        // Load form data
        $data = JFactory::getApplication()->getUserState('com_<componentname>.edit.<viewname>.data', array());
        if (empty($data)) 
        {       
            $data = $this->getItem();
        }
        return $data;
    }
}

/组件/模型/形式/ [表格]的.xml

<?xml version="1.0" encoding="utf-8"?>
<form>
        <fieldset>
                <field
                        name="id"
                        type="hidden"
                />
                <field
                        name="name"
                        type="text"
                        ...
                />
                <field
                        name="published"
                        type="combo"
                        ...
                </field>
                <field
                        name="upd_user" (this is the field where i wanna store current user)
                        type="user"
                />
                <field
                        name="upd_date"
                        type="hidden"
                />
        </fieldset>
</form>

/组件/表/ [表名] .PHP

<?php
// No direct access
defined('_JEXEC') or die('Restricted access');

// import Joomla table library
jimport('joomla.database.table');

/**
 * Table class
 */
class [ComponentName]Table<ViewName> extends JTable
{
        /**
         * Constructor
         *
         * @param object Database connector object
         */
        function __construct(&$db) 
        {
                parent::__construct('#__[db_table_name]', 'id', $db);
        }
}

我希望你们能告诉我一种方法......提前致谢...

2 个答案:

答案 0 :(得分:1)

我找到了解决方案。 Joomla的人认为这个很好的实现方式可以为开发人员提供灵活性。

在JModelAdmin类中,有一个驱动类实现的方法:

/**
 * Prepare and sanitise the table data prior to saving.
 *
 * @param   JTable  &$table  A reference to a JTable object.
 *
 * @return  void
 *
 * @since   11.1
 */
protected function prepareTable(&$table)
{
    // Derived class will provide its own implementation if required.
}

您可以在派生类中重写此方法,并根据需要修改表对象字段。

希望其他人通过这个答案节省时间。

答案 1 :(得分:0)

检查控制器文件以获取保存功能。

控制器中的save函数调用model上的store()。如果它是一个默认组件,它将在那里或你必须创建它然后在你的模型中你的数据保存功能你可以再添加一个查询来更新行最后一次修改它的用途Id not name这是一个好习惯。

如果在控制器上找不到此保存,它可能会使用joomla库,然后您可以添加一个名为Save()的函数并在其中编写适当的任务。

希望它可以帮助......