3

我在哪里以及如何覆盖 Joomla 3.0 自定义组件中的保存方法?

现在的情况:

自定义管理员组件。

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

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

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

谢谢。

4

3 回答 3

4

只需为任何想知道问题本身答案的人添加这个 - 如果您明确希望覆盖保存功能,这将有效。但是,看看如何操作值的实际解决方案!

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

/**
 * 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 - 添加后端操作

于 2013-07-09T13:17:03.480 回答
2

模型中的prepareTable(如上所述)用于此目的(在保存之前准备和清理表格)。但是,如果您想使用 ID,您应该考虑postSaveHook在控制器中使用:

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

保存完成后postSaveHook调用,从而允许使用新插入的 ID 。

于 2015-12-14T10:39:30.237 回答
0

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

protected function prepareTable($table)
{
    $table->fieldname = newvalue;
}
于 2013-07-09T12:52:14.660 回答