我在何处以及如何覆盖Joomla 3.0自定义组件中的save方法?
现状:
自定义管理员组件。
我有一个列表视图,显示存储在表格中的所有人。 单击一个条目,我将进入加载表单的详细视图,并且可以编辑其字段。
在保存时,值存储在数据库中。这一切都很好。但是,....
当点击保存时,我希望在将字段存储到数据库之前修改字段。如何覆盖保存功能以及在哪里?我一直在搜索这个论坛,并用谷歌搜索一下,找到实现这个的方法。有谁给我一个简单的例子或指出我正确的方向?
感谢。
答案 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);
}
答案 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;
}