如何覆盖组件中的save()方法

时间:2013-07-09 03:00:33

标签: joomla joomla2.5 joomla3.1

我在何处以及如何覆盖Joomla 3.0自定义组件中的save方法?

现状:

自定义管理员组件。

我有一个列表视图,显示存储在表格中的所有人。 单击一个条目,我将进入加载表单的详细视图,并且可以编辑其字段。

在保存时,值存储在数据库中。这一切都很好。但是,....

当点击保存时,我希望在将字段存储到数据库之前修改字段。如何覆盖保存功能以及在哪里?我一直在搜索这个论坛,并用谷歌搜索一下,找到实现这个的方法。有谁给我一个简单的例子或指出我正确的方向?

感谢。

3 个答案:

答案 0 :(得分:3)

只需为想要知道问题答案的人添加此内容 - 如果您明确希望覆盖保存功能,则可以使用此功能。但是,看看如何操纵值的实际解决方案!

您可以在控制器中覆盖它,如下所示:

/**
 * save a record (and redirect to main page)
 * @return void
 */
function save()
{
    $model = $this->getModel('hello');

    if ($model->store()) {
        $msg = JText::_( 'Greeting Saved!' );
    } else {
        $msg = JText::_( 'Error Saving Greeting' );
    }

    // Check the table in so it can be edited.... we are done with it anyway
    $link = 'index.php?option=com_hello';
    $this->setRedirect($link, $msg);
}

此处有更多详情:Joomla Docs - Adding Backend Actions

答案 1 :(得分:1)

模型中的prepareTable(如上所述)是为此而准备的(在保存之前准备并清理表 )。但是,如果您想要我们ID,您应该考虑使用控制器中的postSaveHook

protected function postSaveHook($model, $validData) {
    $item = $model->getItem();
    $itemid = $item->get('id');
}

保存完成后,postSaveHook被称为 ,因此允许使用新插入的ID。

答案 2 :(得分:0)

您可以在模型文件中使用prepareTable函数(administrator / components / yourComponent / models / yourComponent.php)

protected function prepareTable($table)
{
    $table->fieldname = newvalue;
}