我在哪里以及如何覆盖 Joomla 3.0 自定义组件中的保存方法?
现在的情况:
自定义管理员组件。
我有一个列表视图,显示存储在表中的所有人员。单击一个条目,我将进入加载表单并且可以编辑其字段的详细视图。
保存时,值存储在数据库中。这一切都很好。但是,....
点击保存时,我希望在将字段存储到数据库之前对其进行修改。如何覆盖保存功能以及在哪里?我一直在搜索这个论坛,并在谷歌上安静地搜索了一下以找到实现这一点的方法。有人给我一个简单的例子或指出我正确的方向吗?
谢谢。
只需为任何想知道问题本身答案的人添加这个 - 如果您明确希望覆盖保存功能,这将有效。但是,看看如何操作值的实际解决方案!
您在控制器中覆盖它,如下所示:
/**
* 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 - 添加后端操作
模型中的prepareTable
(如上所述)用于此目的(在保存之前准备和清理表格)。但是,如果您想使用 ID,您应该考虑postSaveHook
在控制器中使用:
protected function postSaveHook($model, $validData) {
$item = $model->getItem();
$itemid = $item->get('id');
}
保存完成后postSaveHook
调用,从而允许使用新插入的 ID 。
可以在模型文件(administrator/components/yourComponent/models/yourComponent.php)中使用prepareTable函数
protected function prepareTable($table)
{
$table->fieldname = newvalue;
}